Autenticación de clústeres de Workload Identity

En este documento, se describe cómo configurar y usar la autenticación de clústeres de Workload Identity para Google Distributed Cloud (solo software) en equipos físicos. En lugar de las claves de cuenta de servicio, la autenticación de clústeres de Workload Identity usa tokens de corta duración y la federación de identidades para cargas de trabajo para crear y proteger tus clústeres. Las credenciales de corta duración para la cuenta de servicio se presentan en forma de tokens de acceso de OAuth 2.0. De forma predeterminada, los tokens de acceso vencen después de 1 hora. Del mismo modo, los tokens de extracción de imágenes también vencen después de 1 hora de forma predeterminada.

Por el contrario, el modo con clave, el método estándar para crear y proteger clústeres, usa claves de cuentas de servicio descargadas. Cuando creas un clúster autoadministrado (de administrador, híbrido o independiente), especificas la ruta de acceso a las claves descargadas. Luego, las claves se almacenan como Secrets en el clúster y en cualquier clúster de usuario administrado. De forma predeterminada, las claves de cuentas de servicio no vencen y son un riesgo de seguridad si no se administran de forma adecuada. Para obtener información sobre cómo establecer una fecha de vencimiento para las claves de tu cuenta de servicio, consulta Fechas de vencimiento para las claves administradas por el usuario.

La autenticación de clústeres con Workload Identity ofrece dos beneficios principales en comparación con el uso de claves de cuentas de servicio:

  • Mayor seguridad: Las claves de cuenta de servicio son un riesgo de seguridad si no se administran de forma adecuada. Los tokens de OAuth 2.0 y Workload Identity Federation se consideran alternativas de prácticas recomendadas a las claves de cuenta de servicio. Para obtener más información sobre los tokens de cuentas de servicio, consulta Crea credenciales de corta duración para una cuenta de servicio. Para obtener más información sobre la federación de Workload Identity, consulta Workload Identity Federation.

  • Menos mantenimiento: Las claves de cuentas de servicio requieren más mantenimiento. La rotación y la protección periódicas de estas claves pueden ser una carga administrativa importante.

La autenticación del clúster de Workload Identity se introdujo en vista previa con la versión 1.30 y está en DG para la versión 1.33 y posteriores. La autenticación de clústeres de Workload Identity solo se puede habilitar cuando se crean clústeres nuevos. No puedes configurar un clúster existente para que use la autenticación del clúster de Workload Identity durante una actualización. Para conocer otras restricciones, consulta Limitaciones.

Esta página está destinada a administradores, arquitectos y operadores que configuran, supervisan y administran el ciclo de vida de la infraestructura tecnológica subyacente. Para obtener más información sobre los roles comunes y las tareas de ejemplo a las que hacemos referencia en el contenido deGoogle Cloud , consulta Roles de usuario y tareas comunes de GKE.

Antes de comenzar

En las siguientes secciones, crearás cuentas de servicio y otorgarás los roles necesarios para la autenticación de clústeres de Workload Identity. Las instrucciones de configuración de este documento no reemplazan las instrucciones de Configura recursos de Google Cloud, sino que se requieren además de los requisitos previos estándar de instalación solo de software de Google Distributed Cloud. Las cuentas de servicio necesarias para la autenticación del clúster de Workload Identity son similares a las que se describen en Configura recursos deGoogle Cloud , pero tienen nombres únicos, por lo que no interfieren con los clústeres que usan las claves de cuentas de servicio predeterminadas.

Las cuentas de servicio necesarias para la autenticación del clúster de Workload Identity difieren para las ofertas de versión preliminar y de DG, como se describe en la siguiente tabla:

1.33 y versiones posteriores

Cuenta de servicio Objetivo Funciones
admin-sa Usas esta cuenta de servicio para generar tokens. Cada token tiene los privilegios asociados a los roles de la cuenta de servicio. roles/gkehub.admin
roles/iam.serviceAccountAdmin
roles/iam.serviceAccountTokenCreator
roles/logging.admin
roles/monitoring.admin
roles/resourcemanager.projectIamAdmin
baremetal-gcr Google Distributed Cloud usa esta cuenta de servicio para descargar imágenes de contenedor de Artifact Registry. Ninguno

