Protege los secretos de las aplicaciones con Vault Dedicated y External Secrets Operator
En este tutorial, aprenderás a utilizar IBM Cloud Vault Enterprise para gestionar secretos de las aplicaciones que se ejecutan en tu clúster de IBM Cloud Kubernetes Service mediante la herramienta de código abierto External Secrets Operator.
Eres desarrollador en una organización y tu equipo utiliza Kubernetes Service para implementar aplicaciones y servicios en contenedores en IBM Cloud. Si desea almacenar los secretos de su aplicación en Vault Dedicated, el servicio gestionado de HashiCorp Vault de IBM Cloud, podrá cifrarlos en reposo, gestionar su ciclo de vida y rotarlos fácilmente.
Con Vault Dedicated y External Secrets Operator, puedes centralizar y proteger los secretos que utilizan las aplicaciones que se ejecutan en tus clústeres de Kubernetes. En lugar de introducir tus secretos en el momento de la implementación, puedes configurar tus aplicaciones para que recuperen de forma segura los secretos de Vault Dedicated en tiempo de ejecución. Por ejemplo, considere el siguiente escenario:
{: caption="externos
- Como desarrollador, utilizas Vault Dedicated para almacenar un secreto de una aplicación que deseas implementar en un clúster de Kubernetes.
- Debes configurar el External Secrets Operator para que se conecte a tu instancia de Vault Dedicated utilizando el proveedor HashiCorp Vault.
- El controlador de secretos externos capta los objetos
ExternalSecretsdel archivo de configuración que ha definido utilizando la API de Kubernetes. - En el momento de la ejecución de la aplicación, el controlador recupera los datos secretos de Vault Dedicated y convierte los objetos
ExternalSecretsen secretos de Kubernetes s para su clúster.
Este caso de ejemplo presenta una herramienta de terceros que puede afectar a la capacidad de conformidad de las cargas de trabajo que se ejecutan en el clúster de Kubernetes. Si añades una herramienta de la comunidad o de terceros, ten en cuenta que eres responsable de garantizar el cumplimiento normativo de tus aplicaciones y de colaborar con el proveedor correspondiente para resolver cualquier problema. Para obtener más información, consulte Sus responsabilidades con el uso de IBM Cloud Kubernetes Service.
Antes de empezar
Antes de empezar, asegúrese de que tiene Acceso a la plataforma Administrador para poder crear credenciales de cuenta y recursos de suministro. También necesita los siguientes requisitos previos:
- Descargue e instale la CLI de IBM Cloud.
- Instala la CLI de Kubernetes(
kubectl). - Instala Helm 3.x.
- Descargar e instalar
jq.
jq le ayuda a porcionar y filtrar datos JSON. Utilice jq en esta guía de aprendizaje para capturar y utilizar variables de entorno almacenadas.
- Una instancia dedicada de Vault aprovisionada en tu cuenta de IBM Cloud. Para obtener más información, consulta Configuración de tu instancia dedicada de Vault.
Configurar el entorno
Para trabajar con Vault Dedicated y Kubernetes Service, debes crear un clúster en tu cuenta de IBM Cloud y configurar el acceso a tu instancia de Vault Dedicated.
Creación de un clúster de Kubernetes
Crea un clúster de Kubernetes en tu cuenta de IBM Cloud.
-
Desde la línea de mandatos, inicie la sesión en IBM Cloud mediante la CLI de IBM Cloud.
ibmcloud loginSi el inicio de sesión falla, ejecute el mandato
ibmcloud login --ssopara volver a intentarlo. Se requiere el parámetro--ssopara iniciar sesión con un ID federado. Si se utiliza esta opción, vaya al enlace que se muestra en la salida de la CLI para generar una contraseña de uso único. -
Selecciona la cuenta, la región y el grupo de recursos en los que deseas crear tu clúster.
ibmcloud target -r REGION -g RESOURCE_GROUPSustituye
REGIONpor tu región de destino (por ejemplo,au-syd) yRESOURCE_GROUPpor el nombre de tu grupo de recursos. -
Cree un clúster de Kubernetes.
ibmcloud ks cluster create vpc-gen2 --zone ZONE --flavor FLAVOR --workers 1 --name eso-test-cluster --vpc-id VPC_ID --subnet-id SUBNET_IDSustituye
ZONE,FLAVOR,VPC_ID, ySUBNET_IDpor tus valores. El aprovisionamiento de su clúster de Kubernetes tarda entre 5 y 15 minutos en completarse. -
Antes de continuar con el siguiente paso, comprueba que tu clúster se haya aprovisionado correctamente.
ibmcloud ks worker ls --cluster eso-test-clusterCuando el nodo de trabajador finaliza el suministro, el estado cambia a Listo.
-
Establezca el contexto para el clúster de Kubernetes en la CLI.
ibmcloud ks cluster config --cluster eso-test-cluster -
Verifique que los mandatos
kubectlse ejecutan correctamente y que el contexto de Kubernetes establecido es su clúster.kubectl config current-context
Prepara tu instancia dedicada de Vault
Configura tu instancia dedicada de Vault para empezar a trabajar con secretos y configura la autenticación para External Secrets Operator.
-
Exporta las variables de entorno junto con los datos de tu instancia de Vault Dedicated.
export VAULT_DEDICATED_ADDR="https://<your-vault_dedicated-instance-id>.vault.<region>.appdomain.cloud" export VAULT_DEDICATED_NAMESPACE="admin"Sustituye
<your-vault_dedicated-instance-id>por el ID de tu instancia de Vault Dedicated y<region>por tu región de Vault Dedicated (por ejemplo,au-syd). -
Obtén un token de Vault desde tu instancia dedicada de Vault.
Puedes generar un token desde la interfaz de usuario de Vault Dedicated o mediante la CLI de Vault. Para el desarrollo y las pruebas, puedes utilizar un token de root. Para el entorno de producción, crea un token con las políticas adecuadas.
export VAULT_TOKEN="<your-vault-token>" -
Verifica el punto de montaje del motor de secretos KV en Vault Dedicated.
Las instancias dedicadas de Vault tienen el motor de secretos KV v2 montado de forma
kv/predeterminada. Puede comprobarlo en la interfaz de usuario de Vault Dedicated o mostrando una lista de los puntos de montaje.curl -k -X GET \ -H "X-Vault-Token: $VAULT_TOKEN" \ -H "X-Vault-Namespace: $VAULT_DEDICATED_NAMESPACE" \ $VAULT_DEDICATED_ADDR/v1/sys/mounts | jq -
Crea un secreto de prueba en Vault Dedicated.
curl -k -X POST \ -H "X-Vault-Token: $VAULT_TOKEN" \ -H "X-Vault-Namespace: $VAULT_DEDICATED_NAMESPACE" \ -d '{"data":{"username":"user123","password":"cloudy-rainy-coffee-book"}}' \ $VAULT_DEDICATED_ADDR/v1/kv/data/example_username_passwordTen en cuenta que Vault Dedicated utiliza
kv/como ruta de montaje para el motor de secretos KV. -
Comprueba que se haya creado el secreto.
curl -k -X GET \ -H "X-Vault-Token: $VAULT_TOKEN" \ -H "X-Vault-Namespace: $VAULT_DEDICATED_NAMESPACE" \ $VAULT_DEDICATED_ADDR/v1/kv/data/example_username_password | jq
Instalar el operador External Secrets
Instala External Secrets Operator mediante Helm.
-
Añade el repositorio External Secrets Helm.
helm repo add external-secrets https://charts.external-secrets.io helm repo update -
Instalar el operador External Secrets.
helm install external-secrets \ external-secrets/external-secrets \ --namespace external-secrets \ --create-namespace \ --set installCRDs=true -
Verifique la instalación.
kubectl get pods -n external-secretsEspera hasta que todos los pods estén en estado Running.
-
Comprueba que las definiciones de recursos personalizados (CRD) estén instaladas.
kubectl get crd | grep external-secretsDeberías ver CRD como
secretstores,clustersecretstores, yexternalsecrets.
Configurar SecretStore para Vault Dedicated
Crea un recurso SecretStore que defina cómo se conecta External Secrets Operator a tu instancia de Vault Dedicated.
-
Crea un secreto de Kubernetes con tu token de Vault.
kubectl create secret generic vault-token \ --namespace external-secrets \ --from-literal=token="$VAULT_TOKEN" -
Cree un archivo
secretstore.yaml.touch secretstore.yaml -
Añade la siguiente configuración al archivo.
apiVersion: external-secrets.io/v1beta1 kind: SecretStore metadata: name: vault-dedicated-secretstore namespace: default spec: provider: vault: server: "<VAULT_DEDICATED_ADDR>" path: "kv" version: "v2" namespace: "admin" auth: tokenSecretRef: name: "vault-token" key: "token" namespace: "external-secrets"Sustituye
<VAULT_DEDICATED_ADDR>por la dirección de tu instancia de Vault Dedicated. Ten en cuenta quepathestá configurado enkv, que es el punto de montaje predeterminado para el motor de secretos KV en Vault Dedicated. -
Aplica la configuración SecretStore.
kubectl apply -f secretstore.yaml -
Comprueba que el SecretStore sea válido.
kubectl get secretstore vault-dedicated-secretstore -n default kubectl describe secretstore vault-dedicated-secretstore -n defaultEl estado debería aparecer como Válido si la conexión a Vault Dedicated se ha establecido correctamente.
Crear un ExternalSecret
Crea un recurso ExternalSecret que defina qué secretos se deben recuperar de Vault Dedicated.
-
Crea un archivo
externalsecret.yaml.touch externalsecret.yaml -
Añade la siguiente configuración.
apiVersion: external-secrets.io/v1beta1 kind: ExternalSecret metadata: name: vault-dedicated-app-secret namespace: default spec: refreshInterval: 1h secretStoreRef: name: vault-dedicated-secretstore kind: SecretStore target: name: my-k8s-secret creationPolicy: Owner data: - secretKey: username remoteRef: key: example_username_password property: username - secretKey: password remoteRef: key: example_username_password property: passwordEl determina
refreshIntervalla frecuencia con la que External Secrets Operator consulta Vault Dedicated en busca de actualizaciones. El valor predeterminado y recomendado es de 1 hora. -
Aplica la configuración ExternalSecret.
kubectl apply -f externalsecret.yaml -
Comprueba que el operador de secretos externos haya obtenido el secreto de Vault Dedicated.
kubectl get secret my-k8s-secret -o json | jq '.data | map_values(@base64d)'Salida de ejemplo:
{ "password": "cloudy-rainy-coffee-book", "username": "user123" }Satisfactorio. Ahora puedes recuperar datos confidenciales de tu instancia de Vault Dedicated y utilizarlos en tu clúster de Kubernetes.
Despliegue una aplicación en el clúster
Por último, puede implementar en su clúster una aplicación que utilice el secreto de Vault Dedicated. En el momento de la ejecución de la aplicación, los datos secretos que se obtienen de Vault Dedicated se convierten en un secreto de Kubernetes que puede utilizar tu clúster.
-
Crea una implementación de prueba sencilla que utilice el secreto.
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Pod metadata: name: test-app namespace: default spec: containers: - name: app image: busybox command: ['sh', '-c', 'echo "Username: \$USERNAME"; echo "Password: \$PASSWORD"; sleep 3600'] env: - name: USERNAME valueFrom: secretKeyRef: name: my-k8s-secret key: username - name: PASSWORD valueFrom: secretKeyRef: name: my-k8s-secret key: password EOF -
Comprueba los registros del pod para verificar que se ha inyectado el secreto.
kubectl logs test-app -n defaultSalida esperada:
Username: user123 Password: cloudy-rainy-coffee-book
¿Buscas más ejemplos sobre cómo implementar una aplicación? Consulta Implementación de aplicaciones nativas de Kubernetes en clústeres para obtener más información sobre la implementación de aplicaciones.
(Opcional) Limpiar los recursos
Si ya no necesita los recursos que ha creado en esta guía de aprendizaje, puede completar los pasos siguientes para eliminarlos de su cuenta.
-
Suprima el clúster de Kubernetes de prueba.
ibmcloud ks cluster rm --cluster eso-test-cluster -
Limpiar los secretos de prueba en Vault dedicado.
curl -k -X DELETE \ -H "X-Vault-Token: $VAULT_TOKEN" \ -H "X-Vault-Namespace: $VAULT_DEDICATED_NAMESPACE" \ $VAULT_DEDICATED_ADDR/v1/kv/metadata/example_username_password
Notas de interés
Al crear tus documentos YAML, ten en cuenta las siguientes consideraciones:
-
Intervalo de sondeo: Por defecto, el intervalo de sondeo está establecido en 1 hora (
refreshInterval: 1h) y es el valor recomendado. Puedes modificar este valor en la plantilla ExternalSecret. El intervalo puede expresarse en unidades des,m, oh. -
Ruta de montaje de Vault Dedicated: Vault Dedicated utiliza
kv/como ruta de montaje predeterminada para el motor de secretos KV, en lugar desecret/. Asegúrate de especificar la ruta correcta en la configuración de SecretStore. -
Espacios de nombres de Vault Dedicated: Vault Dedicated utiliza los espacios de nombres de Vault Enterprise. El espacio de nombres predeterminado es
admin. Asegúrese de especificar el espacio de nombres correcto en la configuración de SecretStore. -
Métodos de autenticación: En este tutorial se utiliza la autenticación mediante token para mayor simplicidad. En entornos de producción, se recomienda utilizar los métodos de autenticación AppRole o Kubernetes para garantizar una mayor seguridad.
-
TLS Consideraciones: Vault Dedicated requiere conexiones de tipo TLS. En entornos de producción, asegúrese de que se haya configurado correctamente la validación de certificados en lugar de utilizar
skipTLSVerify.
Próximos pasos
¡Buen trabajo! En este tutorial has aprendido a configurar Vault Dedicated para introducir de forma segura los secretos de la aplicación en tu clúster de Kubernetes mediante External Secrets Operator. Echa un vistazo a más recursos que te ayudarán a dar tus primeros pasos con Vault Dedicated.
- Descubre Vault Secrets Operator, un operador oficial de HashiCorp's para la integración con Kubernetes.
- Consulte la documentación del proveedor External Secrets Operator Vault.
- Consulta la documentación de Vault Dedicated para conocer funciones y configuraciones más avanzadas.
- Más información sobre HashiCorp Vault.