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 autoridad certificadora (AC) para autenticarte en Cloud de Confiance y acceder a Cloud de Confiance 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 enCloud de Confiance . 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 Cloud de Confiance 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 APIs deCloud de Confiance .

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.

  • Una CA intermedia es un certificado de la AC 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. En la consola de Cloud de Confiance , en la página del selector de proyectos, selecciona o crea un proyecto de Cloud de Confiance .

    Roles necesarios para seleccionar o crear un proyecto

    • Selecciona un proyecto: Para seleccionar un proyecto, no se requiere un rol de IAM específico. Puedes seleccionar cualquier proyecto en el que se te haya otorgado un rol.
    • Crear un proyecto: Para crear un proyecto, necesitas el rol de Creador de proyectos (roles/resourcemanager.projectCreator), que contiene el permiso resourcemanager.projects.create. Obtén más información para otorgar roles.

    Ir al selector de proyectos

  2. Te recomendamos que uses un proyecto dedicado para administrar grupos y proveedores de Workload Identity.
  3. Verifica que la facturación esté habilitada para tu proyecto de Cloud de Confiance .

  4. Habilita las APIs de IAM, Resource Manager, Service Account Credentials y Security Token Service.

    Roles necesarios para habilitar las APIs

    Para habilitar APIs, necesitas el permiso serviceusage.services.enable. Si creaste el proyecto, es probable que ya tengas este permiso a través del rol de propietario (roles/owner). De lo contrario, puedes obtener este permiso a través del rol de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin). Obtén más información para otorgar roles.

    Habilitar las API

Roles obligatorios

Para obtener los permisos que necesitas para configurar la federación de Workload Identity, 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.

Crea un almacén de confianza

En esta sección, se muestra cómo crear un almacén de confianza. A grandes rasgos, los pasos son los siguientes:

Genera certificados autofirmados

En esta sección, se muestra cómo generar claves y crear certificados firmados. Si ya creaste certificados, puedes omitir esta sección y continuar con Da formato a los certificados.

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

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 de configuración openssl para crear tus certificados de firma. Como mínimo, el archivo es similar al siguiente, pero puedes establecer 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
    
  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
    
  5. Crea la solicitud de firma para el 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
    
  6. Crea el certificado de hoja emitido por el certificado 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
    

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 cadena de una sola línea y almacenarlos 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:

  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 el almacén de confianza

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

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.

Para crear el archivo de almacén de confianza, ejecuta el siguiente comando:

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 Cloud de Confiance 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 última 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 última unidad organizativa de la entidad emisora.
  • san.dns: Es el primer nombre de DNS del nombre alternativo del sujeto.
  • san.uri: Es el primer URI del nombre alternativo del sujeto.
  • sha256Fingerprint: Hash del certificado de hoja SHA256 (Base64)

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, puedes definir 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 para restringir qué sujetos pueden usar la federación de identidades para cargas de trabajo para obtener tokens de Cloud de Confiancecorta 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"

Configura la federación de Workload Identity

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

Crea el proveedor y el grupo de Workload Identity

Console

  1. En la consola de Cloud de Confiance , ve a la página Nuevo proveedor y grupo de cargas de trabajo.

    Ir a Nuevo proveedor y grupo de cargas de trabajo

  2. En la sección Crear un grupo de identidades, ingresa lo siguiente:

    • Nombre: Es el nombre del grupo. El nombre también se usa como el ID del grupo. No puedes cambiar el ID del grupo más adelante.
    • Descripción: Es el texto que describe el propósito del grupo.
  3. Haz clic en Continuar.

  4. En la sección Agregar un proveedor al grupo, haz lo siguiente:

    1. En Selecciona un proveedor, selecciona X509.
    2. En Nombre del proveedor, ingresa un nombre para el proveedor. El nombre también se usa como el ID del proveedor. No puedes cambiar el ID del proveedor después de crearlo.
    3. En Anclas de confianza, ingresa tus certificados de AC de confianza en formato PEM. Se usan para validar la cadena de certificados de cliente.
    4. Opcional: En Certificados intermedios, ingresa los certificados intermedios de la CA en formato PEM para ayudar a compilar la cadena de confianza completa.
    5. Haz clic en Continuar.
  5. En la sección Configurar atributos de proveedores, agrega las asignaciones y condiciones de atributos que identificaste antes.

  6. Haz clic en Guardar.