1.30-1.32

Cuenta de servicio Objetivo Funciones
admin-sa Usas esta cuenta de servicio para generar tokens. Cada token tiene los privilegios asociados a los roles de la cuenta de servicio. roles/gkehub.admin
roles/iam.serviceAccountAdmin
roles/iam.serviceAccountTokenCreator
roles/logging.admin
roles/monitoring.admin
baremetal-controller El agente de Connect usa esta cuenta de servicio para mantener una conexión entre tu clúster y Google Cloud , y para registrar tus clústeres en una flota. Esta cuenta de servicio también actualiza los tokens de la cuenta de servicio baremetal-gcr. roles/gkehub.admin
roles/monitoring.dashboardEditor
roles/serviceusage.serviceUsageViewer
baremetal-cloud-ops El agente de Stackdriver usa esta cuenta de servicio para exportar registros y métricas de clústeres a Cloud Logging y Cloud Monitoring. roles/kubernetesmetadata.publisher
roles/logging.logWriter
roles/monitoring.dashboardEditor
roles/monitoring.metricWriter
roles/monitoring.viewer
roles/opsconfigmonitoring.resourceMetadata.writer
roles/serviceusage.serviceUsageViewer
roles/stackdriver.resourceMetadata.writer
baremetal-gcr Google Distributed Cloud usa esta cuenta de servicio para descargar imágenes de contenedor de Artifact Registry. Ninguno

Configura cuentas de servicio

En las siguientes secciones, se incluyen instrucciones para crear las cuentas de servicio necesarias y otorgarles los roles necesarios para la autenticación del clúster de Workload Identity. Para obtener una lista de las cuentas de servicio y sus roles obligatorios, consulta la tabla de la sección anterior.

Crea cuentas de servicio

Para crear las cuentas de servicio para la autenticación del clúster de Workload Identity, sigue estos pasos:

  1. En tu estación de trabajo de administrador, accede a Google Cloud CLI:

    gcloud auth login
    
  2. Crea las cuentas de servicio necesarias para la autenticación del clúster de Workload Identity:

    El nombre de la cuenta de servicio admin-sa es arbitrario. Puedes cambiar el nombre si causa un conflicto en tu proyecto. Las otras cuentas de servicio para la autenticación del clúster de Workload Identity tienen nombres predeterminados que se pueden personalizar, si lo deseas.

    1.33 y versiones posteriores

    gcloud iam service-accounts create admin-sa \
        --project=PROJECT_ID
    
    gcloud iam service-accounts create baremetal-gcr \
        --project=PROJECT_ID
    

    Reemplaza PROJECT_ID por el ID de tu proyecto deGoogle Cloud .

    1.30-1.32

    gcloud iam service-accounts create admin-sa \
        --project=PROJECT_ID
    
    gcloud iam service-accounts create baremetal-controller \
        --project=PROJECT_ID
    
    gcloud iam service-accounts create baremetal-cloud-ops \
        --project=PROJECT_ID
    
    gcloud iam service-accounts create baremetal-gcr \
        --project=PROJECT_ID
    

    Reemplaza PROJECT_ID por el ID de tu proyecto deGoogle Cloud .

Agrega vinculaciones de políticas de Identity and Access Management para las cuentas de servicio

Sigue estos pasos para aplicar las vinculaciones de políticas de Identity and Access Management requeridas a las cuentas de servicio nuevas:

1.33 y versiones posteriores

  1. Agrega vinculaciones de políticas de IAM para los roles requeridos de la cuenta de servicio de admin-sa:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/gkehub.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountAdmin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/logging.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/resourcemanager.projectIamAdmin
    

