En esta guía se describe cómo usar la federación de identidades de carga de trabajo con certificados X.509 emitidos por tu autoridad de certificación (CA) para autenticarte y acceder a recursos de Trusted Cloud Trusted Cloud .
Si tus cargas de trabajo tienen un certificado de cliente mTLS, puedes autenticarte enTrusted Cloud registrando una o varias CAs en la federación de Workload Identity como anclas de confianza. También puedes registrar CAs intermedias.
Si usas la federación de identidades de cargas de trabajo, puedes permitir que estas cargas de trabajo obtengan credenciales de corta duración a través de una conexión TLS mutua (mTLS). Trusted Cloud Las cargas de trabajo pueden usar estas credenciales de corta duración para acceder a las APIs deTrusted Cloud .
Conceptos
Los conceptos de federación basados en certificados X.509 incluyen lo siguiente:
Una ancla de confianza es un certificado de CA que se considera la raíz de confianza. Las cadenas de certificados de cliente deben estar encadenadas a una de las anclas de confianza.
Una CA intermedia es un certificado de autoridad de certificación opcional que ayuda a crear la cadena de certificados de cliente.
Un almacén de confianza contiene los certificados de ancla de confianza y los certificados de AC intermedios que se usan para validar la cadena de certificados de cliente. Una CA emite certificados de confianza para el cliente.
Puede subir los siguientes tipos de certificados de cliente al almacén de confianza:
- Certificados emitidos por ACs de terceros de tu elección
- Certificados emitidos por tus AC privadas
- Certificados firmados, tal como se describe en Crear certificados autofirmados
Antes de empezar
Para empezar a configurar la federación de identidades de cargas de trabajo, haz lo siguiente:
-
In the Trusted Cloud console, on the project selector page, select or create a Trusted Cloud project.
Te recomendamos que
uses un proyecto específico para gestionar los grupos y proveedores de Workload Identity.
-
Verify that billing is enabled for your Trusted Cloud project.
-
Enable the IAM, Resource Manager, Service Account Credentials, and Security Token Service APIs.
Roles obligatorios
Para obtener los permisos que necesitas para configurar la federación de identidades de carga de trabajo, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y acceso en el proyecto:
-
Administrador de grupos de Workload Identity (
roles/iam.workloadIdentityPoolAdmin
) -
Administrador de cuentas de servicio (
roles/iam.serviceAccountAdmin
)
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.
También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.
También puedes usar el rol básico Propietario de IAM (roles/owner
), que incluye permisos para configurar la federación de identidades.
No debes conceder roles básicos en un entorno de producción, pero sí puedes hacerlo en un entorno de desarrollo o de pruebas.
Crear un almacén de confianza
En esta sección se explica cómo crear un almacén de confianza. Estos son los pasos que debe seguir para hacerlo:
Generar certificados autofirmados
En esta sección se explica cómo generar claves y crear certificados firmados. Si ya has creado certificados, puedes saltarte esta sección y continuar con Dar formato a los certificados.
En esta sección se usan comandos de openssl
para crear certificados raíz e intermedios.
Para generar un certificado raíz y un certificado intermedio firmado con campos keyUsage
y extendedKeyUsage
válidos, haz lo siguiente:
Crea un archivo de configuración
openssl
para crear tus certificados de firma. Como mínimo, el archivo será similar al siguiente, pero puedes definir campos adicionales según sea necesario.cat > example.cnf << EOF [req] distinguished_name = empty_distinguished_name [empty_distinguished_name] # Kept empty to allow setting via -subj command-line argument. [ca_exts] basicConstraints=critical,CA:TRUE keyUsage=keyCertSign extendedKeyUsage=clientAuth [leaf_exts] keyUsage=critical,Digital Signature, Key Encipherment basicConstraints=critical, CA:FALSE EOF
Crea el certificado raíz.
openssl req -x509 \ -new -sha256 -newkey rsa:2048 -nodes \ -days 3650 -subj '/CN=root' \ -config example.cnf \ -extensions ca_exts \ -keyout root.key -out root.cert
Crea la solicitud de firma del certificado intermedio.
openssl req \ -new -sha256 -newkey rsa:2048 -nodes \ -subj '/CN=int' \ -config example.cnf \ -extensions ca_exts \ -keyout int.key -out int.req
Crea el certificado intermedio.
openssl x509 -req \ -CAkey root.key -CA root.cert \ -set_serial 1 \ -days 3650 \ -extfile example.cnf \ -extensions ca_exts \ -in int.req -out int.cert
Crea la solicitud de firma del certificado de hoja.
openssl req -new -sha256 -newkey rsa:2048 -nodes \ -subj '/CN=example' \ -config example.cnf \ -extensions leaf_exts \ -keyout leaf.key -out leaf.req
Crea el certificado de hoja emitido por el intermedio.
openssl x509 -req \ -CAkey int.key -CA int.cert \ -set_serial 1 -days 3650 \ -extfile example.cnf \ -extensions leaf_exts \ -in leaf.req -out leaf.cert
Dar formato a los certificados
Para incluir certificados nuevos o ya existentes en un almacén de confianza, formatea los certificados en una cadena de una línea y guárdalos en variables de entorno. Los certificados deben estar en formato PEM. Para dar formato a los certificados y almacenarlos en variables de entorno, haz lo siguiente:
Guarda el certificado raíz como una cadena de una línea.
export ROOT_CERT=$(cat root.cert | sed 's/^[ ]*//g' | sed -z '$ s/\n$//' | tr '\n' $ | sed 's/\$/\\n/g')
Guarda un certificado intermedio como una cadena de una línea.
export INTERMEDIATE_CERT=$(cat int.cert | sed 's/^[ ]*//g' | sed -z '$ s/\n$//' | tr '\n' $ | sed 's/\$/\\n/g')
Crear el almacén de confianza
En esta sección, creará un almacén de confianza mediante un archivo con formato YAML que contenga sus anclas de confianza y sus CAs intermedias.
Este archivo contiene el contenido del certificado de las variables de entorno que has creado en Formatear los certificados. Para añadir anclas de confianza adicionales, añade entradas trustAnchors
adicionales en trustStore
.
Para añadir más certificados de AC intermedios, añade más entradas intermediateCas
en trustStore
.
Para crear el archivo del almacén de confianza, ejecuta el siguiente comando:
cat << EOF > trust_store.yaml
trustStore:
trustAnchors:
- pemCertificate: "${ROOT_CERT}"
intermediateCas:
- pemCertificate: "${INTERMEDIATE_CERT}"
EOF
Definir una asignación de atributos y una condición
El certificado X.509 de cliente puede contener varios atributos.
Debe seleccionar el atributo que quiera usar como identificador del sujeto asignando google.subject
in Trusted Cloud al atributo de su certificado.
Por ejemplo, si el atributo del certificado es el nombre común del asunto, la asignación sería la siguiente:
google.subject=assertion.subject.dn.cn
Si quiere, puede mapear atributos adicionales. Después, puedes hacer referencia a estos atributos al conceder acceso a los recursos.
Tus asignaciones de atributos pueden usar los atributos del certificado de cliente, incluidos los siguientes:
serialNumberHex
: el número de seriesubject.dn.cn
: el nombre común del asuntosubject.dn.o
: el nombre de la organización en cuestiónsubject.dn.ou
: la última unidad organizativa del asuntoissuer.dn.cn
: el nombre común del emisorissuer.dn.o
: el nombre de la organización emisoraissuer.dn.ou
: la última unidad organizativa de la entidad emisorasan.dns
: el primer nombre de DNS del nombre alternativo del sujetosan.uri
: la primera URI del nombre alternativo del sujetosha256Fingerprint
: hash SHA256 del certificado de hoja (Base64)
Debe asignar uno de estos atributos a google.subject
para identificar de forma única al sujeto. Para protegerte frente a las amenazas de suplantación de identidad, elige un atributo con un valor único que no se pueda cambiar. De forma predeterminada, el identificador google.subject
se asigna al nombre común del asunto del certificado de cliente, assertion.subject.dn.cn
.
También puedes definir una condición de atributo.
Las condiciones de los atributos son expresiones CEL que pueden comprobar los atributos de aserción y los atributos de destino. Si el atributo de condición se evalúa como true
para una credencial determinada, se acepta la credencial. De lo contrario, se rechaza la credencial.
Puedes usar una condición de atributo para restringir qué sujetos pueden usar la federación de identidades de cargas de trabajo para obtener tokens de corta duración. Trusted Cloud
Por ejemplo, la siguiente condición restringe el acceso a los certificados de cliente que contengan el ID de SPIFFE spiffe://example/path
:
assertion.san.uri=="spiffe://example/path"
Configurar la federación de identidades de cargas de trabajo
En esta sección se explica cómo configurar un grupo de identidades de carga de trabajo y un proveedor de grupos de identidades de carga de trabajo. Solo tiene que seguir estos pasos una vez por cada almacén de confianza. Después, puede usar el mismo grupo y proveedor de identidades de carga de trabajo en varias cargas de trabajo y en varios proyectos Trusted Cloud .
Crear el grupo de identidades de carga de trabajo
Para crear un grupo de identidades de carga de trabajo, ejecuta el siguiente comando:
gcloud iam workload-identity-pools create POOL_ID \ --location="global" \ --description="DESCRIPTION" \ --display-name="DISPLAY_NAME"
Haz los cambios siguientes:
POOL_ID
: ID único del grupo.DISPLAY_NAME
: el nombre del grupo.DESCRIPTION
: una descripción de la piscina que elijas. Esta descripción aparece cuando concedes acceso a identidades de grupo.
Crear el proveedor de grupos de identidades de carga de trabajo
Para añadir un proveedor de grupos de identidades de carga de trabajo X.509, ejecuta el siguiente comando:
gcloud iam workload-identity-pools providers create-x509 PROVIDER_ID \ --location=global \ --workload-identity-pool="POOL_ID" \ --trust-store-config-path="TRUST_STORE_CONFIG" \ --attribute-mapping="MAPPINGS" \ --attribute-condition="CONDITIONS"
Haz los cambios siguientes:
PROVIDER_ID
: ID único del proveedor de grupos de identidades de carga de trabajo que elijas.POOL_ID
: el ID del grupo de identidades de carga de trabajo que has creado anteriormente.TRUST_STORE_CONFIG
: el archivo YAML del almacén de confianza.MAPPINGS
: lista separada por comas de asignaciones de atributos que has creado anteriormente en esta guía. Por ejemplo,google.subject=assertion.subject.dn.cn
.CONDITIONS
: opcional. Una condición de atributo que has creado anteriormente en esta guía. Quita el parámetro si no tienes una condición de atributo.
Autenticar una carga de trabajo
Debes seguir estos pasos una vez por cada carga de trabajo.
Permitir que tu carga de trabajo externa acceda a los recursos de Trusted Cloud
Para proporcionar a tu carga de trabajo acceso a los recursos de Trusted Cloud , te recomendamos que concedas acceso directo a los recursos a la entidad principal. En este caso, el principal es el usuario federado. Algunos Trusted Cloud productos tienen limitaciones en la API de Google Cloud. Si tu carga de trabajo llama a un endpoint de API que tiene una limitación, puedes usar la suplantación de identidad de la cuenta de servicio. En este caso, el principal es laTrusted Cloud cuenta de servicio, que actúa como identidad. Concede acceso a la cuenta de servicio en el recurso.
Acceso directo a recursos
Puedes conceder acceso a una identidad federada directamente a los recursos mediante la Trusted Cloud consola o la CLI de gcloud.
Consola
Para usar la Trusted Cloud consola y asignar roles de gestión de identidades y accesos directamente a un recurso, debes ir a la página del recurso y, a continuación, asignar el rol. En el siguiente ejemplo se muestra cómo ir a la página de Cloud Storage y asignar el rol Lector de objetos de Storage (roles/storage.objectViewer
) a una identidad federada directamente en un segmento de Cloud Storage.
- En la Trusted Cloud consola, ve a la página Segmentos de Cloud Storage.
En la lista de segmentos, haga clic en el nombre del segmento al que quiera conceder el rol.
Seleccione la pestaña Permisos, situada cerca de la parte superior de la página.
Haz clic en el botón add_box Conceder acceso.
Aparecerá el cuadro de diálogo Añadir principales.
En el campo Nuevos principales, introduzca una o varias identidades que necesiten acceder a su contenedor.
Por tema
principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT
Haz los cambios siguientes:
PROJECT_NUMBER
: el número del proyectoPOOL_ID
: el ID del grupo de cargas de trabajoSUBJECT
: el asunto individual asignado desde tu proveedor de identidades. Por ejemplo:administrator@example.com
Por grupo
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP
Haz los cambios siguientes:
PROJECT_NUMBER
: el número del proyectoWORKLOAD_POOL_ID
: el ID del grupo de cargas de trabajoGROUP
: el grupo asignado de tu proveedor de identidades. Por ejemplo:administrator-group@example.com
Por atributo
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE
Haz los cambios siguientes:
PROJECT_NUMBER
: el número del proyectoWORKLOAD_POOL_ID
: el ID del grupo de cargas de trabajoATTRIBUTE_NAME
: uno de los atributos que se ha asignado desde tu proveedor de identidadesATTRIBUTE_VALUE
: el valor del atributo
Selecciona uno o varios roles en el menú desplegable Selecciona un rol. Los roles que selecciones aparecerán en el panel con una breve descripción de los permisos que conceden.
Haz clic en Guardar.
gcloud
Para usar la CLI de gcloud y asignar roles de IAM en un recurso de un proyecto, haz lo siguiente:
Obtén el número del proyecto en el que se define el recurso.
gcloud projects describe $(gcloud config get-value core/project) --format=value\(projectNumber\)
Concede acceso al recurso.
Para usar la CLI de gcloud y asignar el rol Lector de objetos de Storage (
roles/storage.objectViewer
) a identidades externas que cumplan determinados criterios, ejecuta el siguiente comando.Por tema
gcloud storage buckets add-iam-policy-binding BUCKET_ID \ --role=roles/storage.objectViewer \ --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT"
Por grupo
gcloud storage buckets add-iam-policy-binding BUCKET_ID \ --role=roles/storage.objectViewer \ --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP"
Por atributo
gcloud storage buckets add-iam-policy-binding BUCKET_ID \ --role=roles/storage.objectViewer \ --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE"
Haz los cambios siguientes:
BUCKET_ID
: el contenedor al que se va a conceder accesoPROJECT_NUMBER
: el número de proyecto del proyecto que contiene el grupo de identidades de carga de trabajo.POOL_ID
: el ID del grupo de identidades de carga de trabajoSUBJECT
: el valor esperado del atributo que has asignado agoogle.subject
GROUP
: el valor esperado del atributo que has asignado agoogle.groups
ATTRIBUTE_NAME
: el nombre de un atributo personalizado en tu asignación de atributosATTRIBUTE_VALUE
: el valor del atributo personalizado en tu asignación de atributos
Puedes conceder roles en cualquier Trusted Cloud recurso que admita políticas de permiso de gestión de identidades y accesos.
Suplantación de identidad de cuentas de servicio
Para crear una cuenta de servicio para la carga de trabajo externa, sigue estos pasos:
-
Enable the IAM, Security Token Service, and Service Account Credentials APIs.
Crea una cuenta de servicio que represente la carga de trabajo. Te recomendamos que utilices una cuenta de servicio específica para cada carga de trabajo. La cuenta de servicio no tiene que estar en el mismo proyecto que el grupo de identidades de carga de trabajo, pero debes hacer referencia al proyecto que contiene la cuenta de servicio.
Concede acceso a la cuenta de servicio a los recursos a los que quieras que accedan las identidades externas.
Para permitir que la identidad federada suplante la cuenta de servicio, haz lo siguiente:
Consola
Para usar la Trusted Cloud consola y conceder roles de gestión de identidades y accesos a una identidad federada con una cuenta de servicio, sigue estos pasos:
Cuenta de servicio en el mismo proyecto
Para conceder acceso mediante la suplantación de identidad de una cuenta de servicio en el mismo proyecto, sigue estos pasos:
Ve a la página Grupos de Workload Identity.
Selecciona Conceder acceso.
En el cuadro de diálogo Grant access to service account (Conceder acceso a la cuenta de servicio), selecciona Grant access using Service Account impersonation (Conceder acceso mediante la suplantación de la cuenta de servicio).
En la lista Cuentas de servicio, selecciona la cuenta de servicio que las identidades externas deben suplantar y haz lo siguiente:
Para elegir qué identidades del grupo pueden suplantar la identidad de la cuenta de servicio, realiza una de las siguientes acciones:
Para permitir que solo determinadas identidades del grupo de identidades de carga de trabajo suplanten la identidad de la cuenta de servicio, seleccione Solo las identidades que coincidan con el filtro.
En la lista Nombre del atributo, seleccione el atributo por el que quiera filtrar.
En el campo Valor del atributo, introduzca el valor esperado del atributo. Por ejemplo, si utiliza una asignación de atributos
google.subject=assertion.sub
, defina el nombre del atributo comosubject
y el valor del atributo como el valor de la reclamaciónsub
en los tokens emitidos por su proveedor de identidades externo.
Para guardar la configuración, haz clic en Guardar y, a continuación, en Cerrar.
Cuenta de servicio en otro proyecto
Para conceder acceso mediante la suplantación de identidad de una cuenta de servicio en otro proyecto, sigue estos pasos:
Ve a la página Cuentas de servicio.
Selecciona la cuenta de servicio que quieras suplantar.
Haz clic en Gestionar acceso.
Haz clic en Añadir principal.
En el campo Nuevo principal, introduce uno de los siguientes identificadores principales de las identidades de tu grupo que suplantarán la cuenta de servicio.
Por tema
principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT
Haz los cambios siguientes:
PROJECT_NUMBER
: el número del proyectoPOOL_ID
: el ID del grupo de cargas de trabajoSUBJECT
: el asunto individual asignado desde tu proveedor de identidades. Por ejemplo:administrator@example.com
Por grupo
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP
Haz los cambios siguientes:
PROJECT_NUMBER
: el número del proyectoWORKLOAD_POOL_ID
: el ID del grupo de cargas de trabajoGROUP
: el grupo asignado de tu proveedor de identidades. Por ejemplo:administrator-group@example.com
Por atributo
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE
Haz los cambios siguientes:
PROJECT_NUMBER
: el número del proyectoWORKLOAD_POOL_ID
: el ID del grupo de cargas de trabajoATTRIBUTE_NAME
: uno de los atributos que se ha asignado desde tu proveedor de identidadesATTRIBUTE_VALUE
: el valor del atributo
Por piscina
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*
Haz los cambios siguientes:
PROJECT_NUMBER
: el número del proyectoWORKLOAD_POOL_ID
: el ID del grupo de cargas de trabajo
En Selecciona un rol, selecciona el rol Usuario de Workload Identity (
roles/iam.workloadIdentityUser
).Para guardar la configuración, haz clic en Guardar.
gcloud
Para conceder el rol de usuario de identidad de carga de trabajo (roles/iam.workloadIdentityUser
) a un principal federado o a un conjunto de principales, ejecuta el siguiente comando. Para obtener más información sobre los identificadores principales de la federación de identidades de cargas de trabajo, consulta Tipos de principales.
Por tema
gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \ --role=roles/iam.workloadIdentityUser \ --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT"
Por grupo
gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \ --role=roles/iam.workloadIdentityUser \ --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP"
Por atributo
gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \ --role=roles/iam.workloadIdentityUser \ --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE"
Haz los cambios siguientes:
SERVICE_ACCOUNT_EMAIL
: la dirección de correo de la cuenta de servicioPROJECT_NUMBER
: el número de proyecto del proyecto que contiene el grupo de identidades de carga de trabajo.POOL_ID
: el ID del grupo de identidades de carga de trabajoSUBJECT
: el valor esperado del atributo que has asignado agoogle.subject
GROUP
: el valor esperado del atributo que has asignado agoogle.groups
ATTRIBUTE_NAME
: el nombre de un atributo personalizado en tu asignación de atributosATTRIBUTE_VALUE
: el valor del atributo personalizado en tu asignación de atributos
Descargar o crear una configuración de credenciales
Las bibliotecas de cliente de Cloud y la CLI de gcloud pueden obtener automáticamente credenciales externas y usarlas para suplantar la identidad de una cuenta de servicio. Para que las bibliotecas y las herramientas puedan completar este proceso, debes proporcionar un archivo de configuración de credenciales. Este archivo proporciona la siguiente información:
- Dónde obtener las credenciales externas
- Qué grupo y proveedor de identidades de carga de trabajo se deben usar
- Cuenta de servicio cuya identidad se va a usar
Además, para la federación de certificados X.509, se necesita un archivo de configuración de certificados. Este archivo contiene las rutas al certificado de cliente X.509 y a los archivos de clave privada.
Crea archivos de configuración de credenciales y certificados que permitan a la biblioteca obtener tokens de acceso mediante certificados X.509.
Acceso directo a recursos
Para crear archivos de configuración de credenciales y certificados para el acceso directo a recursos mediante gcloud iam workload-identity-pools create-cred-config
, sigue estos pasos:
gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID \ --credential-cert-path=CLIENT_CERT_PATH \ --credential-cert-private-key-path=CLIENT_PRIVATE_KEY_PATH \ --credential-cert-trust-chain-path=TRUST_CHAIN_PATH \ --output-file=FILEPATH.json
Haz los cambios siguientes:
PROJECT_NUMBER
: el número del proyecto que contiene el grupo de identidades de carga de trabajo.POOL_ID
: ID del grupo de identidades de carga de trabajo.PROVIDER_ID
: el ID del proveedor de grupos de identidades de carga de trabajo.CLIENT_CERT_PATH
: ruta del archivo de certificado del cliente.CLIENT_PRIVATE_KEY_PATH
: la ruta del archivo de clave privada del certificado de cliente.TRUST_CHAIN_PATH
: opcional. Ruta del archivo de cadena de confianza que contiene los certificados intermedios que no están configurados en el proveedor x509.FILEPATH
: el archivo en el que se guardará la configuración.
Al ejecutar este comando, también se creará un archivo de configuración de certificado y se almacenará en la ubicación predeterminada de la CLI de gcloud:
Linux y macOS:
~/.config/gcloud/certificate_config.json
Windows:
%APPDATA%\gcloud\certificate_config.json
Suplantación de identidad de cuentas de servicio
Para crear archivos de configuración de credenciales y certificados con la suplantación de identidad de la cuenta de servicio mediante gcloud iam workload-identity-pools create-cred-config
, sigue estos pasos:
gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID \ --service-account=SERVICE_ACCOUNT_EMAIL \ --service-account-token-lifetime-seconds=SERVICE_ACCOUNT_TOKEN_LIFETIME \ --credential-cert-path=CLIENT_CERT_PATH \ --credential-cert-private-key-path=CLIENT_KEY_PATH \ --credential-cert-trust-chain-path=TRUST_CHAIN_PATH \ --output-file=FILEPATH.json
Haz los cambios siguientes:
PROJECT_NUMBER
: el número del proyecto que contiene el grupo de identidades de carga de trabajo.POOL_ID
: ID del grupo de identidades de carga de trabajo.PROVIDER_ID
: el ID del proveedor de grupos de identidades de carga de trabajo.SERVICE_ACCOUNT_EMAIL
: si usas la suplantación de identidad de la cuenta de servicio, sustitúyelo por la dirección de correo de la cuenta de servicio.SERVICE_ACCOUNT_TOKEN_LIFETIME
: el tiempo de vida del token de acceso de la cuenta de servicio, en segundos, si usas la suplantación de identidad de la cuenta de servicio. Si se omite, la duración predeterminada es de una hora. Omite esta marca si no usas la suplantación de identidad de cuentas de servicio. Para especificar un tiempo de vida superior a una hora, debes configurar laconstraints/iam.allowServiceAccountCredentialLifetimeExtension
restricción de la política de organización.CLIENT_CERT_PATH
: ruta del archivo de certificado del cliente.CLIENT_PRIVATE_KEY_PATH
: la ruta del archivo de clave privada del certificado de cliente.TRUST_CHAIN_PATH
: opcional. Ruta del archivo de la cadena de confianza que contiene los certificados intermedios que no se han configurado en el proveedor x509.FILEPATH
: el archivo en el que se guardará la configuración.
Al ejecutar este comando, también se creará un archivo de configuración de certificado y se almacenará en la ubicación predeterminada de la CLI de Google Cloud:
Linux y macOS:
~/.config/gcloud/certificate_config.json
Windows:
%APPDATA%\gcloud\certificate_config.json
Usar la configuración de credenciales para acceder a Trusted Cloud
Para permitir que las herramientas y las bibliotecas de cliente usen tu configuración de credenciales, haz lo siguiente. Para obtener más información sobre las credenciales predeterminadas de la aplicación, consulta Cómo funcionan las credenciales predeterminadas de la aplicación.
Inicializa una variable de entorno
GOOGLE_APPLICATION_CREDENTIALS
y asígnale el archivo de configuración de la credencial:Bash
Sustituyeexport GOOGLE_APPLICATION_CREDENTIALS=`pwd`/FILEPATH.json
FILEPATH
por la ruta relativa al archivo de configuración de las credenciales.PowerShell
Sustituye$env:GOOGLE_APPLICATION_CREDENTIALS = Resolve-Path 'FILEPATH.json'
FILEPATH
por la ruta relativa al archivo de configuración de las credenciales.Asegúrate de que la biblioteca de cliente pueda encontrar el archivo de configuración del certificado. El archivo de configuración del certificado se encuentra en una de las siguientes rutas:
Ruta predeterminada de la CLI de gcloud:
Linux y macOS:
~/.config/gcloud/certificate_config.json
Windows:
%APPDATA%\gcloud\certificate_config.json
La ruta definida en la variable de entorno
GOOGLE_API_CERTIFICATE_CONFIG
.
Usa las siguientes bibliotecas de cliente de Cloud que admiten la federación de identidades de carga de trabajo con certificados X.509.
Go
Las bibliotecas de cliente de Go admiten la federación de identidades de carga de trabajo X.509 si usan la versión 0.16.0 o posterior del módulo
cloud.google.com/go/auth
y la versión 0.189.0 del módulogoogle.golang.org/api
.Para comprobar qué versión de estos módulos usa tu biblioteca de cliente, ejecuta el siguiente comando en el directorio que contiene el archivo go.mod de tu módulo:
go list -m cloud.google.com/go/auth go list -m cloud.google.com/api
Python
Las bibliotecas de cliente de Python admiten la federación de identidades de carga de trabajo X.509 si usan la versión 2.39.0 o posterior del paquete
google-auth
.Para comprobar qué versión de este paquete usa tu biblioteca de cliente, ejecuta el siguiente comando en el entorno en el que está instalado el paquete:
pip show google-auth
Para especificar un ID de proyecto para el cliente de autenticación, puedes definir la variable de entorno
GOOGLE_CLOUD_PROJECT
o permitir que el cliente busque el ID de proyecto automáticamente. Para encontrar el ID de proyecto automáticamente, la cuenta de servicio del archivo de configuración debe tener el rol de navegador (roles/browser
) o un rol con permisos equivalentes en tu proyecto. Para obtener más información, consulta la guía de usuario del paquetegoogle-auth
.Si tu carga de trabajo se ejecuta en macOS, define
CLOUDSDK_PYTHON_SITEPACKAGES=1
para configurar la CLI de gcloud de forma que use bibliotecas de Python fuera de su directorio de instalación.Para autenticarte con gcloud CLI, ejecuta el siguiente comando:
gcloud auth login --cred-file=FILEPATH.json
Sustituye
FILEPATH
por la ruta del archivo de configuración de credenciales.La compatibilidad con la federación de identidades de carga de trabajo X.509 en la CLI de gcloud está disponible en la versión 519.0 y en versiones posteriores de la CLI de gcloud.
Obtener un token de acceso mediante una solicitud simple para acceder a Trusted Cloud
Crear la cadena de confianza
En este paso se explica cómo crear la cadena de confianza. Cuando llamas al servicio de tokens de seguridad en una solicitud sin cifrar, pasas la cadena de confianza en el campo subject_token
.
Da formato a los certificados que deban incluirse en la cadena como una lista en formato JSON, tal como se especifica en el RFC 7515. El certificado de hoja que se usa para el handshake mTLS debe especificarse como el primer elemento. Cada certificado del paquete debe ser una cadena codificada en Base64.
Guarda el certificado de hoja y el certificado intermedio en cadenas codificadas en Base64.
export LEAF_CERT=$(openssl x509 -in leaf.cert -out leaf.der -outform DER && cat leaf.der | openssl enc -base64 -A)
export INTERMEDIATE_CERT=$(openssl x509 -in int.cert -out int.der -outform DER && cat int.der | openssl enc -base64 -A)
Crea una lista de cadenas con formato JSON que se pueda transferir como
subject_token
en la llamada al servicio de token de seguridad, más adelante en este documento.export TRUST_CHAIN="[\\\"${LEAF_CERT}\\\", \\\"${INTERMEDIATE_CERT}\\\"]"
Obtener un token de acceso
Para obtener el token de acceso, haz lo siguiente:
Realiza el intercambio de tokens con mTLS y el certificado de cliente:
curl --key CLIENT_CERT_KEY \ --cert CLIENT_CERT \ --request POST 'https://sts.mtls.s3nsapis.fr/v1/token' \ --header "Content-Type: application/json" \ --data-raw '{ "subject_token_type": "urn:ietf:params:oauth:token-type:mtls", "grant_type": "urn:ietf:params:oauth:grant-type:token-exchange", "audience": "WORKLOAD_IDENTITY_POOL_URI", "requested_token_type": "urn:ietf:params:oauth:token-type:access_token", "scope": "https://www.googleapis.com/auth/cloud-platform", "subject_token": "TRUST_CHAIN" }'
Haz los cambios siguientes:
CLIENT_CERT_KEY
: la clave privada del certificado de clienteCLIENT_CERT
: el certificado de clienteWORKLOAD_IDENTITY_POOL_URI
: la URL del proveedor del grupo de identidades de carga de trabajo con el siguiente formato://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID
TRUST_CHAIN
: La cadena de confianza necesaria para verificar el certificado de hoja debe incluir al menosCLIENT_CERT
como primer elemento. Si has seguido las instrucciones de la sección Formatear los certificados, sustituyeTRUST_CHAIN
por'"${TRUST_CHAIN}"'
.
Usa el token de acceso de portador generado en el paso anterior para acceder a los recursos deTrusted Cloud . Por ejemplo:
curl -X GET 'https://storage.s3nsapis.fr/my_object' -H "Authorization: Bearer $ACCESS_TOKEN"
Límites
En la siguiente tabla se indican los límites.
Elemento | Límite | Notas |
---|---|---|
Número de anclas de confianza | 3 | El tamaño de cada certificado no debe superar los 32 KB. |
Número de certificados intermedios | 10 | Cada certificado no debe superar los 32 KB. |
Número de restricciones de nombres permitidas durante la validación de certificados raíz e intermedios | 10 | |
Certificados intermedios que comparten la misma información de asunto y de clave pública del asunto | 5 | Este límite se aplica a cada almacén de confianza. |
Profundidad de la cadena de certificados | 5 | Profundidad máxima de una cadena de certificados, incluidos los certificados raíz y de cliente. |
Número de veces que se pueden evaluar los certificados intermedios al intentar crear la cadena de confianza. | 100 | |
Claves de los certificados subidos y transferidos desde el cliente | Las claves RSA pueden tener entre 2048 y 4096 bits. Los certificados ECDSA deben usar las curvas P-256 o P-384. |
Se recomienda usar RSA-2048 y P-256 en casos prácticos normales. Utiliza otros en caso de que quieras aplicar las mejores prácticas de seguridad. |
Duración máxima del certificado de hoja | 390 días | Se rechazarán los certificados de hoja emitidos con más de 390 días de antigüedad |
Siguientes pasos
- Consulta más información sobre la federación de identidades de cargas de trabajo.
- Consulta las prácticas recomendadas para usar la federación de identidades de cargas de trabajo.
- Consulta cómo puedes gestionar grupos y proveedores de Workload Identity.