Autenticación de clúster de Workload Identity

En este documento se describe cómo configurar y usar la autenticación de clúster de Workload Identity para Google Distributed Cloud (solo software) en bare metal. En lugar de usar claves de cuentas de servicio, la autenticación de clústeres de Workload Identity usa tokens de corta duración y la federación de identidades de cargas de trabajo para crear y proteger tus clústeres. Las credenciales de corta duración de la cuenta de servicio tienen el formato de tokens de acceso de OAuth 2.0. Los tokens de acceso caducan después de 1 hora de forma predeterminada. Del mismo modo, los tokens de extracción de imágenes también caducan al cabo de una hora de forma predeterminada.

Por el contrario, el modo con clave, el método estándar para crear y proteger clústeres, utiliza claves de cuenta de servicio descargadas. Cuando creas un clúster autogestionado (administrador, híbrido o independiente), especificas la ruta a las claves descargadas. Las claves se almacenan como secretos en el clúster y en cualquier clúster de usuario gestionado. De forma predeterminada, las claves de cuentas de servicio no caducan y suponen un riesgo para la seguridad si no se gestionan correctamente. Para obtener información sobre cómo definir un tiempo de vencimiento para las claves de tu cuenta de servicio, consulta Tiempos de vencimiento de las claves gestionadas por el usuario.

La autenticación de clúster de Workload Identity ofrece dos ventajas principales con respecto al uso de claves de cuenta de servicio:

  • Seguridad mejorada: las claves de las cuentas de servicio suponen un riesgo para la seguridad si no se gestionan adecuadamente. Los tokens de OAuth 2.0 y la federación de identidades de cargas de trabajo se consideran alternativas recomendadas a las claves de cuentas de servicio. Para obtener más información sobre los tokens de cuentas de servicio, consulta el artículo Credenciales de cuentas de servicio de corta duración. Para obtener más información sobre la federación de identidades de cargas de trabajo, consulta Federación de identidades de cargas de trabajo.

  • Mantenimiento reducido: las claves de cuenta de servicio requieren más mantenimiento. Rotar y proteger estas claves con regularidad puede suponer una carga administrativa considerable.

La autenticación de clústeres de Workload Identity se introdujo en la versión preliminar con la versión 1.30 y está disponible de forma general en la versión 1.33 y posteriores. La autenticación de clúster de Workload Identity solo se puede habilitar al crear clústeres. No puedes configurar un clúster para que use la autenticación de clúster de identidad de carga de trabajo durante una actualización. Para ver más restricciones, consulta Limitaciones.

Esta página está dirigida a administradores, arquitectos y operadores que configuran, monitorizan y gestionan el ciclo de vida de la infraestructura tecnológica subyacente. Para obtener más información sobre los roles habituales y las tareas de ejemplo a las que hacemos referencia en el contenido, consulta Roles y tareas habituales de los usuarios de GKE.Google Cloud

Antes de empezar

En las siguientes secciones, creará cuentas de servicio y concederá los roles necesarios para la autenticación de clústeres de identidad de carga de trabajo. Las instrucciones de configuración de este documento no sustituyen a las de Configurar recursos Google Cloud, sino que son necesarias además de los requisitos previos de instalación estándar solo de software de Google Distributed Cloud. Las cuentas de servicio necesarias para la autenticación de clústeres de Workload Identity son similares a las cuentas de servicio descritas en Configurar recursos deGoogle Cloud , pero tienen nombres únicos, por lo que no interfieren con los clústeres que usan las claves de cuenta de servicio predeterminadas.

Las cuentas de servicio necesarias para la autenticación de clústeres de Workload Identity difieren en las ofertas de vista previa y de disponibilidad general, tal como se describe en la siguiente tabla:

1.33 y versiones posteriores

Cuenta de servicio Finalidad Roles
admin-sa Esta cuenta de servicio se usa 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 Finalidad Roles
admin-sa Esta cuenta de servicio se usa 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 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

Configurar cuentas de servicio

En las siguientes secciones se incluyen instrucciones para crear las cuentas de servicio necesarias y asignarles los roles necesarios para la autenticación de clústeres de Workload Identity. Para ver una lista de las cuentas de servicio y los roles necesarios, consulta la tabla de la sección anterior.

Crear cuentas de servicio

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

  1. En tu estación de trabajo de administrador, inicia sesión en Google Cloud CLI:

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

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

    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
    

    Sustituye PROJECT_ID por el ID de tuGoogle Cloud proyecto.

    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
    

    Sustituye PROJECT_ID por el ID de tuGoogle Cloud proyecto.