1.30-1.32

  1. Agrega vinculaciones de políticas de IAM para los roles requeridos de la cuenta de servicio de admin-sa:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/gkehub.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountAdmin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/logging.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.admin
    
  2. Agrega vinculaciones de políticas de IAM para los roles requeridos de la cuenta de servicio de baremetal-controller:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/gkehub.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.dashboardEditor
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/serviceusage.serviceUsageViewer
    
  3. Agrega vinculaciones de políticas de IAM para los roles requeridos de la cuenta de servicio de baremetal-cloud-ops:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/kubernetesmetadata.publisher
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/logging.logWriter
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.dashboardEditor
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.metricWriter
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.viewer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/opsconfigmonitoring.resourceMetadata.writer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/serviceusage.serviceUsageViewer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/stackdriver.resourceMetadata.writer
    
  4. Otorga a la cuenta de servicio baremetal-controller la capacidad de generar tokens de acceso en nombre de la cuenta de servicio baremetal-gcr:

    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-gcr@PROJECT_ID.iam.gserviceaccount.com \
        --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
    

Configura la autenticación

En los siguientes pasos, se configura el flujo de autenticación que usa un token de corta duración para autenticar las operaciones del clúster:

  1. En tu estación de trabajo de administrador, accede a Google Cloud CLI:

    gcloud auth login
    
  2. En tu estación de trabajo de administrador, crea y descarga una clave para la cuenta de servicio de admin-sa:

    Esta clave es necesaria para autorizar el acceso a la cuenta de servicio admin-sa.

    gcloud iam service-accounts keys create TMP_KEY_FILE_PATH \
        --iam-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com
    

    Reemplaza TMP_KEY_FILE_PATH por la ruta de acceso del archivo de claves descargado, incluido el nombre de archivo.

  3. En tu estación de trabajo de administrador, crea una variable de entorno GOOGLE_APPLICATION_CREDENTIALS con el valor de la clave de cuenta de servicio descargada:

    export GOOGLE_APPLICATION_CREDENTIALS=TMP_KEY_FILE_PATH
    
  4. En tu estación de trabajo de administrador, crea una variable de entorno GCP_ACCESS_TOKEN con el valor de un token de acceso creado por la cuenta de servicio admin-sa:

    export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
    

    De forma predeterminada, el token de acceso tiene una vida útil de 1 hora.

  5. Verifica que el token se genere con la cuenta de servicio de admin-sa y que tenga la fecha de vencimiento correcta:

    curl "https://oauth2.googleapis.com/tokeninfo?access_token=$GCP_ACCESS_TOKEN"
    

    La respuesta debería incluir líneas similares a las siguientes:

    ...
    "exp": "1759512810",
    "expires_in": "3589",
    ...
    

    El valor de vencimiento está en segundos y debe ser inferior a 3600, lo que indica que el token vence en menos de una hora.

Configura Workload Identity Federation para tus clústeres

Para proporcionar Google Cloud acceso con la federación de identidades para cargas de trabajo de GKE, crea una política de permisos de IAM que otorgue acceso en un recursoGoogle Cloud específico a una principal que corresponda a la identidad de tu aplicación. En este caso, Workload Identity Federation for GKE otorga acceso a operadores específicos en el clúster. Para obtener más información sobre Workload Identity Federation for GKE, consulta Workload Identity Federation en la documentación de IAM.

1.33 y versiones posteriores

En las versiones de clúster en las que la autenticación del clúster de Workload Identity está en DG, usas el comando bmctl configure projects para configurar la federación de identidades para cargas de trabajo en tus clústeres. Este comando se incorpora en los pasos para crear un clúster de administrador y crear un clúster de usuario.

1.30-1.32

En las versiones de clúster en las que la autenticación de clústeres de Workload Identity se encuentra en versión preliminar, debes configurar manualmente la federación de Workload Identity para tus clústeres, como se describe en las siguientes secciones.

Agrega vinculaciones de políticas de IAM para el operador de clústeres

