Configura la federación de identidades para cargas de trabajo con certificados X.509

En esta guía, se describe cómo usar la federación de identidades para cargas de trabajo con certificados X.509 que emite tu AC para autenticarte en Google Cloud y acceder a sus recursos.

Si tus cargas de trabajo tienen un certificado de cliente mTLS, puedes registrar una o más AC con la federación de identidades para cargas de trabajo como entidades de confianza para autenticarte en Google Cloud. También puedes registrar AC intermedias.

Si usas la federación de identidades para cargas de trabajo, puedes permitir que estas cargas de trabajo obtengan credenciales de Google Cloud de corta duración a través de una conexión TLS mutua (mTLS). Las cargas de trabajo pueden usar estas credenciales de corta duración para acceder a las API de Google Cloud.

Conceptos

Los conceptos de la integración basada en certificados X.509 incluyen los siguientes:

  • Un ancla de confianza es un certificado de AC que se considera la raíz de confianza. Cualquier cadena de certificados de cliente debe estar vinculada a una de las anclas de confianza.

  • Un AC intermedia es un certificado de autoridad certificadora opcional que ayuda a compilar la cadena de certificados del cliente.

  • Un almacén de confianza contiene los certificados del ancla de confianza y los certificados de la AC intermedios que se usan para validar la cadena de certificados de cliente. Una AC emite certificados de confianza para el cliente.

    Puedes subir los siguientes tipos de certificados de cliente al almacén de confianza:

    • Los certificados emitidos por CA de terceros que elijas
    • Certificados emitidos por tus AC privadas
    • Certificados firmados, como se describe en Crea certificados autofirmados

Antes de comenzar

Para comenzar a configurar la federación de Workload Identity, haz lo siguiente:

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Te recomendamos que uses un proyecto dedicado para administrar grupos de identidades para cargas de trabajo y proveedores.
  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the IAM, Resource Manager, Service Account Credentials, and Security Token Service APIs.

    Enable the APIs

Roles obligatorios

A fin de obtener los permisos que necesitas para configurar la federación de identidades para cargas de trabajo, pídele a tu administrador que te otorgue los siguientes roles de IAM en el proyecto:

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.

De manera alternativa, el rol básico de propietario de IAM (roles/owner) también incluye permisos para configurar la federación de identidades. No deberías otorgar funciones básicas en un entorno de producción, pero puedes otorgarlas en un entorno de desarrollo o de prueba.

Configura la federación de Workload Identity

En esta sección, se muestra cómo configurar la federación de identidades para cargas de trabajo y tu almacén de confianza. Solo debes realizar estos pasos una vez para cada almacén de confianza. Luego, puedes usar el mismo grupo de identidades para cargas de trabajo y un proveedor para varias cargas de trabajo y en varios proyectos de Google Cloud.

Crea y configura un almacén de confianza

En esta sección, se muestra cómo crear un archivo de configuración de almacén de confianza de YAML y un certificado de la AC autofirmado.

Genera una clave y certificados firmados

En esta sección, se usan comandos openssl para crear certificados raíz e intermedios.

Si ya tienes certificados, puedes omitir este paso y continuar con Da formato a los certificados.

Para generar un certificado raíz y un certificado intermedio firmado con los campos keyUsage y extendedKeyUsage válidos, haz lo siguiente:

  1. Crea un archivo example.cnf de muestra con la configuración mínima necesaria para crear certificados de firma válidos. Puedes editar este archivo para configurar campos adicionales en estos certificados.

    cat > example.cnf << EOF
    [req]
    distinguished_name = empty_distinguished_name
    [empty_distinguished_name]
    # Kept empty to allow setting via -subj command line arg.
    [ca_exts]
    basicConstraints=critical,CA:TRUE
    keyUsage=keyCertSign
    extendedKeyUsage=clientAuth
    EOF
    
  2. 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
    
  3. Crea la solicitud de firma para el 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
    
  4. 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
    

