From 6492d96a3a2d2448154be11dd64cf907d13f85ba Mon Sep 17 00:00:00 2001 From: brenob6 Date: Thu, 28 Nov 2024 21:29:32 -0300 Subject: [PATCH 1/2] add tutorial conectando ESO e HCP Vault --- docs/2-Conectando/ESO-Vault.md | 148 +++++++++++++++++++++++++++++++++ mkdocs.yml | 3 +- 2 files changed, 150 insertions(+), 1 deletion(-) create mode 100644 docs/2-Conectando/ESO-Vault.md diff --git a/docs/2-Conectando/ESO-Vault.md b/docs/2-Conectando/ESO-Vault.md new file mode 100644 index 0000000..dacd624 --- /dev/null +++ b/docs/2-Conectando/ESO-Vault.md @@ -0,0 +1,148 @@ +# Utilizando o External Secrets Operator com o Vault + +Neste documento você aprenderá como utilizar o ESO (External Secrets Operator) em conjunto com +o [Vault](https://developer.hashicorp.com/vault/docs?product_intent=vault), o gerenciador de segredos da HashiCorp, em um cluster Kubernetes local configurado com +Kind. + +## Criação do cluster + +Para esse exemplo, utilizaremos um cluster Kubernetes local criado com o Kind. Com a seguinte configuração: + +```yaml +apiVersion: kind.x-k8s.io/v1alpha4 +kind: Cluster +nodes: + - role: control-plane + - role: worker + - role: worker +``` + +## Adicionando Vault ao cluster + +Podemos utilizar o Helm para instalar o Vault no cluster. + +```sh +helm repo add hashicorp https://helm.releases.hashicorp.com +helm install vault hashicorp/vault +``` + +Para verificar os recursos criados, execute: + +```sh +kubectl get all | grep vault +``` + +## Configurando o Vault + +Antes de adicionar o ESO, é necessário configurar o Vault. Um maneira simples de realizar +esse processo é expondo a porta do `service/Vault`, utilizando o comando abaixo. Dessa forma, é possível +acessar sua interface web em: `http://localhost:8200`. + +```sh +kubectl port-forward svc/vault --address 0.0.0.0 8200:8200 +``` + +Preencha os campos **Key shares** e **Key threshold** com o valor 1 e clique em **Initialize**. + +Salve a chave gerada e o initial token, pois serão necessárias para desbloquear o Vault. Clique em Continue. + +Utilize a `key1` para desbloquear o Vault e o `root token` para logar. + +## Engine de Segredos + +Na interface web do Vault, clique em `Secrets Engines` na barra lateral e em seguida em `Enable new engine`. +Selecione a engine de segredos do tipo `Key/Value` KV e clique em **Enable engine**. + +Com a engine habilitada, crique em `Create secret` e crie um segredo de chave `segredo1` com um valor arbitrário. +No campo de `Path` insira `tutorial/` e clique em **Save**. + +## Adicionando o ESO ao cluster + +Utilize o helm para instalar o ESO no cluster. + +```sh +helm repo add external-secrets https://charts.external-secrets.io +helm install external-secrets \ + external-secrets/external-secrets \ + -n external-secrets \ + --create-namespace +``` + +Para verificar os recursos criados, execute: + +```sh +kubectl -n external-secrets get all +``` + +## Criando um ClusterSecretStore + +O ClusterSecretStore é responsável por armazenar as configurações de acesso ao Vault. +Para que ele tenha acesso ao Vault, é necessário criar um secret com o token de acesso. + +```sh +kubectl create secret generic vault-policy-token --from-literal=token= +``` + +Para criar o ClusterSecretStore, utilize o arquivo abaixo: +O atributo server precisa ser preenchido com o ClusterIP do Vault. +utilize o comando `kubectl get svc vault` para obter o ClusterIP. + +```yaml +apiVersion: external-secrets.io/v1beta1 +kind: ClusterSecretStore +metadata: + name: vault-backend +spec: + provider: + vault: + server: "http://:8200" # Endereço do ClusterIP + path: kv # Path do segredo criado no Vault + version: "v2" + auth: + tokenSecretRef: + name: "vault-policy-token" # Nome do secret que contém o token + key: "token" # Chave do token no secret +``` + +## Criando um ExternalSecret + +O ExternalSecret é responsável por criar a secret no cluster Kubernetes com o segredo do Vault. + +```yaml +apiVersion: external-secrets.io/v1beta1 +kind: ExternalSecret +metadata: + name: external-secrets +spec: + refreshInterval: 10s # Intervalo de atualização do segredo + secretStoreRef: + name: vault-backend + kind: ClusterSecretStore + target: + name: eso-secret # Nome da secret que será criada + creationPolicy: Owner + data: + - secretKey: segredo1 # Nome da chave do segredo + remoteRef: + key: kv/tutorial + property: segredo1 +``` + +Após a criação do ExternalSecret, a secret pode ser verificada utilizando o comando: + +```yaml +kubectl get secret +``` + +Para verificar o conteúdo da secret, utilize o comando: +```sh +kubectl get secret eso-secret -o yaml +``` + +copie o valor do atributo `data.segredo1` no yaml gerado e decodifique utilizando o comando: + +```sh +echo "" | base64 -d +``` + +Atualize o segredo no Vault e verifique se a secret foi atualizada no cluster Kubernetes. diff --git a/mkdocs.yml b/mkdocs.yml index dcb88b2..65dd92d 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -11,7 +11,8 @@ nav: - Configurar-ESO: ./1-Setup/3-Configurar_ESO.md - Conectando: - Conectar ESO: ./2-Conectando/Local.md + - ESO e Vault: ./2-Conectando/ESO-Vault.md - Links: - Links Importantes: ./3-Links/Links.md - Common_issues: - - Problema Específico Debian: ./4-Common_issues/Make_issue.md \ No newline at end of file + - Problema Específico Debian: ./4-Common_issues/Make_issue.md From 371dbe58fac06b1f7832fa2328c4755f72e0d83d Mon Sep 17 00:00:00 2001 From: brenob6 Date: Sun, 8 Dec 2024 09:41:03 -0300 Subject: [PATCH 2/2] =?UTF-8?q?Adiciona=20descri=C3=A7=C3=A3o=20mais=20cla?= =?UTF-8?q?ra=20de=20como=20criar=20os=20manifestos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/2-Conectando/ESO-Vault.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/docs/2-Conectando/ESO-Vault.md b/docs/2-Conectando/ESO-Vault.md index dacd624..26da2ee 100644 --- a/docs/2-Conectando/ESO-Vault.md +++ b/docs/2-Conectando/ESO-Vault.md @@ -17,6 +17,12 @@ nodes: - role: worker ``` +Salve a configuração acima em um arquivo e execute o comando abaixo: + +```sh +kind create cluster --config +``` + ## Adicionando Vault ao cluster Podemos utilizar o Helm para instalar o Vault no cluster. @@ -104,6 +110,12 @@ spec: key: "token" # Chave do token no secret ``` +Para criar o recurso, salve a configuração em um arquivo e execute. + +```sh +kubectl apply -f +``` + ## Criando um ExternalSecret O ExternalSecret é responsável por criar a secret no cluster Kubernetes com o segredo do Vault. @@ -128,6 +140,12 @@ spec: property: segredo1 ``` +Para criar o recurso, salve a configuração em um arquivo e execute. + +```sh +kubectl apply -f +``` + Após a criação do ExternalSecret, a secret pode ser verificada utilizando o comando: ```yaml