Los siguientes comandos otorgan a la cuenta de servicio de Kubernetes anthos-cluster-operator la capacidad de suplantar la identidad de la cuenta de servicio baremetal-controller y de interactuar con los recursos de Google Cloud en nombre del clúster:

  1. Para cada clúster configurado para la autenticación de clústeres con Workload Identity (o que se planea usar para la autenticación de clústeres con Workload Identity), incluido el clúster de arranque, otorga a anthos-cluster-operator en el clúster la capacidad de suplantar la cuenta de servicio baremetal-controller:

    En el siguiente comando, principalSet consta del grupo de identidades de cargas de trabajo y una cuenta de servicio de Kubernetes, anthos-cluster-operator, en el espacio de nombres kube-system.

    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/anthos-cluster-operator \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    

    Reemplaza lo siguiente:

    • PROJECT_NUM: El identificador único generado de forma automática para tu proyecto.

    • REGION: Es la ubicación de la membresía de la flota de tu clúster, que es global de forma predeterminada. Para obtener más información, consulta Ubicación de la membresía de la flota.

    • CLUSTER_NAME: el nombre del clúster De forma predeterminada, el nombre del clúster de arranque es bmctl-MACHINE_NAME.

  2. Verifica las vinculaciones de políticas para la cuenta de servicio baremetal-controller:

    gcloud iam service-accounts get-iam-policy \
        baremetal-controller@PROJECT_ID.iam.gserviceaccount.com
    

    La respuesta debería ser similar a la siguiente:

    bindings:
    - members:
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/anthos-cluster-operator
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/anthos-cluster-operator
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/anthos-cluster-operator
      role: roles/iam.workloadIdentityUser
    etag: BwYoN3QLig0=
    version: 1
    

Agrega vinculaciones de políticas de IAM para los operadores de Google Cloud Observability

Los siguientes comandos otorgan a las siguientes cuentas de servicio de Google Cloud Observability Kubernetes la capacidad de suplantar la cuenta de servicio baremetal-cloud-ops y de interactuar con los recursos de Google Cloud en nombre del clúster:

  • cloud-audit-logging
  • gke-metrics-agent
  • kubestore-collector
  • metadata-agent
  • stackdriver-log-forwarder
  1. Para cada clúster configurado para la autenticación de clústeres con Workload Identity (o que se planea usar para la autenticación de clústeres con Workload Identity), incluido el clúster de arranque, otorga a los operadores de Google Cloud Observability en el clúster la capacidad de suplantar la cuenta de servicio baremetal-cloud-ops:

    En cada uno de los siguientes comandos, principalSet consta del grupo de identidades de cargas de trabajo y una cuenta de servicio de Kubernetes, como cloud-audit-logging, en el espacio de nombres kube-system.

    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/cloud-audit-logging \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    
    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/gke-metrics-agent \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    
    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/kubestore-collector \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    
    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/metadata-agent \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    
    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/stackdriver-log-forwarder \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    
  2. Verifica las vinculaciones de políticas para la cuenta de servicio baremetal-cloud-ops:

    gcloud iam service-accounts get-iam-policy \
        baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com
    

    La respuesta debería ser similar a la siguiente:

    bindings:
    - members:
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/cloud-audit-logging
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/gke-metrics-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/kubestore-collector
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/metadata-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/stackdriver-log-forwarder
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/cloud-audit-logging
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/gke-metrics-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/kubestore-collector
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/metadata-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/stackdriver-log-forwarder
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/cloud-audit-logging
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/gke-metrics-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/kubestore-collector
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/metadata-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/stackdriver-log-forwarder
      role: roles/iam.workloadIdentityUser
    etag: BwYhT4gL-dY=
    version: 1
    

Crear un clúster de administrador

Los pasos para crear un clúster de administrador difieren ligeramente para las ofertas de vista previa (versiones 1.30 a 1.32) y de DG (versiones 1.33 y posteriores). En los pasos de la DG, se usa el comando bmctl configure projects para configurar Workload Identity Federation para tus clústeres.

1.33 y versiones posteriores