Da formato a los certificados

Para incluir certificados nuevos o existentes en un almacén de confianza, debes dar formato a los certificados en una sola línea y almacenarlos en variables de entorno para que se puedan leer en el archivo YAML. Los certificados deben estar en formato PEM. Para dar formato a los certificados y almacenarlos en variables de entorno, haz lo siguiente:

  1. Guarda el certificado raíz como una cadena de una sola línea:

    export ROOT_CERT=$(cat root.cert | sed 's/^[ ]*//g' | sed -z '$ s/\n$//' | tr '\n' $ | sed 's/\$/\\n/g')
    
  2. 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')
    

Crea un archivo YAML de almacén de confianza

En esta sección, crearás un archivo YAML de almacén de confianza que contenga tus anclas de confianza y AC intermedias.

Para crear el archivo YAML de almacén de confianza, ejecuta el siguiente comando. Este archivo contiene el contenido del certificado de las variables de entorno que creaste en Da formato a los certificados. Para agregar anclas de confianza adicionales, agrega entradas trustAnchors adicionales en trustStore. Para agregar certificados de la AC intermedios adicionales, agrega entradas intermediateCas adicionales en trustStore.

cat << EOF > trust_store.yaml
trustStore:
  trustAnchors:
  - pemCertificate: "${ROOT_CERT}"
  intermediateCas:
  - pemCertificate: "${INTERMEDIATE_CERT}"
EOF

Define una condición y la asignación de atributos

El certificado X.509 del cliente puede contener varios atributos. Debes seleccionar el atributo que deseas usar como identificador de asunto asignando google.subject en Google Cloud al atributo de tu certificado. Por ejemplo, si el atributo del certificado es el nombre común del sujeto, la asignación sería la siguiente: google.subject=assertion.subject.dn.cn

De manera opcional, puedes mapear atributos adicionales. Luego, puedes hacer referencia a estos atributos adicionales cuando otorgues acceso a los recursos.

Tus asignaciones de atributos pueden usar los atributos dentro del certificado de cliente, incluidos los siguientes:

  • serialNumberHex: Es el número de serie.
  • subject.dn.cn: Es el nombre común del sujeto.
  • subject.dn.o: El nombre de la organización del sujeto.
  • subject.dn.ou: Es la unidad organizativa del sujeto.
  • issuer.dn.cn: Es el nombre común de la entidad emisora.
  • issuer.dn.o: Es el nombre de la organización emisora.
  • issuer.dn.ou: Es la unidad de la organización del emisor.
  • san.dns: Es el primer nombre de DNS del nombre alternativo del sujeto.
  • san.uri: Es el primer URI del nombre alternativo del sujeto.

Debes asignar uno de estos atributos a google.subject para identificar de forma única al sujeto. Para protegerte contra las amenazas de falsificación de identidad, elige un atributo con un valor único que no pueda cambiarse. De forma predeterminada, el identificador google.subject se establece en el nombre común del asunto del certificado de cliente, assertion.subject.dn.cn.

De manera opcional, define una condición de atributo. Las condiciones de los atributos son expresiones CEL que pueden verificar los atributos de aserción y los atributos de destino. Si la condición del atributo 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 a fin de restringir qué sujetos pueden usar la federación de identidades para cargas de trabajo para obtener tokens de Google Cloud de corta duración.

Por ejemplo, la siguiente condición restringe el acceso a los certificados de cliente que contienen el ID de SPIFFE spiffe://example/path:

assertion.san.uri=="spiffe://example/path"

