Usa el complemento de Secret Manager con Google Kubernetes Engine

La integración entre Secret Manager y Google Kubernetes Engine (GKE) te permite almacenar datos sensibles, como contraseñas y certificados que usa GKE. como Secrets en Secret Manager.

En esta página, se explica cómo puedes usar el complemento de Secret Manager para acceder a los Secrets almacenados en Secret Manager como volúmenes activados en los Pods de Kubernetes.

Este proceso implica los siguientes pasos:

  1. Habilita el complemento de Secret Manager en un dispositivo nuevo o existente clúster de GKE.
  2. Configura las aplicaciones para autenticarte en la API de Secret Manager.
  3. Define qué secretos activar en los Pods de Kubernetes con un archivo YAML SecretProviderClass.
  4. Crea un volumen en el que se activarán los Secrets. Después de colocar el volumen, Las aplicaciones en el contenedor pueden acceder a los datos en su sistema de archivos.

El complemento de Secret Manager se deriva del controlador de CSI del almacén de secretos de Kubernetes de código abierto. y el proveedor de Google Secret Manager. Si usas el controlador de CSI del almacén de Secrets de código abierto para acceder a los Secrets, puedes migrar al complemento de Secret Manager. Para obtener más información, consulta Migra desde el controlador de CSI del almacén de secretos existente.

Beneficios

El complemento de Secret Manager proporciona los siguientes beneficios:

  • Puedes usar una solución completamente administrada y compatible para acceder a Secret Manager de Secrets de GKE sin sobrecarga operativa.
  • No es necesario que escribas un 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 los Secrets de forma selectiva desde los Pods de GKE Complemento de Secret Manager. Al hacer esto, puedes usar las funciones que ofrece Secret Manager, como la encriptación con CMEK, el control la rotación administrada, la administración del ciclo de vida y los registros de auditoría, junto con el uso de funciones de Kubernetes, como pasar secretos a contenedores en forma de volúmenes activados.
  • El complemento de Secret Manager es compatible con los clústeres Standard y Autopilot.
  • El complemento de Secret Manager admite nodos que usan Container-Optimized OS imágenes de nodo de Ubuntu o Ubuntu.

Limitaciones

El complemento de Secret Manager tiene las siguientes limitaciones:

Antes de comenzar

  • Enable the Secret Manager and Google Kubernetes Engine APIs.

    Enable the APIs

  • Si quieres usar Google Cloud CLI para esta tarea, instala y, luego, inicializa gcloud CLI. Si instalada previamente gcloud CLI, ejecuta el siguiente comando para obtener la versión más reciente el comando gcloud components update

    No puedes configurar manualmente el complemento de Secret Manager con el el SDK de Google Cloud o la consola de Google Cloud.

  • Asegúrate de que el clúster ejecute la versión 1.27.14-gke.1042001 de GKE o más adelante con una imagen de nodo de Linux.

  • Si usas un clúster estándar de GKE, asegúrate de que tu clúster tiene habilitada la Federación de identidades para cargas de trabajo para GKE. La federación de identidades para cargas de trabajo para GKE está habilitada por 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 API de Secret Manager.

Habilita el complemento de Secret Manager

Puedes habilitar el complemento de Secret Manager en ambos clústeres de Standard y los clústeres 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

  1. Ve a la página de Google Kubernetes Engine en la consola de Google Cloud.

    Ir a Google Kubernetes Engine

  2. Haga clic en Crear.

  3. En el diálogo Crear clúster, haz clic en Configurar.

  4. En el menú de navegación, en la sección Clúster, haz clic en Seguridad.

  5. Selecciona la casilla de verificación Habilitar Secret Manager.

  6. Selecciona la casilla de verificación Habilitar Workload Identity.

  7. 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 una nueva En el clúster estándar, 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: el Compute Engine region para el clúster, como us-central1.
  • VERSION: Es la versión de GKE específica a la que que quieres usar. Asegúrate de que el clúster ejecute la versión de GKE 1.27.14-gke.1042001 o una versión posterior. Si el valor predeterminado canal de versiones no incluye esta versión, usa la marca --release-channel para elegir una de versiones canary que sí lo hace.
  • PROJECT_ID: El ID del 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

{ Autopilot cluster}

Para habilitar el complemento de Secret Manager en un nuevo clúster de Autopilot, ejecuta el siguiente comando:

Antes de usar cualquiera de los datos de comando a continuación, realiza los siguientes reemplazos:

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 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: haz lo siguiente:

Console

  1. Ve a la página de Google Kubernetes Engine en la consola de Google Cloud.

    Ir a Google Kubernetes Engine

  2. En la lista de clústeres, haz clic en el nombre del clúster que deseas modificar.

  3. En la página de detalles del clúster, en la sección Seguridad, haz clic en Secret Manager.

  4. En el diálogo Edit Secret Manager, selecciona la casilla de verificación Enable Secret Manager.

  5. 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 para el 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 ^

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, haz lo siguiente: Ejecuta el siguiente comando:

  gcloud container clusters describe CLUSTER_NAME --location LOCATION | grep secretManagerConfig -A 1