La diferencia más obvia en la configuración de los clústeres que usan la autenticación de clústeres de Workload Identity es que no especificas rutas de acceso a las claves de cuentas de servicio descargadas.

  1. Cuando completes la configuración del clúster en el archivo de configuración, deja en blanco las rutas de acceso a las claves de la cuenta de servicio en la sección de credenciales, como se muestra en el siguiente ejemplo:

    gcrKeyPath:
    sshPrivateKeyPath: /home/USERNAME/.ssh/id_rsa
    gkeConnectAgentServiceAccountKeyPath:
    gkeConnectRegisterServiceAccountKeyPath:
    cloudOperationsServiceAccountKeyPath:
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-ADMIN_CLUSTER_NAME
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: ADMIN_CLUSTER_NAME
      namespace: cluster-ADMIN_CLUSTER_NAME
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.33.0-gke.799
      ...
    
  2. Agrega la anotación baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true" al archivo de configuración del clúster:

    gcrKeyPath:
    sshPrivateKeyPath: /home/USERNAME/.ssh/id_rsa
    gkeConnectAgentServiceAccountKeyPath:
    gkeConnectRegisterServiceAccountKeyPath:
    cloudOperationsServiceAccountKeyPath:
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-ADMIN_CLUSTER_NAME
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: ADMIN_CLUSTER_NAME
      namespace: cluster-ADMIN_CLUSTER_NAME
      annotations:
        baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true"
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.33.0-gke.799
      ...
    
  3. En tu estación de trabajo de administrador, actualiza la variable de entorno GCP_ACCESS_TOKEN con un token de acceso recuperado recientemente:

    export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
    

    De forma predeterminada, el token de acceso tiene una vida útil de 3,600 segundos (1 hora). Cuando usas la autenticación del clúster de Workload Identity, bmctl verifica la hora de vencimiento del token. Si el token vence en un plazo de 1,800 segundos (30 minutos), bmctl informa un error y se cierra.

  4. Configura la federación de Workload Identity para el clúster que estás creando:

    bmctl configure projects --project-id=PROJECT_ID \
        --admin-cluster=ADMIN_CLUSTER_NAME
    
  5. Ejecuta el comando bmctl create cluster para crear tu clúster de administrador.

1.30-1.32

La diferencia más obvia en la configuración de los clústeres que usan la autenticación de clústeres de Workload Identity es que no especificas rutas de acceso a las claves de cuentas de servicio descargadas.

  1. Cuando completes la configuración del clúster en el archivo de configuración, deja en blanco las rutas de acceso a las claves de la cuenta de servicio en la sección de credenciales, como se muestra en el siguiente ejemplo:

    gcrKeyPath:
    sshPrivateKeyPath: /home/USERNAME/.ssh/id_rsa
    gkeConnectAgentServiceAccountKeyPath:
    gkeConnectRegisterServiceAccountKeyPath:
    cloudOperationsServiceAccountKeyPath:
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-ADMIN_CLUSTER_NAME
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: ADMIN_CLUSTER_NAME
      namespace: cluster-ADMIN_CLUSTER_NAME
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.33.0-gke.799
      ...
    
  2. En tu estación de trabajo de administrador, crea y descarga una clave para la cuenta de servicio de admin-sa:

    Esta clave es necesaria para autorizar el acceso a la cuenta de servicio admin-sa y debes borrarla inmediatamente después de que se autorice la cuenta de servicio.

    gcloud iam service-accounts keys create TMP_KEY_FILE_PATH \
        --iam-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com
    

    Reemplaza TMP_KEY_FILE_PATH por la ruta de acceso del archivo de claves descargado, incluido el nombre de archivo.

  3. Autoriza el acceso a Google Cloud con la cuenta de servicioadmin-sa:

    gcloud auth activate-service-account admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --key-file=TMP_KEY_FILE_PATH
    
  4. Borra el archivo de claves JSON que descargaste:

    rm TMP_KEY_FILE_PATH
    

    El token de acceso tiene una vida útil corta, por lo que, por lo general, debes volver a generarlo antes de ejecutar comandos bmctl para operaciones de clúster, como crear, actualizar o restablecer un clúster.

  5. En tu estación de trabajo de administrador, crea una variable de entorno GCP_ACCESS_TOKEN con el valor de un token de acceso creado por la cuenta de servicio admin-sa:

    export GCP_ACCESS_TOKEN=$(gcloud auth print-access-token \
        --impersonate-service-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com)
    

    De forma predeterminada, el token de acceso tiene una vida útil de 3,600 segundos (1 hora).

  6. Ejecuta el comando bmctl create cluster para crear tu clúster de administrador.