Crea el proveedor y el grupo de Workload Identity

  1. Para crear un nuevo grupo de Workload Identity, ejecuta el siguiente comando:

    gcloud iam workload-identity-pools create POOL_ID \
        --location="global" \
        --description="DESCRIPTION" \
        --display-name="DISPLAY_NAME"
    

    Reemplaza lo siguiente:

    • POOL_ID: el ID único para el grupo.
    • DISPLAY_NAME: el nombre del grupo.
    • DESCRIPTION: una descripción del grupo que eliges. Esta descripción aparece cuando otorgas acceso a identidades de grupo.
  2. Para agregar un proveedor de grupos de identidades para cargas 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" \
        --billing-project="ALLOWLISTED_PROJECT"
    

    Reemplaza lo siguiente:

    • PROVIDER_ID: Un ID de proveedor de grupos de identidades para cargas de trabajo único que elijas.
    • POOL_ID: El ID del grupo de identidades de cargas de trabajo que creaste antes.
    • TRUST_STORE_CONFIG: Es el archivo YAML del almacén de confianza.
    • MAPPINGS: Una lista separada por comas de las asignaciones de atributos que creaste antes en esta guía. Si no especificas google.subject, la asignación predeterminada será google.subject=assertion.subject.dn.cn.
    • CONDITIONS: Es una condición de atributo opcional que creaste antes en esta guía. Quita el parámetro si no tienes una condición de atributo.
    • ALLOWLISTED_PROJECT: El ID del proyecto

Autentica una carga de trabajo

Debes realizar estos pasos una vez por cada carga de trabajo.

Permite que tu carga de trabajo externa acceda a los recursos de Google Cloud

Para proporcionar a tu carga de trabajo acceso a los recursos de Google Cloud, te recomendamos que otorgues acceso directo a los recursos al principal. En este caso, el principal es el usuario federado. Algunos productos de Google Cloud tienen limitaciones de las APIs de Google Cloud. Si tu carga de trabajo llama a un extremo de API que tiene una limitación, puedes usar el robo de identidad temporal como cuenta de servicio. En este caso, el principal es la cuenta de servicio de Google Cloud, que actúa como la identidad. Otorga acceso a la cuenta de servicio en el recurso.

Acceso directo a recursos

Puedes otorgar acceso a una identidad federada directamente en los recursos con la consola de Google Cloud o gcloud CLI.

Console

Para usar la consola de Google Cloud para otorgar roles de IAM directamente en un recurso, debes ir a la página del recurso y, luego, otorgar el rol. En el siguiente ejemplo, se muestra cómo ir a la página de Cloud Storage y otorgar el rol de visualizador de objetos de almacenamiento (roles/storage.objectViewer) a una identidad federada directamente en un bucket de Cloud Storage.

  1. En la consola de Google Cloud, ve a la página Buckets de Cloud Storage.

    Ir a Buckets

  2. En la lista de buckets, haz clic en el nombre del bucket para el que deseas otorgar el rol.

  3. Elige la pestaña Permisos cerca de la parte superior de la página.

  4. Haz clic en el botón Otorgar acceso.

    Aparecerá el cuadro de diálogo Agregar principales.

  5. En el campo Nuevas principales, ingresa una o más identidades que necesiten acceso a tu bucket.

    Por tema

    principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT
    

    Reemplaza lo siguiente:

    • PROJECT_NUMBER: el número del proyecto
    • POOL_ID: el ID del grupo de cargas de trabajo
    • SUBJECT: El sujeto individual asignado desde tu IdP, por ejemplo, administrator@example.com

    Por grupo

    principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP
    

    Reemplaza lo siguiente:

    • PROJECT_NUMBER: el número del proyecto
    • WORKLOAD_POOL_ID: el ID del grupo de cargas de trabajo
    • GROUP: El grupo asignado desde tu IdP, 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
    

    Reemplaza lo siguiente:

    • PROJECT_NUMBER: el número del proyecto
    • WORKLOAD_POOL_ID: el ID del grupo de cargas de trabajo
    • ATTRIBUTE_NAME: Uno de los atributos que se asignó desde tu IdP
    • ATTRIBUTE_VALUE: el valor del atributo.
  6. Elige un rol (o roles) del menú desplegable Selecciona un rol. Los roles que seleccionas aparecen en el panel con una descripción breve del permiso que otorgan.

  7. Haz clic en Guardar.