Añadir enlaces de políticas de gestión de identidades y accesos para cuentas de servicio

Sigue estos pasos para aplicar las vinculaciones de políticas de gestión de identidades y accesos necesarias a las nuevas cuentas de servicio:

1.33 y versiones posteriores

  1. Añade enlaces de políticas de gestión de identidades y accesos para los roles necesarios de la cuenta de servicio 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. Añade enlaces de políticas de gestión de identidades y accesos para los roles necesarios de la cuenta de servicio 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. Añade enlaces de políticas de gestión de identidades y accesos para los roles necesarios de la cuenta de servicio 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. Añade enlaces de políticas de gestión de identidades y accesos para los roles necesarios de la cuenta de servicio 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. Concede 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
    

Configurar 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, inicia sesión en Google Cloud CLI:

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

    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
    

    Sustituye TMP_KEY_FILE_PATH por la ruta, incluido el nombre de archivo, del archivo de clave descargado.

  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 duración de 1 hora.

  5. Verifica que el token lo haya generado la cuenta de servicio admin-sa con la fecha de vencimiento correcta:

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

    La respuesta debe 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 caduca en menos de una hora.

Configurar Workload Identity Federation para tus clústeres

Para proporcionar acceso con la federación de identidades de carga de trabajo para GKE, crea una política de permiso de IAM que conceda acceso a un recursoGoogle Cloud específico a una entidad principal que corresponda a la identidad de tu aplicación. Google Cloud En este caso, la federación de identidades de cargas de trabajo concede acceso a operadores específicos del clúster. Para obtener más información sobre Workload Identity Federation para GKE, consulta Workload Identity Federation en la documentación de gestión de identidades y accesos.

1.33 y versiones posteriores

En las versiones de clúster en las que la autenticación de clúster de Workload Identity está disponible de forma general, se usa el comando bmctl configure projects para configurar la federación de identidades de cargas de trabajo en los clústeres. Este comando se incluye en los pasos para crear un clúster de administradores y crear un clúster de usuarios.

1.30-1.32

En las versiones de clúster en las que la autenticación de clúster de Workload Identity esté en vista previa, debes configurar manualmente la federación de identidad de carga de trabajo de tus clústeres, tal como se describe en las secciones siguientes.

Añadir enlaces de políticas de gestión de identidades y accesos para el operador del clúster

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

  1. En cada clúster configurado para la autenticación de clústeres de Workload Identity (o que tenga previsto usarla), incluido el clúster de arranque, concede a anthos-cluster-operator en el clúster la capacidad de suplantar la cuenta de servicio baremetal-controller:

    En el siguiente comando, el principalSet consta del grupo de identidades de carga 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
    

    Haz los cambios siguientes:

  2. Verifica las vinculaciones de políticas de 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
    

Añadir enlaces de políticas de gestión de identidades y accesos para los operadores de Google Cloud Observability

Los siguientes comandos conceden a las siguientes cuentas de servicio de Kubernetes de Google Cloud Observability la capacidad de usar la identidad de la cuenta de servicio baremetal-cloud-ops e 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. En cada clúster configurado para la autenticación de clústeres de Workload Identity (o que tenga previsto usarla), incluido el clúster de arranque, concede a los operadores de Google Cloud Observability del 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 carga de trabajo y de 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 de 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 clúster de administradores

Los pasos para crear un clúster de administrador varían ligeramente en las versiones Preview (de la 1.30 a la 1.32) y GA (versión 1.33 y posteriores). En los pasos de la disponibilidad general se usa el comando bmctl configure projects para configurar la federación de identidades de cargas de trabajo en tus clústeres.

1.33 y versiones posteriores

La diferencia más evidente en la configuración de los clústeres que usan la autenticación de clústeres de identidad de carga de trabajo es que no se especifican las rutas a las claves de las cuentas de servicio descargadas.

  1. Cuando rellenes la configuración del clúster en el archivo de configuración, deja en blanco las rutas de las claves de la cuenta de servicio en la sección de credenciales, tal 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. Añade 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 recién obtenido:

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

    De forma predeterminada, el token de acceso tiene una duración de 3600 segundos (1 hora). Cuando usas la autenticación de clústeres de Workload Identity, bmctl comprueba la hora de vencimiento del token. Si el token caduca en un plazo de 1800 segundos (30 minutos), bmctl informa de un error y se cierra.

  4. Configura la federación de identidades de cargas de trabajo para el clúster que vas a crear:

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