Crea un clúster de usuario

Los pasos para crear un clúster de administrador difieren ligeramente para las ofertas de vista previa (versiones 1.30 a 1.32) y de DG (versiones 1.33 y posteriores). En los pasos de la DG, se usa el comando bmctl configure projects para configurar Workload Identity Federation para tus clústeres.

1.33 y versiones posteriores

  1. Agrega la anotación baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true" al archivo de configuración del clúster:

    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-USER_CLUSTER_NAME
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: USER_CLUSTER_NAME
      namespace: cluster-USER_CLUSTER_NAME
      annotations:
        baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true"
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.33.0-gke.799
      ...
    

    El token de acceso tiene una vida útil corta, por lo que, por lo general, debes volver a generarlo antes de ejecutar comandos bmctl para operaciones de clústeres, como crear, actualizar o restablecer un clúster.

  2. En tu estación de trabajo de administrador, actualiza la variable de entorno GCP_ACCESS_TOKEN con un token de acceso recuperado recientemente:

    export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
    

    De forma predeterminada, el token de acceso tiene una vida útil de 3,600 segundos (1 hora).

  3. Configura la federación de Workload Identity para el clúster que estás creando:

    bmctl configure projects --project-id=PROJECT_ID \
        --user-clusters=USER_CLUSTER_NAME
    
  4. Usa kubectl para implementar el manifiesto del clúster de usuario:

    kubectl apply -f USER_CLUSTER_CONFIG \
        --kubeconfig ADMIN_KUBECONFIG
    

Reemplaza lo siguiente:

  • USER_CLUSTER_CONFIG: la ruta del archivo de configuración de tu clúster de usuario.

  • ADMIN_KUBECONFIG: Es la ruta del archivo kubeconfig del clúster de administrador.

1.30-1.32

  1. En tu estación de trabajo de administrador, crea y descarga una clave para la cuenta de servicio de admin-sa:

    Esta clave es necesaria para autorizar el acceso a la cuenta de servicio admin-sa y debes borrarla inmediatamente después de que se autorice la cuenta de servicio.

    gcloud iam service-accounts keys create TMP_KEY_FILE_PATH \
        --iam-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com
    

    Reemplaza TMP_KEY_FILE_PATH por la ruta de acceso del archivo de claves descargado, incluido el nombre de archivo.

  2. Autoriza el acceso a Google Cloud con la cuenta de servicioadmin-sa:

    gcloud auth activate-service-account admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --key-file=TMP_KEY_FILE_PATH
    
  3. Borra el archivo de claves JSON que descargaste:

    rm TMP_KEY_FILE_PATH
    

    El token de acceso tiene una vida útil corta, por lo que, por lo general, debes volver a generarlo antes de ejecutar comandos bmctl para operaciones de clúster, como crear, actualizar o restablecer un clúster.

  4. En tu estación de trabajo de administrador, crea una variable de entorno GCP_ACCESS_TOKEN con el valor de un token de acceso creado por la cuenta de servicio admin-sa:

    export GCP_ACCESS_TOKEN=$(gcloud auth print-access-token \
        --impersonate-service-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com)
    

    De forma predeterminada, el token de acceso tiene una vida útil de 3,600 segundos (1 hora).

  5. Ejecuta el comando bmctl create cluster para crear tu clúster de usuario.

Otras operaciones del clúster

En el caso de los clústeres que usan la autenticación de clústeres de Workload Identity, los siguientes comandos de bmctl requieren que la variable de entorno GCP_ACCESS_TOKEN esté establecida en un token de acceso activo y válido:

  • bmctl configure projects
  • bmctl create cluster
  • bmctl reset cluster
  • bmctl upgrade cluster