gcloud

Para usar la CLI de gcloud para otorgar roles de IAM en un recurso en un proyecto, haz lo siguiente:

  1. 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\)
    
  2. Otorga el acceso al recurso.

    Para usar gcloud CLI con el objetivo de otorgar el rol de Visualizador de objetos de almacenamiento (roles/storage.objectViewer) a identidades externas que cumplan con ciertos 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"

    Reemplaza lo siguiente:

    • BUCKET_ID: Es el bucket en el que se otorgará acceso.
    • PROJECT_NUMBER: el número del proyecto que contiene el grupo de Workload Identity.
    • POOL_ID: el ID del grupo de identidades para cargas de trabajo
    • SUBJECT: el valor esperado para el atributo que asignaste a google.subject
    • GROUP: el valor esperado para el atributo que asignaste a google.groups
    • ATTRIBUTE_NAME: el nombre de un atributo personalizado en la asignación de atributos
    • ATTRIBUTE_VALUE: Es el valor del atributo personalizado en tu asignación de atributos.

    Puedes otorgar roles en cualquier recurso de Google Cloud que admita políticas de permisos de IAM.

Uso de identidad temporal como cuenta de servicio

  1. Para crear una cuenta de servicio para la carga de trabajo externa, haz lo siguiente:

    1. Enable the IAM, Security Token Service, and Service Account Credentials APIs.

      Enable the APIs

    2. Crea una cuenta de servicio que represente la carga de trabajo. Te recomendamos que uses una cuenta de servicio dedicada para cada carga de trabajo. No es necesario que la cuenta de servicio esté en el mismo proyecto que el grupo de identidades para cargas de trabajo, pero debes consultar el proyecto que contiene la cuenta de servicio.

    3. Otorga acceso a la cuenta de servicio a los recursos a los que deseas que accedan las identidades externas.

    4. Otorga el rol de usuario de Workload Identity (roles/iam.workloadIdentityUser) a la cuenta de servicio:

  2. Para otorgar acceso a una identidad federada mediante la identidad temporal como cuenta de servicio con la consola de Google Cloud o gcloud CLI, haz lo siguiente:

Console

Para usar la consola de Google Cloud para otorgar roles de IAM a una identidad federada con una cuenta de servicio, haz lo siguiente:

Cuenta de servicio en el mismo proyecto

  1. Para otorgar acceso mediante la identidad temporal como cuenta de servicio para una cuenta de servicio en el mismo proyecto, haz lo siguiente:

    1. Ve a la página Grupos de identidades para cargas de trabajo.

      Ir a Grupos de Workload Identity

    2. Selecciona Otorgar acceso.

    3. En el cuadro de diálogo Otorgar acceso a la cuenta de servicio, selecciona Otorgar acceso mediante la identidad temporal como cuenta de servicio.

    4. En la lista Cuentas de servicio, selecciona la cuenta de servicio para las identidades externas que actuarán en nombre de ella y haz lo siguiente:

    5. Para elegir qué identidades en el grupo pueden actuar en nombre de la cuenta de servicio, realiza una de las siguientes acciones:

      • Para permitir que solo las identidades específicas del grupo de identidades para cargas de trabajo actúen en nombre de la cuenta de servicio, selecciona Solo identidades que coinciden con el filtro.

      • En la lista Nombre del atributo, selecciona el atributo que deseas filtrar.

      • En el campo Valor del atributo, ingresa el valor esperado del atributo; por ejemplo, si usas una asignación de atributos google.subject=assertion.sub, establece el nombre del atributo en subject y el valor del atributo en el valor de la declaración sub en los tokens que emite tu proveedor de identidad externo.

    6. Para guardar la configuración, haz clic en Guardar y, luego, en Descartar.