gcloud

  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"
    

    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 este documento. Por ejemplo, google.subject=assertion.subject.dn.cn.
    • CONDITIONS: Opcional Una condición de atributo que creaste antes en este documento. Quita el parámetro si no tienes una condición de atributo.

Configura la aplicación de políticas de acceso adaptado al contexto para la federación de identidades para cargas de trabajo

Puedes reforzar la seguridad de los recursos contra ataques de reproducción de tokens habilitando el acceso adaptado al contexto, que aplica la validación de mTLS para las solicitudes de acceso. En este proceso, una vinculación de mTLS incorpora políticas basadas en el contexto de transporte y usa el estado del certificado del cliente dentro de la sesión de TLS para tomar decisiones de autorización. En el caso de la federación de identidades para cargas de trabajo X.509, una vinculación de mTLS garantiza que todo el flujo de autenticación esté vinculado de forma segura a una carga de trabajo de confianza. Esto mitiga el riesgo de robo de credenciales, ya que la autenticación está vinculada a un extremo específico y de confianza.

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 Cloud de Confiance

Para proporcionar a tu carga de trabajo acceso a los recursos de Cloud de Confiance , te recomendamos que otorgues acceso directo a los recursos al principal. En este caso, el principal es el usuario federado. Algunos Cloud de Confiance productos 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 la identidad temporal como cuenta de servicio. En este caso, el principal es la cuenta de servicioCloud de Confiance , 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 Cloud de Confiance consola o gcloud CLI.

Console

Para usar la consola de Cloud de Confiance 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 Cloud de Confiance , 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 Cloud de Confiance recurso 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. Habilita las APIs de IAM, Security Token Service y Service Account Credentials.

      Roles necesarios para habilitar las APIs

      Para habilitar APIs, necesitas el permiso serviceusage.services.enable. Si creaste el proyecto, es probable que ya tengas este permiso a través del rol de propietario (roles/owner). De lo contrario, puedes obtener este permiso a través del rol de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin). Obtén más información para otorgar roles.

      Habilitar las API

    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.

  2. Para permitir que la identidad federada actúe en nombre de la cuenta de servicio, haz lo siguiente:

Console