1.30-1.32

La diferencia más evidente en la configuración de los clústeres que usan la autenticación de clústeres de identidad de carga de trabajo es que no se especifican las rutas a las claves de las cuentas de servicio descargadas.

  1. Cuando rellenes la configuración del clúster en el archivo de configuración, deja en blanco las rutas de las claves de la cuenta de servicio en la sección de credenciales, tal 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 admin-sa cuenta de servicio:

    Esta clave es necesaria para autorizar el acceso a la cuenta de servicio admin-sa y debes eliminarla 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
    

    Sustituye TMP_KEY_FILE_PATH por la ruta, incluido el nombre de archivo, del archivo de clave descargado.

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

    gcloud auth activate-service-account admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --key-file=TMP_KEY_FILE_PATH
    
  4. Elimina el archivo de clave JSON descargado:

    rm TMP_KEY_FILE_PATH
    

    El token de acceso tiene una duración breve, por lo que normalmente 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 duración de 3600 segundos (1 hora).

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

Crear clúster de usuarios

Los pasos para crear un clúster de administrador varían ligeramente en las versiones Preview (de la 1.30 a la 1.32) y GA (versión 1.33 y posteriores). En los pasos de la disponibilidad general se usa el comando bmctl configure projects para configurar la federación de identidades de cargas de trabajo en tus clústeres.

1.33 y versiones posteriores

  1. Añade 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 duración breve, por lo que normalmente debes volver a generarlo antes de ejecutar comandos bmctl para operaciones de clúster, 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 recién obtenido:

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

    De forma predeterminada, el token de acceso tiene una duración de 3600 segundos (1 hora).

  3. Configura la federación de identidades de cargas de trabajo para el clúster que vas a crear:

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

    kubectl apply -f USER_CLUSTER_CONFIG \
        --kubeconfig ADMIN_KUBECONFIG
    

Haz los cambios siguientes:

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

  • ADMIN_KUBECONFIG: 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 admin-sa cuenta de servicio:

    Esta clave es necesaria para autorizar el acceso a la cuenta de servicio admin-sa y debes eliminarla 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
    

    Sustituye TMP_KEY_FILE_PATH por la ruta, incluido el nombre de archivo, del archivo de clave descargado.

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

    gcloud auth activate-service-account admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --key-file=TMP_KEY_FILE_PATH
    
  3. Elimina el archivo de clave JSON descargado:

    rm TMP_KEY_FILE_PATH
    

    El token de acceso tiene una duración breve, por lo que normalmente 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 duración de 3600 segundos (1 hora).

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

Otras operaciones de clústeres

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

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

Si bmctl detecta que se ha definido 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, obtén uno nuevo:

    El token de acceso tiene una duración breve, por lo que normalmente debes volver a generarlo antes de ejecutar comandos bmctl para operaciones de clúster, 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 recién obtenido:

    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 duración de 3600 segundos (1 hora). Cuando usas la autenticación de clústeres de Workload Identity, bmctl comprueba la hora de vencimiento del token. Si el token caduca en un plazo de 1800 segundos (30 minutos), bmctl informa de 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 que tengan enlaces a los roles necesarios.

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 usa solo la baremetal-gcrcuenta de servicio. 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 la sección Antes de empezar.

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

    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
      ...
    

Sustituye CUSTOM_AR_GSA por el nombre de correo 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 quieras usar tengan los roles identificados en la tabla de la sección Antes de empezar.

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

    Si especificas nombres personalizados, puedes usar cuentas de servicio disponibles. Asegúrate de que los nombres de las cuentas de servicio personalizadas que especifiques sean diferentes entre sí. No se puede usar una sola cuenta de servicio para sustituir dos o más 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
      ...
    

Haz los cambios siguientes:

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

  • CUSTOM_CLOUD_OPS_GSA: nombre de correo 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: el nombre de correo del servicio cuenta que usa Google Distributed Cloud para descargar imágenes de contenedor de Artifact Registry.

Limitaciones

Las siguientes funciones no se admiten cuando se usa la autenticación de clústeres de Workload Identity para Google Distributed Cloud (solo software) en bare metal:

  • Usar un servidor proxy
  • Controles de Servicio de VPC
  • Actualizar los clústeres del modo de claves para que usen la autenticación de clústeres de Workload Identity
  • Gestión del ciclo de vida de los clústeres con clientes de la API de GKE On-Prem, como la CLI de Google Cloud, Terraform o la consola Google Cloud

Siguientes pasos