Cuenta de servicio en otro proyecto

  1. Para otorgar acceso mediante la identidad temporal como cuenta de servicio para una cuenta de servicio en un proyecto diferente, haz lo siguiente:

    1. Ve a la página de cuentas de servicio.

      Ir a Cuentas de servicio

    2. Elige la cuenta de servicio de la que quieres usar la identidad.

    3. Haz clic en Administrar acceso.

    4. Haz clic en Agregar principal.

    5. En el campo Principal nuevo, ingresa uno de los siguientes identificadores principales para las identidades de tu grupo que actuarán en nombre de la cuenta de servicio.

      Por tema

      principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT
      

      Reemplaza lo siguiente:

      • PROJECT_NUMBER: el número del proyecto
      • POOL_ID: el ID del grupo de cargas de trabajo
      • SUBJECT: El sujeto individual asignado desde tu IdP, por ejemplo, administrator@example.com

      Por grupo

      principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP
      

      Reemplaza lo siguiente:

      • PROJECT_NUMBER: el número del proyecto
      • WORKLOAD_POOL_ID: el ID del grupo de cargas de trabajo
      • GROUP: El grupo asignado desde tu IdP, 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
      

      Reemplaza lo siguiente:

      • PROJECT_NUMBER: el número del proyecto
      • WORKLOAD_POOL_ID: el ID del grupo de cargas de trabajo
      • ATTRIBUTE_NAME: Uno de los atributos que se asignó desde tu IdP
      • ATTRIBUTE_VALUE: el valor del atributo.

      Junto al grupo

      principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*
      

      Reemplaza lo siguiente:

      • PROJECT_NUMBER: el número del proyecto
      • WORKLOAD_POOL_ID: el ID del grupo de cargas de trabajo
    6. En Selecciona un rol, elige el rol de usuario de Workload Identity (roles/iam.workloadIdentityUser).

    7. Para guardar la configuración, haz clic en Guardar.

gcloud

Para usar la CLI de gcloud a fin de otorgar el rol de usuario de Workload Identity (roles/iam.workloadIdentityUser) a identidades externas que cumplan con ciertos criterios, ejecuta el siguiente comando.

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"

Reemplaza lo siguiente:

  • SERVICE_ACCOUNT_EMAIL: La dirección de correo electrónico de la cuenta de servicio
  • PROJECT_NUMBER: el número del proyecto que contiene el grupo de Workload Identity.
  • POOL_ID: el ID del grupo de identidades para cargas de trabajo
  • SUBJECT: el valor esperado para el atributo que asignaste a google.subject
  • GROUP: el valor esperado para el atributo que asignaste a google.groups
  • ATTRIBUTE_NAME: el nombre de un atributo personalizado en la asignación de atributos
  • ATTRIBUTE_VALUE: Es el valor del atributo personalizado en tu asignación de atributos.

Descarga o crea una configuración de credenciales

Las bibliotecas cliente de Cloud y gcloud CLI pueden obtener credenciales externas de forma automática y usarlas para usar la identidad de una cuenta de servicio. Para permitir que las bibliotecas y las herramientas completen este proceso, debes proporcionar un archivo de configuración de credenciales. Este archivo define lo siguiente:

  • Dónde obtener credenciales externas
  • Qué grupo y proveedor de identidades para cargas de trabajo usar
  • Qué cuenta de servicio actuará en nombre de ella

Además, para la integración de certificados X.509, se requiere un archivo de configuración de certificado. Este archivo contiene rutas de acceso al certificado de cliente X.509 y a los archivos de claves privadas.

Para crear archivos de configuración de credenciales y certificados, haz lo siguiente:

Acceso directo a recursos

Para crear archivos de configuración de credenciales y certificados para el acceso directo a los recursos con gcloud iam workload-identity-pools create-cred-config, haz lo siguiente:

Crea archivos de configuración de credenciales y certificados que permitan que la biblioteca obtenga un token de acceso con un certificado X.509.

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_KEY_PATH \
    --output-file=FILEPATH.json