Si bmctl detecta que se configuró la variable de entorno GCP_ACCESS_TOKEN, realiza la validación del token:

  • Si el token es válido, bmctl lo usa para las operaciones del clúster.

  • Si el token no es válido, recupera uno nuevo:

    El token de acceso tiene una vida útil corta, por lo que, por lo general, debes volver a generarlo antes de ejecutar comandos bmctl para operaciones de clústeres, como crear, actualizar o restablecer un clúster. En tu estación de trabajo de administrador, actualiza la variable de entorno GCP_ACCESS_TOKEN con un token de acceso recuperado recientemente:

    1.33 y versiones posteriores

    export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
    

    1.30-1.32

    export GCP_ACCESS_TOKEN=$(gcloud auth print-access-token \
        --impersonate-service-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com)
    

    De forma predeterminada, el token de acceso tiene una vida útil de 3,600 segundos (1 hora). Cuando usas la autenticación del clúster de Workload Identity, bmctl verifica la hora de vencimiento del token. Si el token vence en un plazo de 1,800 segundos (30 minutos), bmctl informa un error y se cierra.

Personalización

Puedes usar cuentas de servicio con nombres únicos para la autenticación de clústeres de Workload Identity, siempre y cuando tengan vinculaciones para los roles requeridos.

1.33 y versiones posteriores

De forma predeterminada, la autenticación de clústeres de Workload Identity para clústeres de la versión 1.33 y posteriores solo usa la cuenta de servicio baremetal-gcr. Por lo tanto, esta es la única cuenta de servicio que se puede personalizar.

  1. Asegúrate de que la cuenta de servicio que quieres usar tenga los roles identificados en la tabla de Antes de comenzar.

  2. Anota el archivo de configuración del clúster para especificar el nombre personalizado de la cuenta de servicio de autenticación del clúster de Workload Identity:

    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: my-cluster
      namespace: cluster-my-cluster
      annotations:
        ...
        baremetal.cluster.gke.io/gcr-service-account: "CUSTOM_AR_GSA"
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.33.0-gke.799
      ...
    

Reemplaza CUSTOM_AR_GSA por el nombre de correo electrónico de la cuenta de servicio que usa Google Distributed Cloud para descargar imágenes de contenedor de Artifact Registry.

1.30-1.32

  1. Asegúrate de que las cuentas de servicio que quieres usar tengan los roles identificados en la tabla de Antes de comenzar.

  2. Anota el archivo de configuración del clúster para especificar los nombres personalizados de las cuentas de servicio de autenticación del clúster de Workload Identity:

    Si especificas nombres personalizados, puedes usar cuentas de servicio existentes. Asegúrate de que los nombres de las cuentas de servicio personalizadas que especifiques sean distintos entre sí. No admitimos el uso de una sola cuenta de servicio para reemplazar dos o más de las cuentas de servicio predeterminadas.

    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: my-cluster
      namespace: cluster-my-cluster
      annotations:
        ...
        baremetal.cluster.gke.io/controller-service-account: "CUSTOM_CONTROLLER_GSA"
        baremetal.cluster.gke.io/cloud-ops-service-account: "CUSTOM_CLOUD_OPS_GSA"
        baremetal.cluster.gke.io/gcr-service-account: "CUSTOM_AR_GSA"
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.30.0-gke.1930
      ...
    

Reemplaza lo siguiente:

  • CUSTOM_CONTROLLER_GSA: Es el nombre de correo electrónico de la cuenta de servicio que usa el agente de Connect para mantener una conexión entre tu clúster y Google Cloud, y para registrar tus clústeres.

  • CUSTOM_CLOUD_OPS_GSA: Es el nombre de correo electrónico de la cuenta de servicio que usa el agente de Stackdriver para exportar registros y métricas de clústeres a Cloud Logging y Cloud Monitoring.

  • CUSTOM_AR_GSA: Es el nombre de correo electrónico de la cuenta de servicio que usa Google Distributed Cloud para descargar imágenes de contenedores desde Artifact Registry.

Limitaciones

Las siguientes funciones y capacidades no son compatibles cuando usas la autenticación de clúster de Workload Identity para Google Distributed Cloud (solo software) en equipos físicos:

  • Usa un servidor proxy
  • Controles del servicio de VPC
  • Actualiza los clústeres existentes en modo con clave para que usen la autenticación de clústeres de Workload Identity
  • Administración del ciclo de vida del clúster con clientes de la API de GKE On-Prem, como Google Cloud CLI, Terraform o la consola de Google Cloud

¿Qué sigue?