La integración entre Secret Manager y Google Kubernetes Engine (GKE) te permite almacenar datos sensibles, como contraseñas y certificados que usan los clústeres de GKE, como secretos en Secret Manager.
En esta página, se explica cómo puedes usar el complemento de Secret Manager para acceder a los secretos almacenados en Secret Manager como volúmenes activados en Pods de Kubernetes.
Este proceso implica los siguientes pasos:
- Habilita el complemento de Secret Manager en un clúster de GKE nuevo o existente.
- Configurar aplicaciones para que se autentiquen en la API de Secret Manager
- Define qué secretos se deben activar en los Pods de Kubernetes con un archivo YAML de
SecretProviderClass
. El complemento de Secret Manager admite secretos globales y regionales. - Crea un volumen en el que se activarán los secretos. Una vez que se adjunta el volumen, las aplicaciones del contenedor pueden acceder a los datos en el sistema de archivos del contenedor.
El complemento de Secret Manager se deriva del controlador de CSI de Kubernetes Secret Store de código abierto y del proveedor de Google Secret Manager. Si usas el controlador de CSI de Secrets Store de código abierto para acceder a los secretos, puedes migrar al complemento de Secret Manager. Para obtener más información, consulta Migra desde el controlador de CSI de Secrets Store existente.
Beneficios
El complemento de Secret Manager proporciona los siguientes beneficios:
- Puedes usar una solución completamente administrada 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 administrar todos tus secretos de forma centralizada en Secret Manager y acceder a ellos de forma selectiva desde los Pods de GKE con el complemento de Secret Manager. De esta manera, puedes usar las funciones que ofrece Secret Manager, como la encriptación con CMEK, el control de acceso detallado, la rotación administrada, la administración del ciclo de vida y los registros de auditoría, además de usar las funciones de Kubernetes, como el paso de secretos a contenedores en forma de volúmenes montados.
- El complemento de Secret Manager es compatible con los clústeres Standard y los clústeres de Autopilot.
- El complemento de Secret Manager admite nodos que usan imágenes de nodo de Container-Optimized OS o Ubuntu.
Limitaciones
El complemento de Secret Manager tiene las siguientes limitaciones:
El complemento de Secret Manager no admite la siguiente función que está disponible en el controlador de CSI de Secrets Store de código abierto:
El complemento de Secret Manager no admite nodos de Windows Server.
Antes de comenzar
-
Enable the Secret Manager and Google Kubernetes Engine APIs.
Si deseas usar Google Cloud CLI para esta tarea, instala y, luego, inicializa gcloud CLI. Si ya instalaste gcloud CLI, ejecuta el comando
gcloud components update
para obtener la versión más reciente.No puedes configurar manualmente el complemento de Secret Manager con el SDK de Google Cloud ni la consola de Google Cloud .
Asegúrate de que tu clúster ejecute la versión 1.27.14-gke.1042001 o posterior de GKE con una imagen de nodo de Linux.
Si usas un clúster de GKE Standard, asegúrate de que tenga habilitada la federación de identidades para cargas de trabajo en GKE. Workload Identity Federation for GKE está habilitada de forma predeterminada en un clúster de Autopilot. Los Pods de Kubernetes usan la federación de identidades para cargas de trabajo para GKE para autenticarse en la API de Secret Manager.
Habilita el complemento de Secret Manager
Puedes habilitar el complemento de Secret Manager en clústeres estándar y de Autopilot.
Habilita el complemento de Secret Manager en un clúster de GKE nuevo
Para habilitar el complemento de Secret Manager en la creación del clúster, haz lo siguiente:
Console
-
En la consola de Google Cloud , ve a la página Google Kubernetes Engine.
Haga 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, haz clic en Seguridad.
Selecciona la casilla de verificación Habilitar Secret Manager.
Selecciona la casilla de verificación Habilitar Workload Identity.
Continúa con la configuración del clúster y, luego, haz clic en Crear.
gcloud
{Clúster estándar}
Para habilitar el complemento de Secret Manager en un clúster estándar nuevo, ejecuta el siguiente comando:
Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:
- CLUSTER_NAME: El nombre de tu clúster.
- LOCATION: La región de Compute Engine del clúster, como
us-central1
. - VERSION: Es la versión específica de GKE que deseas usar. Asegúrate de que tu clúster ejecute la versión 1.27.14-gke.1042001 o posterior de GKE. Si el canal de versiones predeterminado no incluye esta versión, usa la marca
--release-channel
para elegir un canal de versiones que sí la incluya. - PROJECT_ID: Es 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 de Secret Manager en un clúster de Autopilot nuevo, ejecuta el siguiente comando:
Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:
- CLUSTER_NAME: El nombre de tu clúster.
- VERSION: Es la versión específica de GKE que deseas usar. Asegúrate de que tu clúster ejecute la versión 1.27.14-gke.1042001 o posterior de GKE. Para establecer una versión específica, consulta Configura la versión y el canal de versiones de un nuevo clúster de Autopilot.
- LOCATION: Es 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
Después de habilitar el complemento de Secret Manager, puedes usar el controlador de CSI de Secrets Store en volúmenes de Kubernetes con el controlador y el nombre del aprovisionador: secrets-store-gke.csi.k8s.io
.
Habilita el complemento de Secret Manager en un clúster de GKE existente
Para habilitar el complemento de Secret Manager en un clúster existente, haz lo siguiente:
Console
-
En la consola de Google Cloud , ve a la página Google Kubernetes Engine.
En la lista de clústeres, haz clic en el nombre del clúster que deseas modificar.
En la página de detalles del clúster, en la sección Seguridad, haz clic en
Secret Manager.En el diálogo Editar Secret Manager, selecciona la casilla de verificación Habilitar Secret Manager.
Haz clic en Guardar cambios.
gcloud
Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:
- CLUSTER_NAME: Es el nombre de tu clúster.
- LOCATION: Es 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 ^
Configura la rotación automática de secretos
Puedes configurar el complemento de Secret Manager para que rote automáticamente los secretos, de modo que los secretos que se actualicen 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 garantiza 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 cuando crees un clúster nuevo o actualices uno existente.
- La rotación automática de secretos es compatible con la versión 1.32.2-gke.1059000 de GKE o versiones posteriores.
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 estableciendo secret-manager-rotation-interval
.
Por ejemplo, para configurar la rotación automática en un clúster de GKE existente, usa el siguiente comando:
gcloud beta container clusters update CLUSTER_NAME \
--enable-secret-manager \
--location=LOCATION \
--enable-secret-manager-rotation \
--secret-manager-rotation-interval=ROTATION_INTERVAL
Reemplaza lo siguiente:
CLUSTER_NAME
: es el nombre del clústerLOCATION
: Es la ubicación de tu clúster, comous-central1
.ROTATION_INTERVAL
: Es el intervalo de rotación en segundos. El intervalo de rotación predeterminado es de 120 segundos.
Verifica la instalación del complemento de Secret Manager
Para verificar que el complemento de 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
Reemplaza lo siguiente:
CLUSTER_NAME
: es el nombre del clústerLOCATION
: Es la ubicación de tu clúster, comous-central1
.
Configura aplicaciones para que se autentiquen en la API de Secret Manager
El proveedor de Google Secret Manager usa la identidad de carga de trabajo del Pod en el que se activa un secreto cuando se autentica en la API de Secret Manager. Para permitir que tus aplicaciones se autentiquen en la API de Secret Manager con la federación de identidades para cargas de trabajo para GKE, sigue estos pasos:
Crea una ServiceAccount de Kubernetes nueva o usa una existente en el mismo espacio de nombres que el Pod en el que deseas activar el Secret.
Crea una política de permiso de Identity and Access Management (IAM) para el secreto en Secret Manager.
Los Pods que usan la ServiceAccount de Kubernetes configurada se autentican automáticamente como el identificador principal de IAM que corresponde a la ServiceAccount de Kubernetes cuando acceden a la API de Secret Manager.
Crea una nueva ServiceAccount de Kubernetes
Guarda el siguiente manifiesto como
service-account.yaml
:apiVersion: v1 kind: ServiceAccount metadata: name: KSA_NAME namespace: NAMESPACE
Reemplaza lo siguiente:
KSA_NAME
: Es el nombre de tu ServiceAccount de Kubernetes nueva.NAMESPACE
: El nombre del espacio de nombres de Kubernetes para la ServiceAccount
Aplica el manifiesto
kubectl apply -f service-account.yaml
Crea una política de permisos de IAM que haga referencia a la nueva ServiceAccount de Kubernetes y otórgale 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
Reemplaza lo siguiente:
SECRET_NAME
: Nombre del secreto en Secret ManagerPROJECT_NUMBER
: Tu Google Cloud número de proyecto numéricoPROJECT_ID
: Es el ID del proyecto de Google Cloud el proyecto que contiene tu clúster de GKE.NAMESPACE
: El nombre del espacio de nombres de Kubernetes para la ServiceAccountKSA_NAME
: Es el nombre de tu ServiceAccount de Kubernetes existente.
Usa una ServiceAccount de Kubernetes existente
Crea una política de permisos de IAM que haga referencia a la ServiceAccount de Kubernetes existente y otórgale 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
Reemplaza lo siguiente:
SECRET_NAME
: Nombre del secreto en Secret ManagerPROJECT_NUMBER
: Tu Google Cloud número de proyecto numéricoPROJECT_ID
: Es el ID del proyecto de Google Cloud el proyecto que contiene tu clúster de GKE.NAMESPACE
: El nombre del espacio de nombres de Kubernetes para la ServiceAccountKSA_NAME
: Es el nombre de tu ServiceAccount de Kubernetes existente.
Define qué secretos se deben activar
Para especificar qué secretos se deben activar como archivos en el Pod de Kubernetes, crea un manifiesto YAML SecretProviderClass
y enumera los secretos que se deben activar y el nombre de archivo con el que se deben activar. Lleva a cabo los pasos siguientes:
Guarda el siguiente 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"
Reemplaza lo siguiente:
SECRET_PROVIDER_CLASS_NAME
: Es el nombre de tu objetoSecretProviderClass
.PROJECT_ID
: el ID de tu proyectoSECRET_NAME
: Es el nombre del secreto.SECRET_VERSION
: Es la versión del secreto.FILENAME.txt
: Es el nombre de archivo en el que se activará el valor del secreto. Puedes crear varios archivos con las variablesresourceName
ypath
.
Para un Secret regional,
resourceName
es la ruta de acceso completa al recurso del Secret que incluye la ubicación del Secret regional. Por ejemplo, "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_NAME/versions/SECRET_VERSION"Aplica el manifiesto
kubectl apply -f app-secrets.yaml
Verifica que se haya creado el objeto
SecretProviderClass
:kubectl get SecretProviderClasses
Configura un volumen en el que se activará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
Reemplaza lo siguiente:
POD_NAME
: Es el nombre del Pod de Kubernetes en el que se montó el Secret.NAMESPACE
: El nombre del espacio de nombres de Kubernetes para la ServiceAccountKSA_NAME
: Es la cuenta de servicio de Kubernetes que configuraste en el paso Configura las aplicaciones para que se autentiquen en la API de Secret Manager.IMAGE_NAME
: Es el nombre de la imagen del contenedorSECRET_PROVIDER_CLASS_NAME
: El nombre de tu objetoSecretProviderClass
Solo en clústeres estándar, agrega lo siguiente al campo
template.spec
para colocar los Pods en grupos de nodos que usan la federación de identidades para cargas de trabajo para GKE.Omite este paso en los clústeres de Autopilot, que rechazan este nodeSelector porque cada nodo usa la federación de identidades para cargas de trabajo para GKE.
spec: nodeSelector: iam.gke.io/gke-metadata-server-enabled: "true"
Aplica la configuración al clúster.
kubectl apply -f my-pod.yaml
En este paso, se activa un volumen mysecret
en /var/secrets
con el controlador de CSI (secrets-store-gke.csi.k8s.io). Este volumen hace referencia al objeto SecretProviderClass
, que actúa como proveedor.
Migra desde el controlador de CSI de Secrets Store existente
Si migras al complemento de Secret Manager desde tu instalación existente del controlador de CSI de Secrets Store, actualiza el manifiesto de tu Pod de la siguiente manera:
Actualiza el nombre de tu
SecretProviderClass
y elprovider
como se describe en el siguiente 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
para tu volumen de Kubernetes como se describe en el siguiente manifiesto:volumes: - name: mysecret csi: driver: secrets-store-gke.csi.k8s.io readOnly: true volumeAttributes: secretProviderClass: "app-secrets-gke"
Inhabilita el complemento de Secret Manager
Para inhabilitar el complemento de Secret Manager en un clúster de Standard existente o en un clúster de Autopilot, ejecuta el siguiente comando:
Console
-
En la consola de Google Cloud , ve a la página Google Kubernetes Engine.
En la lista de clústeres, haz clic en el nombre del clúster que deseas modificar.
En la página de detalles del clúster, en la sección Seguridad, haz clic en
Secret Manager.En el cuadro de diálogo Editar Secret Manager, desmarca la casilla de verificación Habilitar Secret Manager.
Haz clic en Guardar cambios.
gcloud
Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:
- CLUSTER_NAME: Es 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 ^