Reemplaza lo siguiente:

  • PROJECT_NUMBER: Es el número del proyecto que contiene el grupo de identidades para cargas de trabajo.
  • POOL_ID: El ID del grupo de identidades para cargas de trabajo.
  • PROVIDER_ID: El ID del proveedor de grupos de identidades para cargas de trabajo
  • CLIENT_CERT_PATH: La ruta de acceso al archivo del certificado del cliente.
  • CLIENT_KEY_PATH: La ruta de acceso al archivo de claves privadas del certificado del cliente.
  • FILEPATH: El archivo en el que se guardará la configuración

Si ejecutas este comando, también se creará un archivo de configuración de certificado y se almacenará en la ubicación predeterminada de Google Cloud CLI:

  • Linux y macOS: ~/.config/gcloud/certificate_config.json

  • Windows: %APPDATA%\gcloud\certificate_config.json

Uso de identidad temporal como cuenta de servicio

Para crear archivos de configuración de credenciales y certificados con la identidad temporal como cuenta de servicio con gcloud iam workload-identity-pools create-cred-config, haz lo siguiente:

Crea archivos de configuración de credenciales y certificados que permitan que la biblioteca obtenga un token de acceso con un certificado X.509.

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 \
    --output-file=FILEPATH.json

Reemplaza lo siguiente:

  • PROJECT_NUMBER: Es el número del proyecto que contiene el grupo de identidades para cargas de trabajo.
  • POOL_ID: El ID del grupo de identidades para cargas de trabajo.
  • PROVIDER_ID: El ID del proveedor de grupos de identidades para cargas de trabajo.
  • SERVICE_ACCOUNT_EMAIL: Si usas la identidad temporal como cuenta de servicio, reemplaza por la dirección de correo electrónico de la cuenta de servicio.
  • SERVICE_ACCOUNT_TOKEN_LIFETIME: Si usas la identidad temporal como cuenta de servicio, el ciclo de vida del token de acceso de la cuenta de servicio, en segundos; el valor predeterminado es de una hora cuando no se proporciona. Omite esta marca si no usas la identidad temporal como cuenta de servicio. Para especificar un ciclo de vida de más de una hora, debes configurar la restricción de la política de la organización constraints/iam.allowServiceAccountCredentialLifetimeExtension.
  • CLIENT_CERT_PATH: La ruta de acceso al archivo del certificado del cliente.
  • CLIENT_KEY_PATH: La ruta de acceso al archivo de claves privadas del certificado del cliente.
  • FILEPATH: El archivo en el que se guardará la configuración

Si ejecutas este comando, también se creará un archivo de configuración de certificado y se almacenará en la ubicación predeterminada de Google Cloud CLI:

  • Linux y macOS: ~/.config/gcloud/certificate_config.json

  • Windows: %APPDATA%\gcloud\certificate_config.json

Usa la configuración de credenciales para acceder a Google Cloud

Para permitir que las herramientas y las bibliotecas cliente usen tu configuración de credenciales, haz lo siguiente:

  1. Inicializa una variable de entorno GOOGLE_APPLICATION_CREDENTIALS y apúntala al archivo de configuración de credenciales:

    Bash

      export GOOGLE_APPLICATION_CREDENTIALS=`pwd`/FILEPATH.json
      
    En el ejemplo anterior, FILEPATH es la ruta de acceso relativa al archivo de configuración de credenciales.

    PowerShell

      $env:GOOGLE_APPLICATION_CREDENTIALS = Resolve-Path 'FILEPATH.json'
      
    En el ejemplo anterior, FILEPATH es la ruta de acceso relativa al archivo de configuración de credenciales.
  2. Asegúrate de que la biblioteca cliente pueda encontrar el archivo de configuración del certificado. El archivo de configuración del certificado debe almacenarse en la ubicación predeterminada de Google Cloud CLI:

    • Linux y macOS: ~/.config/gcloud/certificate_config.json

    • Windows: %APPDATA%\gcloud\certificate_config.json

    o a la que haga referencia la variable de entorno GOOGLE_API_CERTIFICATE_CONFIG.

  3. Usa una biblioteca cliente o herramienta que admita la federación de Workload Identity y pueda encontrar credenciales de forma automática:

Go

Las bibliotecas cliente para Go admiten la federación de identidades para cargas de trabajo X.509 si usan la versión 0.8.0 o posterior del módulo cloud.google.com/go/auth y la versión 0.189.0 del módulo google.golang.org/api.

Para comprobar qué versión de estos módulos usa tu biblioteca cliente, ejecuta el siguiente comando mientras estés 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 cliente para Python admiten la federación de identidades para cargas de trabajo X.509 si usan la versión 2.32.0 o posterior del paquete google-auth.

Para verificar qué versión de este paquete usa tu biblioteca cliente, ejecuta el siguiente comando en el entorno en el que está instalado el paquete:

  pip show google-auth

Si deseas especificar un ID del proyecto para el cliente de autenticación, puedes configurar la variable de entorno GOOGLE_CLOUD_PROJECT o permitir que el cliente busque el ID del proyecto automáticamente. Para encontrar el ID del proyecto de manera automática, la cuenta de servicio en el 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 del usuario del paquete google-auth.

gcloud

Para autenticar con la federación de identidades para cargas de trabajo X.509, usa el comando gcloud auth login:

  gcloud auth login --cred-file=FILEPATH.json
  

Reemplaza FILEPATH por la ruta de acceso al archivo de configuración de credenciales.

La compatibilidad con la federación de identidades para cargas de trabajo X.509 en gcloud CLI está disponible en la versión 488.0.0 y posteriores de gcloud CLI.

Obtén un token de acceso con una solicitud sin formato para acceder a Google Cloud

Para obtener el token de acceso, haz lo siguiente:

  1. Usa curl para realizar el intercambio de tokens con mTLS y el certificado de cliente:

    curl --key CLIENT_CERT_KEY \
    --cert CLIENT_CERT \
    --request POST 'https://sts.mtls.googleapis.com/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",
    }'
    

    Reemplaza lo siguiente:

    • CLIENT_CERT_KEY: la clave privada del certificado del cliente
    • CLIENT_CERT: el certificado de cliente
    • WORKLOAD_IDENTITY_POOL_URI: La URL del proveedor de grupos de identidades para cargas de trabajo en el siguiente formato:

      //iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID

  2. Usa el token de acceso portador que se generó en el paso anterior para acceder a los recursos de Google Cloud, por ejemplo:

    curl -X GET 'https://storage.googleapis.com/my_object' -H "Authorization: Bearer $ACCESS_TOKEN"
    

Cuotas y límites

En la siguiente tabla, se enumeran las cuotas y los límites.

Elemento Cuotas y límites Notas
Cantidad de anclas de confianza Límite: 3 Cada certificado no debe superar los 32 KB.
Cantidad de certificados intermedios Límite: 10 Cada certificado no debe exceder los 32 KB.
Cantidad de restricciones de nombres permitidas durante la validación de certificados raíz e intermedios Límite: 10
Certificados intermedios que comparten la misma información del sujeto y su clave pública Límite: 5 Este límite es para cada almacén de confianza.
Profundidad de la cadena de certificados Límite: 5 La profundidad máxima de una cadena de certificados, incluidos los certificados raíz y de cliente.
Cantidad de veces que se pueden evaluar los certificados intermedios cuando se intenta crear la cadena de confianza Límite: 100
Claves de certificados subidos y pasados del cliente

Límite: Las claves RSA pueden ser de 2048 a 4096 bits.

Los certificados ECDSA deben usar las curvas P-256 o P-384.

Se recomiendan RSA-2048 y P-256 para casos de uso normales. Usa otros para las prácticas recomendadas de seguridad.

¿Qué sigue?