Para usar la consola de Cloud de Confiance 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 otorgar el rol de usuario de Workload Identity (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 para 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"

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

Además, para la integración de certificados X.509, se requiere un archivo de configuración de certificado.

Los archivos de configuración incluyen lo siguiente:

  • Credential Configuration: Es un archivo JSON que define cómo la biblioteca cliente interactúa con el servicio de token de seguridad (STS).
  • Configuración del certificado: Es un archivo JSON que especifica las rutas de acceso locales para el certificado de cliente y la clave privada en tu carga de trabajo.

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

Acceso directo a recursos

Para crear archivos de configuración de credenciales y certificados para el acceso directo a los recursos, haz lo siguiente:

Console

  1. En la consola de Cloud de Confiance , ve a la página Grupos de Workload Identity.

    Ir a Grupos de Workload Identity

  2. Haz clic en el nombre del grupo que contiene el proveedor que deseas usar.

  3. Haz clic en Otorgar acceso.

  4. En el panel Otorgar acceso a la cuenta de servicio, selecciona Otorgar acceso con identidades federadas (recomendado).

  5. Haz clic en Download config.

  6. En la sección Configurar tu aplicación, selecciona el proveedor que contiene las identidades externas y proporciona los siguientes parámetros de configuración:

    • Ruta de acceso del certificado de cliente: Es la ruta de acceso local al archivo del certificado de cliente.
    • Ruta de acceso a la clave privada del cliente: Es la ruta de acceso local a tu archivo de claves privadas del cliente.
    • Ruta de acceso de la cadena de confianza: (Opcional) Es la ruta de acceso del archivo de la cadena de confianza que contiene el certificado de cliente y los certificados intermedios que se requieren para la búsqueda de certificados, pero que no están configurados en el proveedor X.509.
  7. Para descargar un archivo ZIP que contenga los archivos de Credential Configuration y Certificate Configuration, haz clic en Descargar configuración.

  8. Haz clic en Descartar.

Si deseas usar los extremos regionales del servicio de tokens de seguridad, por ejemplo, https://sts.us-central1.rep.mtls.s3nsapis.fr, consulta Cómo usar extremos regionales del servicio de tokens de seguridad para mejorar la confiabilidad.

gcloud

  1. 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, ejecuta el siguiente comando:

    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 \
        --sts-location=REGION \
        --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: Es la ruta de acceso al archivo del certificado del cliente.
    • CLIENT_PRIVATE_KEY_PATH: Es la ruta de acceso al archivo de claves privadas del certificado del cliente.
    • TRUST_CHAIN_PATH: Opcional Es la ruta de acceso del archivo de la cadena de confianza que contiene el certificado de cliente y los certificados intermedios que se requieren para la búsqueda de certificados, pero que no están configurados en el proveedor X.509.
    • REGION: Opcional Especifica la región de los extremos regionales del servicio de tokens de seguridad, si están disponibles.
    • 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 gcloud CLI:

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

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

Identidad temporal como cuenta de servicio

Para crear archivos de configuración de credenciales y certificados con la identidad temporal como cuenta de servicio, haz lo siguiente:

Console

  1. En la consola de Cloud de Confiance , ve a la página Grupos de Workload Identity.

    Ir a Grupos de Workload Identity

  2. Haz clic en el nombre del grupo que contiene el proveedor que deseas usar.

  3. Haz clic en Otorgar acceso.

  4. Selecciona Otorgar acceso con identidad temporal como cuenta de servicio.

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

  6. Haz clic en Download config.

  7. En el diálogo Configurar tu aplicación, proporciona los siguientes parámetros de configuración:

    • Ruta de acceso del certificado de cliente: Es la ruta de acceso local al archivo del certificado de cliente.
    • Ruta de acceso a la clave privada del cliente: Es la ruta de acceso local a tu archivo de claves privadas del cliente.
    • Ruta de acceso de la cadena de confianza: (Opcional) Es la ruta de acceso del archivo de la cadena de confianza que contiene el certificado de cliente y los certificados intermedios que se requieren para la búsqueda de certificados, pero que no están configurados en el proveedor X.509.
  8. Para descargar un archivo ZIP que contenga los archivos de Configuración de credenciales y Configuración de certificados, haz clic en Descargar configuración.

  9. Haz clic en Descartar.

Si deseas usar los extremos regionales del servicio de tokens de seguridad, por ejemplo, https://sts.us-central1.rep.mtls.s3nsapis.fr, consulta Cómo usar extremos regionales del servicio de tokens de seguridad para mejorar la confiabilidad.

gcloud

  1. 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, ejecuta el siguiente comando:

    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_PRIVATE_KEY_PATH \
        --credential-cert-trust-chain-path=TRUST_CHAIN_PATH \
        --sts-location=REGION \
        --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 SERVICE_ACCOUNT_EMAIL por la dirección de correo electrónico de la cuenta de servicio.
    • SERVICE_ACCOUNT_TOKEN_LIFETIME: Es el ciclo de vida del token de acceso a la cuenta de servicio, en segundos, si usas la identidad temporal como cuenta de servicio. Si se omite, la vida útil predeterminada es de una hora. 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: Es la ruta de acceso al archivo del certificado del cliente.
    • CLIENT_PRIVATE_KEY_PATH: Es la ruta de acceso al archivo de claves privadas del certificado del cliente.
    • TRUST_CHAIN_PATH: Opcional Es la ruta de acceso del archivo de la cadena de confianza que contiene el certificado de cliente y los certificados intermedios que se requieren para la búsqueda de certificados, pero que no están configurados en el proveedor X.509.
    • REGION: Opcional Especifica la región de los extremos regionales del servicio de tokens de seguridad, si están disponibles.
    • 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 Cloud de Confiance

Para permitir que las herramientas y las bibliotecas 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.

  1. Si descargaste un archivo ZIP de la consola de Cloud de Confiance , extráelo en tu carga de trabajo externa.

  2. Actualiza el archivo de Configuración del certificado con las rutas de acceso reales a los archivos locales de tu certificado de cliente y la clave privada para los siguientes campos:

    • cert_path: Es la ruta de acceso a tu certificado de cliente.
    • key_path: Es la ruta de acceso a tu clave privada.
  3. Inicializa una variable de entorno GOOGLE_APPLICATION_CREDENTIALS y configúrala en el archivo de configuración de credenciales:

    Bash

      export GOOGLE_APPLICATION_CREDENTIALS=`pwd`/FILEPATH.json
      
    Reemplaza FILEPATH por la ruta de acceso relativa al archivo de configuración de credenciales.

    PowerShell

      $env:GOOGLE_APPLICATION_CREDENTIALS = Resolve-Path 'FILEPATH.json'
      
    Reemplaza FILEPATH por la ruta de acceso relativa al archivo de configuración de credenciales.
  4. Asegúrate de que la biblioteca 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 de acceso en la que extraes el archivo ZIP. (si descargaste la configuración desde la consola de Cloud de Confiance )

    • Ruta de acceso predeterminada de gcloud CLI:

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

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

    • Es la ruta de acceso establecida en la variable de entorno GOOGLE_API_CERTIFICATE_CONFIG.

  5. Usa las siguientes bibliotecas cliente de Cloud que admiten la federación de identidades para cargas de trabajo con certificados X.509.

    Go

    Las bibliotecas cliente para Go admiten la federación de identidades para cargas 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ó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.39.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.

  6. Si tu carga de trabajo se ejecuta en macOS, configura CLOUDSDK_PYTHON_SITEPACKAGES=1 para que gcloud CLI use bibliotecas de Python fuera de su directorio de instalación.

  7. Para autenticarte con gcloud CLI, ejecuta el siguiente comando:

    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 538.0 y posteriores de gcloud CLI.

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

Crea la cadena de confianza

En este paso, se muestra cómo crear la cadena de confianza. Pasas la cadena de confianza en el campo subject_token cuando llamas al Servicio de tokens de seguridad en una solicitud simple.

Da formato a los certificados que deben incluirse en la cadena como una lista con formato JSON, según se especifica en RFC 7515. El certificado de hoja que se usa para el protocolo de enlace mTLS debe especificarse como el primer elemento. Cada certificado del paquete debe ser una cadena codificada en base64.

  1. 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)
    
  2. Crea una lista de cadenas con formato JSON que se pueda pasar como subject_token en la llamada al Servicio de tokens de seguridad, más adelante en esta guía.

    export TRUST_CHAIN="[\\\"${LEAF_CERT}\\\", \\\"${INTERMEDIATE_CERT}\\\"]"
    