Reemplaza lo siguiente:

  • CLUSTER_NAME: es el nombre del clúster
  • LOCATION: Es la ubicación. de tu clúster, como us-central1

Configura aplicaciones para autenticarte en la API de Secret Manager

El proveedor de Google Secret Manager usa Workload Identity del Pod en el que se activa un Secret cuando se autentica en el API de Secret Manager. Para permitir que tus aplicaciones se autentiquen en el Para la API de Secret Manager que usa la Federación de identidades para cargas de trabajo para GKE, sigue estos pasos:

  • Crea una nueva ServiceAccount de Kubernetes. o usar una ServiceAccount existente de Kubernetes en el mismo espacio de nombres que el Pod en la que quieres activar el Secret.

  • Crea una política de permisos 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 ServiceAccount de Kubernetes cuando accedes a la API de Secret Manager.

Crea una nueva ServiceAccount de Kubernetes

  1. 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 nueva ServiceAccount de Kubernetes.
    • NAMESPACE: Es el nombre del espacio de nombres de Kubernetes para la cuenta de servicio.
  2. Aplica el manifiesto

    kubectl apply -f service-account.yaml
    
  3. Crear una política de permisos de IAM que haga referencia al nuevo Kubernetes ServiceAccount 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: Es el nombre del secreto en Secret Manager.
    • PROJECT_NUMBER: Es el número numérico de proyecto de Google Cloud.
    • PROJECT_ID: Es el ID del proyecto de Google Cloud que contiene el clúster de GKE.
    • NAMESPACE: Es el nombre del espacio de nombres de Kubernetes para la cuenta de servicio.
    • KSA_NAME: Es el nombre de tu ServiceAccount de Kubernetes existente.

Usa una ServiceAccount de Kubernetes existente

Crear una política de permisos de IAM que haga referencia a la infraestructura existente ServiceAccount 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: Es el nombre del secreto en Secret Manager.
  • PROJECT_NUMBER: Es el número numérico de proyecto de Google Cloud.
  • PROJECT_ID: Es el ID del proyecto de Google Cloud que contiene el clúster de GKE.
  • NAMESPACE: Es el nombre del espacio de nombres de Kubernetes para la cuenta de servicio.
  • KSA_NAME: Es el nombre de tu ServiceAccount de Kubernetes existente.

Define qué Secrets se activarán

Para especificar qué Secrets quieres activar como archivos en el Pod de Kubernetes, crea un SecretProviderClass YAML y enumera los secretos para activar y el nombre del archivo en montarlos Lleva a cabo los pasos siguientes:

  1. 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 objeto SecretProviderClass.
    • PROJECT_ID: el ID de tu proyecto
    • SECRET_NAME: Es el nombre del Secret.
    • SECRET_VERSION: Es la versión del secreto.
    • FILENAME.txt: Es el nombre del archivo en el que estará el valor del secreto. activa. Puedes crear varios archivos con resourceName y path. variables.
  2. Aplica el manifiesto

    kubectl apply -f app-secrets.yaml
    
  3. Verifica que se haya creado el objeto SecretProviderClass:

    kubectl get SecretProviderClasses
    

Configura un volumen en el que se activarán los Secrets

  1. 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 encuentra el secreto. está activado
    • NAMESPACE: Es el nombre del espacio de nombres de Kubernetes para la cuenta de servicio.
    • KSA_NAME: La ServiceAccount de Kubernetes que configuraste en el paso Configura aplicaciones para autenticarse en la API de Secret Manager
    • IMAGE_NAME: Es el nombre de la imagen del contenedor
    • SECRET_PROVIDER_CLASS_NAME: Es el nombre del objeto SecretProviderClass.
  2. 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"
    
  3. 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 el proveedor.

Migra desde el controlador de CSI del almacén de secretos existente

Si migras al complemento de Secret Manager desde tu la instalación existente del controlador de CSI del almacén de secretos actualiza tu manifiesto del Pod de la siguiente manera:

  1. Actualiza el nombre de tu SecretProviderClass y provider 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"
    
  2. Actualiza el driver y el secretProviderClass de tu instancia de Kubernetes. volumen, 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 Standard o en un clúster de Autopilot, ejecuta lo siguiente: :

Console

  1. Ve a la página de Google Kubernetes Engine en la consola de Google Cloud.

    Ir a Google Kubernetes Engine

  2. En la lista de clústeres, haz clic en el nombre del clúster que deseas modificar.

  3. En la página de detalles del clúster, en la sección Seguridad, haz clic en Secret Manager.

  4. En el diálogo Edit Secret Manager, desmarca la casilla de verificación Enable Secret Manager.

  5. 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: el Compute Engine region para el 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 ^