En este documento, se describe cómo configurar y usar la autenticación de clústeres de Workload Identity para Google Distributed Cloud connected. 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 permitir que tus cargas de trabajo accedan a los Google Cloud recursos de forma segura. Las credenciales de corta duración son tokens de acceso de OAuth 2.0. De forma predeterminada, los tokens de acceso vencen después de 1 hora.
Con la autenticación de clústeres de Workload Identity, tus cargas de trabajo pueden usar su propia identidad de Kubernetes para acceder Google Cloud a los recursos directamente o suplantar una cuenta de servicio de Google.
La autenticación de clústeres de Workload Identity proporciona dos beneficios principales en comparación con el uso de claves de cuenta de servicio:
Seguridad mejorada: 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 la federación de identidades para cargas de trabajo se consideran alternativas de prácticas recomendadas a las claves de cuenta de servicio. Para obtener más información sobre los tokens de cuenta de servicio, consulta Credenciales de cuenta de servicio de corta duración. Para obtener más información sobre la federación de identidades para cargas de trabajo, consulta Federación de identidades para cargas de trabajo.
Mantenimiento reducido: Las claves de cuenta de servicio requieren más mantenimiento. Rotar y proteger estas claves con regularidad puede crear una carga administrativa.
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 Google Cloud el contenido, consulta Roles y tareas comunes de los usuarios de GKE.
Administración de clústeres
En esta guía, se aborda la federación de identidades para cargas de trabajo para tus aplicaciones. La federación de identidades para cargas de trabajo a nivel del clúster se administra automáticamente para los clústeres de Distributed Cloud connected.
Google crea y administra los clústeres de Distributed Cloud connected a través de la
API de Distributed Cloud Edge Container,
ya sea con el
gcloud edge-cloud container clusters create
comando o en la Google Cloud consola.
Los clústeres de Distributed Cloud connected se registran automáticamente en una flota en el proyecto en el que se crean. No es necesario realizar ningún registro manual de la flota. El grupo de federación de identidades para cargas de trabajo está disponible automáticamente y
sigue el formato PROJECT_ID.svc.id.goog.
Antes de comenzar
Antes de configurar la federación de identidades para cargas de trabajo, verifica que las siguientes APIs en tu Google Cloud proyecto estén habilitadas. Para obtener información sobre cómo habilitar las APIs, consulta Habilita servicios:
iam.googleapis.comsts.googleapis.comiamcredentials.googleapis.comgkehub.googleapis.com
Asegúrate de tener instaladas las siguientes herramientas de línea de comandos:
- La versión más reciente de la Google Cloud CLI, que
incluye
gcloud, la herramienta de línea de comandos para interactuar con Google Cloud. kubectl
Si usas Cloud Shell como entorno de shell para interactuar con Google Cloud, estas herramientas están instaladas.
- La versión más reciente de la Google Cloud CLI, que
incluye
Asegúrate de haber inicializado la gcloud CLI para usarla en tu proyecto.
Asegúrate de tener los siguientes roles de IAM en el proyecto. Estos roles son necesarios para realizar la configuración:
- Propietario (
roles/owner) o - Administrador de seguridad de IAM (
roles/iam.securityAdmin) y administrador de cuentas de servicio (roles/iam.serviceAccountAdmin)
- Propietario (
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.
Recomendado: Acceso directo a los recursos de la federación de identidades para cargas de trabajo
Con el acceso directo a los recursos de la federación de identidades para cargas de trabajo, usas la federación de identidades para cargas de trabajo para otorgar un rol de IAM a una ServiceAccount de Kubernetes de modo que pueda acceder directamente a los Google Cloudrecursos.
| Identidad | Objetivo | Funciones |
|---|---|---|
| Cuenta de servicio de Kubernetes |
La identidad de Kubernetes que usa tu carga de trabajo. Otorga a esta identidad los
roles necesarios para acceder a los recursos requeridos Google Cloud . En este ejemplo, se otorgan el rol roles/storage.objectViewer y el rol roles/logging.admin.
|
roles/storage.objectViewerroles/logging.admin |
Alternativa: Suplantación de identidad temporal como cuenta de servicio de IAM
Como alternativa, puedes configurar tu ServiceAccount de Kubernetes para que use la identidad temporal como cuenta de servicio de IAM.
| Cuenta de servicio | Objetivo | Funciones |
|---|---|---|
| Cuenta de servicio de Google | La cuenta de servicio de Google que suplanta tu carga de trabajo en el clúster. Otorga a esta cuenta de servicio los roles necesarios para acceder a los recursos requeridos Google Cloud | Depende de los recursos a los que se accede. |
| Cuenta de servicio de Kubernetes |
Otorga a esta identidad la capacidad de suplantar la cuenta de servicio de Google.
Esta concesión usa el rol roles/iam.workloadIdentityUser.
|
roles/iam.workloadIdentityUser
|
Configura cuentas de servicio
En las siguientes secciones, se incluyen instrucciones para crear la ServiceAccount de Kubernetes requerida y otorgarle los roles necesarios para la autenticación de clústeres de Workload Identity con el acceso directo a los recursos de la federación de identidades para cargas de trabajo o la suplantación de la identidad de la cuenta de servicio de Google.
Crea una ServiceAccount de Kubernetes
En tu clúster, usa el
kubectl create
comando para crear una ServiceAccount de Kubernetes para tus pods. También puedes usar cualquier ServiceAccount existente, incluida la ServiceAccount predeterminada en el espacio de nombres.
kubectl create serviceaccount KSA_NAME --namespace NAMESPACE
Reemplaza los siguientes valores:
KSA_NAME: Un nombre para tu ServiceAccount de KubernetesNAMESPACE: El espacio de nombres de tu clúster
Usa la federación de identidades para cargas de trabajo para otorgar acceso directo a los recursos
Para otorgar roles de Identity and Access Management directamente a la identidad de tu ServiceAccount de Kubernetes, sigue estos pasos.
Usa el comando gcloud projects describe para encontrar el número de tu proyecto:
gcloud projects describe PROJECT_ID --format="value(projectNumber)"Reemplaza
PROJECT_IDpor el ID de tu proyecto.Usa el comando gcloud projects add-iam-policy-binding para otorgar los roles necesarios al principal de identidad de Kubernetes:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="principal://iam.gserviceaccount.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \ --role=roles/storage.objectViewer gcloud projects add-iam-policy-binding PROJECT_ID \ --member="principal://iam.gserviceaccount.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \ --role=roles/logging.adminReemplaza los siguientes valores:
PROJECT_NUMBER: El número de tu proyectoNAMESPACE: El espacio de nombres de tu clústerKSA_NAME: El nombre de tu ServiceAccount de Kubernetes
Alternativa: Usa la suplantación de la identidad de la cuenta de servicio de IAM para otorgar acceso
Si prefieres que tus cargas de trabajo suplanten una cuenta de servicio de Google, sigue estos pasos.
Usa el comando gcloud iam service-accounts create para crear una cuenta de servicio de Google:
gcloud iam service-accounts create my-app-sa \ --project=PROJECT_IDReemplaza
PROJECT_IDpor el ID de tu proyecto.Usa el comando gcloud projects add-iam-policy-binding para otorgar a la cuenta de servicio de Google los roles necesarios:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:my-app-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/storage.objectViewer gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:my-app-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/logging.adminUsa el comando gcloud iam service-accounts add-iam-policy-binding para otorgar a la ServiceAccount de Kubernetes la capacidad de usar la identidad de la cuenta de servicio de Google:
gcloud iam service-accounts add-iam-policy-binding my-app-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.workloadIdentityUser \ --member="serviceAccount:PROJECT_ID.svc.id.goog[NAMESPACE/KSA_NAME]"Reemplaza los siguientes valores:
NAMESPACE: El espacio de nombres de tu clústerKSA_NAME: El nombre de tu ServiceAccount de Kubernetes
Usa el comando kubectl annotate para anotar la ServiceAccount de Kubernetes y vincularla a la cuenta de servicio de Google:
kubectl annotate serviceaccount \ --namespace NAMESPACE KSA_NAME \ iam.gke.io/gcp-service-account=my-app-sa@PROJECT_ID.iam.gserviceaccount.com
Configura la carga de trabajo
Actualiza la especificación del Pod para usar la ServiceAccount de Kubernetes y activar el volumen de token proyectado. Debido a que los clústeres de Distributed Cloud connected están fuera de
Google Cloud, también debes proporcionar un archivo de configuración de credenciales y configurar la
GOOGLE_APPLICATION_CREDENTIALS variable de entorno para que apunte a ese archivo.
Google Cloud Las bibliotecas cliente dentro del pod usan estos para intercambiar el
token de Kubernetes por un token de acceso a través de la API de Security Token Service. Google Cloud
Genera el archivo
credential-configuration.json. Elige el comando según si usas el acceso directo a los recursos de la federación de identidades para cargas de trabajo o la identidad temporal como cuenta de servicio de IAM.Acceso directo a los recursos de la federación de identidades para cargas de trabajo
Usa el comando gcloud iam workload-identity-pools create-cred-config:
gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/providers/attestor \ --credential-source-file=/var/run/secrets/tokens/gcp-ksa/token \ --credential-source-type=text \ --output-file=credential-configuration.jsonUsa la suplantación de la identidad de la cuenta de servicio de IAM para otorgar acceso
Usa el comando gcloud iam workload-identity-pools create-cred-config:
gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/providers/attestor \ --service-account=my-app-sa@PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/secrets/tokens/gcp-ksa/token \ --credential-source-type=text \ --output-file=credential-configuration.jsonReemplaza
PROJECT_NUMBERpor el número de tu proyecto. Google Cloud Para encontrar el número del proyecto, ejecutagcloud projects describe PROJECT_ID --format="value(projectNumber)".Usa el
kubectl create configmapcomando para crear unConfigMapde Kubernetes para almacenar el archivo de configuración:kubectl create configmap CREDENTIAL_CONFIG_MAP \ --namespace NAMESPACE \ --from-file=credential-configuration.jsonReemplaza los siguientes valores:
CREDENTIAL_CONFIG_MAP: Un nombre para tuConfigMap, que contiene tu archivo de configuración de credencialesNAMESPACE: El espacio de nombres de tu clúster
Actualiza la especificación de tu Pod con el siguiente contenido de YAML:
spec: serviceAccountName: KSA_NAME containers: - name: MY_CONTAINER image: MY_IMAGE env: - name: GOOGLE_APPLICATION_CREDENTIALS value: /var/run/secrets/tokens/gcp-creds/credential-configuration.json volumeMounts: - mountPath: /var/run/secrets/tokens/gcp-ksa name: gcp-ksa - mountPath: /var/run/secrets/tokens/gcp-creds name: gcp-creds readOnly: true volumes: - name: gcp-ksa projected: defaultMode: 0420 sources: - serviceAccountToken: path: token audience: PROJECT_ID.svc.id.goog expirationSeconds: 3600 - name: gcp-creds configMap: name: CREDENTIAL_CONFIG_MAPReemplaza los siguientes valores:
KSA_NAME: Un nombre para tu ServiceAccount de KubernetesMY_CONTAINER: El nombre de tu contenedorMY_IMAGE: El nombre de tu imagen
Limitaciones
Las siguientes funciones y capacidades no son compatibles cuando usas la federación de identidades para cargas de trabajo para Distributed Cloud connected:
- Usa un servidor proxy para el proceso de intercambio de tokens.
Para obtener información sobre el uso de la federación de identidades para cargas de trabajo con los Controles del servicio de VPC, consulta Configura la integración de los Controles del servicio de VPC.
¿Qué sigue?
- Implementa cargas de trabajo en Distributed Cloud connected
- Administra servicios
- Aplica prácticas recomendadas de seguridad