Obtén un token de acceso

Para obtener el token de acceso, haz lo siguiente:

  1. 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"
    }'
    

    Reemplaza lo siguiente:

    • CLIENT_CERT_KEY: La clave privada del certificado del cliente
    • CLIENT_CERT: El certificado de cliente
    • WORKLOAD_IDENTITY_POOL_URI: Es 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

    • TRUST_CHAIN: Es la cadena de confianza necesaria para verificar el certificado de hoja. Debe incluir, al menos, CLIENT_CERT como primer elemento. Si seguiste las instrucciones de la sección Da formato a los certificados, reemplaza TRUST_CHAIN por '"${TRUST_CHAIN}"'.

    Para usar extremos regionales del servicio de token de seguridad, reemplaza https://sts.mtls.s3nsapis.fr/v1/token por lo siguiente:

     https://sts.REGION.rep.mtls.s3nsapis.fr/v1/token 

    Reemplaza REGION por una Cloud de Confiance ubicación, por ejemplo, us-central1 o europe-west4.

  2. Opcional: Si usas la identidad temporal como cuenta de servicio, llama al método generateAccessToken de la API de Service Account Credentials de IAM con el token del servicio de tokens de seguridad para obtener un token de acceso.

    curl -X POST 'https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL:generateAccessToken' \
        -H "Content-Type: application/json; charset=utf-8" \
        -H "Authorization: Bearer STS_TOKEN" \
        -d '{"scope": ["https://www.googleapis.com/auth/cloud-platform"]}'
    

    Reemplaza lo siguiente:

    • SERVICE_ACCOUNT_EMAIL: La dirección de correo electrónico de la cuenta de servicio.
    • STS_TOKEN: Es el token de acceso que generó el servicio de tokens de seguridad en el paso anterior.
  3. Usa el token de acceso de portador para acceder a los recursos deCloud de Confiance , por ejemplo:

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

Límites

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

Elemento Límite Notas
Cantidad de anclas de confianza 3 Cada certificado no debe superar los 32 KB.
Cantidad de certificados intermedios 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 10
Certificados intermedios que comparten la misma información del sujeto y su clave pública 5 Este límite es para cada almacén de confianza.
Profundidad de la cadena de certificados 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 100
Claves de certificados subidos y pasados del cliente

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.
Duración máxima del certificado de hoja 390 días. Los certificados con un período de validez superior a 390 días dejarán de funcionar después de que hayan sido válidos durante más de 390 días.

¿Qué sigue?