La integración entre Secret Manager y Google Kubernetes Engine (GKE) te permite almacenar datos sensibles, como contraseñas y certificados utilizados por los clústeres de GKE, como secretos en Secret Manager.
En esta página se explica cómo puedes usar el complemento Secret Manager para acceder a los secretos almacenados en Secret Manager como volúmenes montados en pods de Kubernetes.
Este proceso implica los siguientes pasos:
- Habilita el complemento Secret Manager en un clúster de GKE nuevo o ya creado.
- Configura las aplicaciones para que se autentiquen en la API Secret Manager.
- Define qué secretos se van a montar en los pods de Kubernetes mediante un archivo
SecretProviderClass
YAML. El complemento Secret Manager admite secretos globales y regionales. - Crea un volumen en el que se montarán los secretos. Una vez que se haya adjuntado el volumen, las aplicaciones del contenedor podrán acceder a los datos del sistema de archivos del contenedor.
El complemento Secret Manager se deriva del controlador CSI de Secrets Store de Kubernetes de código abierto y del proveedor Google Secret Manager. Si usas el controlador CSI de Secrets Store de código abierto para acceder a los secretos, puedes migrar al complemento Secret Manager. Para obtener información, consulta el artículo Migrar desde el controlador CSI de Secrets Store.
Ventajas
El complemento Secret Manager ofrece las siguientes ventajas:
- Puedes usar una solución totalmente gestionada y compatible para acceder a los secretos de Secret Manager desde GKE sin ninguna sobrecarga operativa.
- No tienes que escribir código personalizado para acceder a los secretos almacenados en Secret Manager.
- Puedes almacenar y gestionar todos tus secretos de forma centralizada en Secret Manager y acceder a ellos de forma selectiva desde pods de GKE mediante el complemento Secret Manager. De esta forma, puedes usar las funciones que ofrece Secret Manager, como el cifrado con CMEK, el control de acceso detallado, la rotación gestionada, la gestión del ciclo de vida y los registros de auditoría, así como las funciones de Kubernetes, como la transferencia de secretos a contenedores en forma de volúmenes montados.
- El complemento Secret Manager es compatible con clústeres Standard y clústeres Autopilot.
- El complemento Secret Manager es compatible con los nodos que usan imágenes de nodo de Container-Optimized OS o Ubuntu.
Limitaciones
El complemento Secret Manager tiene las siguientes limitaciones:
El complemento Secret Manager no admite la siguiente función, que está disponible en el controlador CSI de Secrets Store de código abierto:
El complemento Secret Manager no es compatible con los nodos de Windows Server.
Antes de empezar
-
Enable the Secret Manager and Google Kubernetes Engine APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. Si quieres usar Google Cloud CLI para esta tarea, instala y, a continuación, inicializa gcloud CLI. Si ya has instalado la CLI de gcloud, obtén la versión más reciente ejecutando el comando
gcloud components update
.No puedes configurar manualmente el complemento Secret Manager con el SDK de Google Cloud ni con la Google Cloud consola.
Asegúrate de que tu clúster ejecute la versión 1.27.14-gke.1042001 de GKE o una posterior con una imagen de nodo de Linux.
Si usas un clúster Estándar de GKE, asegúrate de que tenga habilitada la federación de Workload Identity para GKE. Workload Identity Federation para GKE está habilitado de forma predeterminada en los clústeres Autopilot. Los pods de Kubernetes usan Workload Identity Federation para GKE para autenticarse en la API Secret Manager.
Habilita el complemento Secret Manager
Puedes habilitar el complemento Secret Manager tanto en clústeres estándar como en clústeres Autopilot.
Habilitar el complemento Secret Manager en un clúster de GKE nuevo
Para habilitar el complemento Secret Manager al crear un clúster, sigue estos pasos:
Consola
-
En la Google Cloud consola, ve a la página Google Kubernetes Engine.
Haz clic en add_boxCrear.
En el cuadro de diálogo Crear clúster, haz clic en Configurar.
En el menú de navegación, en la sección Clúster, haga clic en Seguridad.
Marca la casilla Habilitar Secret Manager.
Selecciona la casilla Habilitar Workload Identity.
Sigue configurando el clúster y, a continuación, haz clic en Crear.
gcloud
{ Standard cluster}
Para habilitar el complemento Secret Manager en un clúster Standard nuevo, ejecuta el siguiente comando:
Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:
- CLUSTER_NAME: el nombre de tu clúster.
- LOCATION: la región de Compute Engine del clúster, como
us-central1
. - VERSION: la versión específica de GKE que quieres usar. Asegúrate de que tu clúster ejecute la versión 1.27.14-gke.1042001 de GKE o una posterior. Si el canal de lanzamiento predeterminado no incluye esta versión, usa la marca
--release-channel
para elegir un canal de lanzamiento que sí la incluya. - PROJECT_ID: el ID de tu proyecto de Google Cloud .
Ejecuta el siguiente comando:
Linux, macOS o Cloud Shell
gcloud container clusters create CLUSTER_NAME \ --enable-secret-manager \ --location=LOCATION \ --cluster-version=VERSION \ --workload-pool=PROJECT_ID.svc.id.goog
Windows (PowerShell)
gcloud container clusters create CLUSTER_NAME ` --enable-secret-manager ` --location=LOCATION ` --cluster-version=VERSION ` --workload-pool=PROJECT_ID.svc.id.goog
Windows (cmd.exe)
gcloud container clusters create CLUSTER_NAME ^ --enable-secret-manager ^ --location=LOCATION ^ --cluster-version=VERSION ^ --workload-pool=PROJECT_ID.svc.id.goog
{Clúster de Autopilot}
Para habilitar el complemento Secret Manager en un clúster de Autopilot nuevo, ejecuta el siguiente comando:
Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:
- CLUSTER_NAME: el nombre de tu clúster.
- VERSION: la versión específica de GKE que quieres usar. Asegúrate de que tu clúster ejecute la versión 1.27.14-gke.1042001 de GKE o una posterior. Para definir una versión específica, consulta Definir la versión y el canal de lanzamiento de un nuevo clúster de Autopilot.
- LOCATION: la región de Compute Engine del clúster, como
us-central1
.
Ejecuta el siguiente comando:
Linux, macOS o Cloud Shell
gcloud container clusters create-auto CLUSTER_NAME \ --enable-secret-manager \ --cluster-version=VERSION \ --location=LOCATION
Windows (PowerShell)
gcloud container clusters create-auto CLUSTER_NAME ` --enable-secret-manager ` --cluster-version=VERSION ` --location=LOCATION
Windows (cmd.exe)
gcloud container clusters create-auto CLUSTER_NAME ^ --enable-secret-manager ^ --cluster-version=VERSION ^ --location=LOCATION
Una vez que hayas habilitado el complemento Secret Manager, podrás usar el controlador de CSI de Secrets Store en volúmenes de Kubernetes con el nombre del controlador y del aprovisionador: secrets-store-gke.csi.k8s.io
.
Habilitar el complemento Secret Manager en un clúster de GKE
Para habilitar el complemento Secret Manager en un clúster, sigue estos pasos:
Consola
-
En la Google Cloud consola, ve a la página Google Kubernetes Engine.
En la lista de clústeres, haga clic en el nombre del clúster que quiera modificar.
En la página de detalles del clúster, en la sección Seguridad, haga clic en
Secret Manager.En el cuadro de diálogo Editar Secret Manager, selecciona la casilla Habilitar Secret Manager.
Haz clic en Guardar cambios.
gcloud
Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:
- CLUSTER_NAME: el nombre de tu clúster
- LOCATION: la región de Compute Engine del clúster, como
us-central1
Ejecuta el siguiente comando:
Linux, macOS o Cloud Shell
gcloud container clusters update CLUSTER_NAME \ --enable-secret-manager \ --location=LOCATION \
Windows (PowerShell)
gcloud container clusters update CLUSTER_NAME ` --enable-secret-manager ` --location=LOCATION `
Windows (cmd.exe)
gcloud container clusters update CLUSTER_NAME ^ --enable-secret-manager ^ --location=LOCATION ^
Configurar la rotación automática de secretos
Puedes configurar el complemento Secret Manager para que rote automáticamente los secretos, de forma que los secretos actualizados en Secret Manager después de la implementación inicial del pod se envíen al pod de forma automática y periódica. La rotación automática de secretos montados permite que las aplicaciones reciban automáticamente secretos actualizados sin necesidad de reiniciarse ni de intervención manual. Esta función asegura que las aplicaciones siempre usen los secretos más actualizados.
Ten en cuenta lo siguiente sobre la configuración de la rotación automática de secretos:
- La rotación automática de secretos es una configuración opcional.
- Puedes configurar esta función al crear un clúster o al actualizar uno que ya tengas.
- La rotación automática de secretos se admite en la versión 1.32.2-gke.1059000 de GKE o una posterior.
Para configurar la rotación automática de secretos, debes habilitar la función enable-secret-manager-rotation
y configurar el intervalo de rotación definiendo secret-manager-rotation-interval
.
Por ejemplo, para configurar la rotación automática en un clúster de GKE, usa el siguiente comando:
gcloud container clusters update CLUSTER_NAME \
--enable-secret-manager \
--location=LOCATION \
--enable-secret-manager-rotation \
--secret-manager-rotation-interval=ROTATION_INTERVAL
Haz los cambios siguientes:
CLUSTER_NAME
: el nombre del clústerLOCATION
: la ubicación de tu clúster, comous-central1
ROTATION_INTERVAL
: el intervalo de rotación en segundos. El intervalo de rotación predeterminado es de 120 segundos.
Verificar la instalación del complemento Secret Manager
Para verificar que el complemento Secret Manager está instalado en el clúster de Kubernetes, ejecuta el siguiente comando:
gcloud container clusters describe CLUSTER_NAME --location LOCATION | grep secretManagerConfig -A 4
Haz los cambios siguientes:
CLUSTER_NAME
: el nombre del clústerLOCATION
: la ubicación de tu clúster, comous-central1
Configurar aplicaciones para autenticarse en la API Secret Manager
El proveedor de Google Secret Manager usa la identidad de carga de trabajo del pod en el que se monta un secreto al autenticarse en la API Secret Manager. Para permitir que tus aplicaciones se autentiquen en la API Secret Manager mediante Workload Identity Federation para GKE, sigue estos pasos:
Crea una cuenta de servicio de Kubernetes o usa una que ya tengas en el mismo espacio de nombres que el pod en el que quieras montar el secreto.
Crea una política de gestión de identidades y accesos (IAM) para el secreto en Secret Manager.
Los pods que usan la cuenta de servicio de Kubernetes configurada se autentican automáticamente como el identificador principal de gestión de identidades y accesos que corresponde a la cuenta de servicio de Kubernetes al acceder a la API Secret Manager.
Crear una cuenta de servicio de Kubernetes
Guarda el siguiente archivo de manifiesto como
service-account.yaml
:apiVersion: v1 kind: ServiceAccount metadata: name: KSA_NAME namespace: NAMESPACE
Haz los cambios siguientes:
KSA_NAME
: el nombre de tu nueva cuenta de servicio de KubernetesNAMESPACE
: el nombre del espacio de nombres de Kubernetes de ServiceAccount
Aplica el archivo de manifiesto:
kubectl apply -f service-account.yaml
Crea una política de gestión de identidades y accesos de permiso que haga referencia a la nueva cuenta de servicio de Kubernetes y concédele permiso para acceder al secreto:
gcloud secrets add-iam-policy-binding SECRET_NAME \ --role=roles/secretmanager.secretAccessor \ --member=principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME
Haz los cambios siguientes:
SECRET_NAME
: el nombre del secreto en Secret ManagerPROJECT_NUMBER
: tu Google Cloud número de proyectoPROJECT_ID
: el ID del proyecto Google Cloud que contiene tu clúster de GKENAMESPACE
: el nombre del espacio de nombres de Kubernetes de ServiceAccountKSA_NAME
: el nombre de tu cuenta de servicio de Kubernetes
Usar una cuenta de servicio de Kubernetes
Crea una política de gestión de identidades y accesos de permiso que haga referencia a la cuenta de servicio de Kubernetes y concédele permiso para acceder al secreto:
gcloud secrets add-iam-policy-binding SECRET_NAME \
--role=roles/secretmanager.secretAccessor \
--member=principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME
Haz los cambios siguientes:
SECRET_NAME
: el nombre del secreto en Secret ManagerPROJECT_NUMBER
: tu Google Cloud número de proyectoPROJECT_ID
: el ID del proyecto Google Cloud que contiene tu clúster de GKENAMESPACE
: el nombre del espacio de nombres de Kubernetes de ServiceAccountKSA_NAME
: el nombre de tu cuenta de servicio de Kubernetes
Define qué secretos quieres montar
Para especificar qué secretos se van a montar como archivos en el pod de Kubernetes, crea un manifiesto YAML SecretProviderClass
y enumera los secretos que se van a montar y el nombre de archivo con el que se van a montar. Sigue estos pasos:
Guarda el siguiente archivo de manifiesto como
app-secrets.yaml
:apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: SECRET_PROVIDER_CLASS_NAME spec: provider: gke parameters: secrets: | - resourceName: "projects/PROJECT_ID/secrets/SECRET_NAME/versions/SECRET_VERSION" path: "FILENAME.txt"
Haz los cambios siguientes:
SECRET_PROVIDER_CLASS_NAME
: el nombre del objetoSecretProviderClass
.PROJECT_ID
: tu ID de proyecto.SECRET_NAME
: el nombre del secreto.SECRET_VERSION
: la versión del secreto. La versión del secreto debe estar en la misma región que el clúster.FILENAME.txt
: el nombre del archivo en el que se montará el valor del secreto. Puedes crear varios archivos con las variablesresourceName
ypath
.
En el caso de un secreto regional,
resourceName
es la ruta completa al recurso del secreto, que incluye la ubicación del secreto regional. Por ejemplo: "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_NAME/versions/SECRET_VERSION"Aplica el archivo de manifiesto:
kubectl apply -f app-secrets.yaml -n NAMESPACE
Sustituye
NAMESPACE
por el nombre del espacio de nombres de Kubernetes de ServiceAccount.Verifica que se haya creado el objeto
SecretProviderClass
:kubectl get SecretProviderClasses -n NAMESPACE
Configura un volumen en el que se montarán los secretos.
Guarda la siguiente configuración como
my-pod.yaml
:apiVersion: v1 kind: Pod metadata: name: POD_NAME namespace: NAMESPACE spec: serviceAccountName: KSA_NAME containers: - image: IMAGE_NAME imagePullPolicy: IfNotPresent name: POD_NAME resources: requests: cpu: 100m stdin: true stdinOnce: true terminationMessagePath: /dev/termination-log terminationMessagePolicy: File tty: true volumeMounts: - mountPath: "/var/secrets" name: mysecret volumes: - name: mysecret csi: driver: secrets-store-gke.csi.k8s.io readOnly: true volumeAttributes: secretProviderClass: SECRET_PROVIDER_CLASS_NAME
Haz los cambios siguientes:
POD_NAME
: el nombre del pod de Kubernetes en el que se monta el secretoNAMESPACE
: el nombre del espacio de nombres de Kubernetes de ServiceAccountKSA_NAME
: la cuenta de servicio de Kubernetes que has configurado en el paso Configurar aplicaciones para que se autentiquen en la API Secret ManagerIMAGE_NAME
: nombre de la imagen del contenedorSECRET_PROVIDER_CLASS_NAME
: el nombre del objetoSecretProviderClass
Solo en clústeres estándar, añade lo siguiente al campo
template.spec
para colocar los pods en grupos de nodos que usen Workload Identity Federation para GKE.Omite este paso en los clústeres de Autopilot, que rechazan este nodeSelector, ya que todos los nodos usan Workload Identity Federation para GKE.
spec: nodeSelector: iam.gke.io/gke-metadata-server-enabled: "true"
Aplica la configuración a tu clúster.
kubectl apply -f my-pod.yaml
En este paso se monta un volumen mysecret
en /var/secrets
mediante el controlador de CSI (secrets-store-gke.csi.k8s.io). Este volumen hace referencia al objeto SecretProviderClass
, que actúa como proveedor.
Migrar desde el controlador de CSI de Secrets Store
Si vas a migrar al complemento Secret Manager desde tu instalación del controlador CSI de Secrets Store, actualiza el manifiesto de tu pod de la siguiente manera:
Actualiza el nombre de tu
SecretProviderClass
y elprovider
tal como se describe en el siguiente archivo de manifiesto:apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: app-secrets-gke spec: provider: gke parameters: secrets: | - resourceName: "projects/<project_id>/secrets/<secret_name>/versions/<secret_version>" path: "good1.txt"
Actualiza
driver
ysecretProviderClass
de tu volumen de Kubernetes, tal como se describe en el siguiente archivo de manifiesto:volumes: - name: mysecret csi: driver: secrets-store-gke.csi.k8s.io readOnly: true volumeAttributes: secretProviderClass: "app-secrets-gke"
Inhabilitar el complemento Secret Manager
Para inhabilitar el complemento Secret Manager en un clúster estándar o Autopilot, ejecuta el siguiente comando:
Consola
-
En la Google Cloud consola, ve a la página Google Kubernetes Engine.
En la lista de clústeres, haga clic en el nombre del clúster que quiera modificar.
En la página de detalles del clúster, en la sección Seguridad, haga clic en
Secret Manager.En el cuadro de diálogo Editar Secret Manager, desmarca la casilla Habilitar Secret Manager.
Haz clic en Guardar cambios.
gcloud
Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:
- CLUSTER_NAME: el nombre de tu clúster
- REGION: la región de Compute Engine del clúster, como
us-central1
Ejecuta el siguiente comando:
Linux, macOS o Cloud Shell
gcloud container clusters update CLUSTER_NAME \ --no-enable-secret-manager \ --region=REGION \
Windows (PowerShell)
gcloud container clusters update CLUSTER_NAME ` --no-enable-secret-manager ` --region=REGION `
Windows (cmd.exe)
gcloud container clusters update CLUSTER_NAME ^ --no-enable-secret-manager ^ --region=REGION ^