Configurar la federación de identidades de cargas de trabajo con máquinas virtuales de AWS o Azure

En esta guía se describe cómo usar la federación de identidades de carga de trabajo para permitir que las cargas de trabajo de máquinas virtuales de AWS y Azure se autentiquen en Trusted Cloud by S3NS sin una clave de cuenta de servicio.

Si usas Amazon Elastic Kubernetes Service (Amazon EKS) o Azure Kubernetes Service (AKS), consulta Configurar la federación de identidades de cargas de trabajo con Kubernetes para saber cómo configurar la federación de identidades de cargas de trabajo en tus clústeres. En esta página solo se explica cómo configurar la federación de identidades de cargas de trabajo para máquinas virtuales de AWS y Azure.

Al usar la federación de identidades de cargas de trabajo, las cargas de trabajo que se ejecutan en AWS EC2 y en máquinas virtuales de Azure pueden intercambiar sus credenciales específicas del entorno por tokens deTrusted Cloud Security Token Service de corta duración.

Las credenciales específicas del entorno incluyen lo siguiente:

Si configuras la federación de identidades de cargas de trabajo, puedes permitir que estas cargas de trabajo intercambien estas credenciales específicas del entorno porTrusted Cloud credenciales de corta duración. Las cargas de trabajo pueden usar estas credenciales de corta duración para acceder a las APIs de Trusted Cloud .

Antes de empezar

Preparar tu proveedor de identidades externo

Solo tienes que seguir estos pasos una vez por cada inquilino de Microsoft Entra ID o cuenta de AWS.

AWS

No es necesario que haga ningún cambio en la configuración de su cuenta de AWS.

Después de configurar un grupo de identidades de carga de trabajo para que confíe en tu cuenta de AWS, puedes permitir que los usuarios de AWS y los roles de AWS usen credenciales de seguridad de AWS permanentes o temporales para obtener credenciales de corta duración. Trusted Cloud

Azure

Debes crear una aplicación de Microsoft Entra ID en tu cliente de Microsoft Entra ID y configurarla para que se pueda usar en la federación de identidades de carga de trabajo.

Después de configurar un grupo de identidades de carga de trabajo para que confíe en la aplicación, los usuarios y las entidades de servicio de Azure pueden solicitar tokens de acceso para esta aplicación e intercambiarlos por credenciales de Trusted Cloud de corta duración.

Para crear la aplicación, sigue estos pasos:

  1. Crea una aplicación y un principal de servicio de Microsoft Entra ID.

  2. Define un URI de ID de aplicación para la aplicación. Puedes usar el URI de ID de aplicación predeterminado (APPID) o especificar uno personalizado.

    Necesitarás el URI del ID de aplicación más adelante, cuando configures el proveedor de grupos de identidades de carga de trabajo.

Para permitir que una aplicación obtenga tokens de acceso para la aplicación de Microsoft Entra ID, puedes usar identidades gestionadas:

  1. Crea una identidad gestionada. Anota el ID de objeto de la identidad gestionada. Lo necesitarás más adelante cuando configures la suplantación de identidad.

  2. Asigna la identidad gestionada a una máquina virtual u otro recurso que ejecute tu aplicación.

Configurar la federación de identidades de cargas de trabajo

Solo tienes que seguir estos pasos una vez por cada cuenta de AWS o inquilino de Microsoft Entra ID. Después, puedes usar el mismo grupo y proveedor de identidades de carga de trabajo en varias cargas de trabajo y en varios proyectos. Trusted Cloud

Para empezar a configurar la federación de identidades de cargas de trabajo, haz lo siguiente:

  1. In the Trusted Cloud console, go to the project selector page.

    Go to project selector

  2. Select or create a Trusted Cloud project.

  3. Lo más recomendable es usar 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.

    Enable the APIs

Definir una asignación de atributos y una condición

Las credenciales específicas del entorno de tu carga de trabajo de AWS o Azure contienen varios atributos, y debes decidir qué atributo quieres usar como identificador de asunto (google.subject) en Trusted Cloud.

Trusted Cloud usa el identificador de asunto en los registros de auditoría de Cloud y en los identificadores de entidad principal para identificar de forma única a un usuario o un rol de AWS o Azure.

Si quiere, puede mapear atributos adicionales. Después, puede hacer referencia a estos atributos adicionales al conceder acceso a los recursos.

AWS

En el mapeo de atributos, puedes usar los campos de respuesta de GetCallerIdentity como atributos de origen. Estos campos incluyen lo siguiente:

  • account: el número de cuenta de AWS.
  • arn: el ARN de AWS de la entidad externa.
  • userid: el identificador único de la entidad que llama.

Si tu aplicación se ejecuta en una instancia de Amazon Elastic Compute Cloud (EC2) con un rol asociado, puedes usar la siguiente asignación de atributos:

google.subject=assertion.arn
attribute.account=assertion.account
attribute.aws_role=assertion.arn.extract('assumed-role/{role}/')
attribute.aws_ec2_instance=assertion.arn.extract('assumed-role/{role_and_session}').extract('/{session}')

La asignación hace lo siguiente:

  • Usa el ARN como identificador de asunto. Por ejemplo: "arn:aws:sts::000000000000:assumed-role/ec2-my-role/i-00000000000000000
  • Introduce un atributo personalizado account y le asigna el ID de cuenta de AWS.
  • Introduce un atributo personalizado aws_role y le asigna el nombre del rol de AWS. Por ejemplo: ec2-my-role
  • Introduce un atributo personalizado aws_ec2_instance y le asigna el ID de instancia de EC2. Por ejemplo: i-00000000000000000

Con este mapeo, puedes conceder acceso a lo siguiente:

  • Una instancia de EC2 específica:

    principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.aws_ec2_instance/EC2_INSTANCE_ID
    

  • Todos los usuarios y las instancias de un rol:

    principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.aws_role/ROLE_NAME
    

Azure

En tus asignaciones de atributos, puedes usar las reclamaciones insertadas en los tokens de acceso de Azure, incluidas las reclamaciones personalizadas, como atributos de origen. En la mayoría de los casos, es mejor usar la reclamación sub como identificador de asunto:

google.subject=assertion.sub
Cuando la reclamación `sub` supera el límite de 127 caracteres de google.subject, se recomienda usar una [`función extract`](/iam/docs/conditions-attribute-reference#extract) para obtener reclamaciones significativas que se puedan usar como identificador de asunto:
google.subject=assertion.sub.extract('/eid1/c/pub/t/{sub_claim}')

En el caso de un token de acceso emitido para una identidad gestionada, la reclamación sub contiene el ID de objeto de la identidad gestionada. Si usas otra reclamación, asegúrate de que sea única y de que no se pueda reasignar.

Si no sabes con seguridad qué reclamaciones puedes consultar, haz lo siguiente:

  1. Conéctate a una VM de Azure que tenga una identidad gestionada asignada.

  2. Obtén un token de acceso del servicio de metadatos de instancias de Azure (IMDS):

    Bash

    curl \
      "http://169.254.169.254/metadata/identity/oauth2/token?resource=APP_ID_URI&api-version=2018-02-01" \
      -H "Metadata: true" | jq -r .access_token
    

    Este comando usa la herramienta jq. jq está disponible de forma predeterminada en Cloud Shell.

    PowerShell

    $SubjectTokenType = "urn:ietf:params:oauth:token-type:jwt"
    $SubjectToken = (Invoke-RestMethod `
      -Uri "http://169.254.169.254/metadata/identity/oauth2/token?resource=APP_ID_URI&api-version=2018-02-01" `
      -Headers @{Metadata="true"}).access_token
    Write-Host $SubjectToken
    

    Sustituye APP_ID_URI por el URI del ID de aplicación de la aplicación que hayas configurado para la federación de identidades de cargas de trabajo.

  3. En un navegador web, ve a https://jwt.ms/ y pega el token de acceso en el campo.

  4. Haz clic en Reclamaciones para ver la lista de reclamaciones insertadas en el token de acceso.

En el caso de las identidades de servicio, normalmente no es necesario crear una asignación para google.groups ni para ningún atributo personalizado.

También puede 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.

AWS

Puedes usar una condición de atributo para restringir qué usuarios y roles de gestión de identidades y accesos 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 roles de AWS y no permite otros identificadores de gestión de identidades y accesos:

assertion.arn.startsWith('arn:aws:sts::AWS_ACCOUNT_ID:assumed-role/')

Azure

Puede usar una condición de atributo para restringir qué usuarios y principales de servicio pueden usar la federación de identidades de carga de trabajo para obtener tokens de corta duración. Trusted CloudTambién puedes configurar tu aplicación de Microsoft Entra ID para que use asignaciones de roles de aplicación.

Crear el grupo y el proveedor de identidades de carga de trabajo

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:

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 gestión de identidades y accesos (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.

Ya has recopilado toda la información que necesitas para crear un grupo y un proveedor de identidades de carga de trabajo:

Consola

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

    Ve a Nuevo proveedor y grupo de cargas de trabajo.

  2. En la sección Create an identity pool (Crear un grupo de identidades), introduce lo siguiente:

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

  4. Configura los ajustes del proveedor:

    AWS

    Configura los siguientes ajustes del proveedor:

    • Selecciona un proveedor: AWS.
    • Nombre del proveedor: nombre del proveedor. El nombre también se usa como ID de proveedor. No podrás cambiar el ID de proveedor más adelante.

    Azure

    Configura los siguientes ajustes del proveedor:

    • Selecciona un proveedor: OpenID Connect (OIDC).
    • Nombre del proveedor: nombre del proveedor. El nombre también se usa como ID de proveedor. No podrás cambiar el ID de proveedor más adelante.
    • URL del emisor: https://sts.windows.net/TENANT_ID. Sustituye TENANT_ID por el ID de cliente (GUID) de tu cliente de Microsoft Entra ID.
    • Audiencias permitidas: el URI del ID de aplicación que usaste cuando registraste la aplicación en Microsoft Entra ID.
  5. Haz clic en Continuar.

  6. En la sección Configurar atributos del proveedor, añade las asignaciones de atributos que hayas identificado anteriormente.

  7. En la sección Condiciones de los atributos, introduzca la condición del atributo que ha identificado anteriormente. Deje el campo en blanco si no tiene ninguna condición de atributo.

  8. Haz clic en Guardar para crear el grupo de identidades de carga de trabajo y el proveedor.

gcloud

  1. Crea un grupo de identidades de carga de trabajo:

    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: la descripción del grupo. Esta descripción aparece al conceder acceso a identidades de grupo.
  2. Añade un proveedor de grupos de identidades de carga de trabajo:

    AWS

    Para crear el proveedor de grupos de identidades de carga de trabajo de AWS, ejecuta el siguiente comando:

    gcloud iam workload-identity-pools providers create-aws PROVIDER_ID \
      --location="global" \
      --workload-identity-pool="POOL_ID" \
      --account-id="ACCOUNT_ID" \
      --attribute-mapping="MAPPINGS" \
      --attribute-condition="CONDITIONS"
    

    Haz los cambios siguientes:

    Ejemplo:

    gcloud iam workload-identity-pools providers create-aws example-provider \
      --location="global" \
      --workload-identity-pool="pool-1" \
      --account-id="123456789000" \
      --attribute-mapping="google.subject=assertion.arn"

    Azure

    Para crear el proveedor de grupos de identidades de carga de trabajo de Azure, ejecuta el siguiente comando:

    gcloud iam workload-identity-pools providers create-oidc PROVIDER_ID \
        --location="global" \
        --workload-identity-pool="POOL_ID" \
        --issuer-uri="ISSUER_URI" \
        --allowed-audiences="APPLICATION_ID_URI" \
        --attribute-mapping="MAPPINGS" \
        --attribute-condition="CONDITIONS"
    

    Haz los cambios siguientes:

    • PROVIDER_ID: ID único del proveedor.
    • POOL_ID: el ID del grupo.
    • ISSUER_URI: el ID de cliente (GUID) de tu cliente de Microsoft Entra ID, que a veces se muestra con el formato https://sts.windows.net/TENANT_ID. El URI del emisor puede variar. Para encontrar el tuyo, puedes depurar tu JWT con JWT.io.
    • APPLICATION_ID_URI: ID de aplicación URI que usaste cuando registraste la aplicación en Microsoft Entra ID.
    • MAPPINGS: lista separada por comas de asignaciones de atributos que hayas identificado anteriormente.
    • CONDITIONS: (Opcional) La condición del atributo que has identificado anteriormente.

    Ejemplo:

    gcloud iam workload-identity-pools providers create-oidc example-provider \
        --location="global" \
        --workload-identity-pool="pool-1" \
        --issuer-uri="https://sts.windows.net/00000000-1111-2222-3333-444444444444" \
        --allowed-audiences="api://my-app" \
        --attribute-mapping="google.subject=assertion.sub,google.groups=assertion.groups"

Autenticar una carga de trabajo

Debes seguir estos pasos una vez por 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.

  1. En la Trusted Cloud consola, ve a la página Segmentos de Cloud Storage.

    Ir a Contenedores

  2. En la lista de segmentos, haga clic en el nombre del segmento al que quiera conceder el rol.

  3. Seleccione la pestaña Permisos, situada cerca de la parte superior de la página.

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

    Aparecerá el cuadro de diálogo Añadir principales.

  5. 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 proyecto
    • POOL_ID: el ID del grupo de cargas de trabajo
    • SUBJECT: 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 proyecto
    • WORKLOAD_POOL_ID: el ID del grupo de cargas de trabajo
    • GROUP: 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 proyecto
    • WORKLOAD_POOL_ID: el ID del grupo de cargas de trabajo
    • ATTRIBUTE_NAME: uno de los atributos que se ha asignado desde tu proveedor de identidades
    • ATTRIBUTE_VALUE: el valor del atributo
  6. 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.

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

  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. 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 acceso
    • PROJECT_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 trabajo
    • SUBJECT: el valor esperado del atributo que has asignado a google.subject
    • GROUP: el valor esperado del atributo que has asignado a google.groups
    • ATTRIBUTE_NAME: el nombre de un atributo personalizado en tu asignación de atributos
    • ATTRIBUTE_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

  1. Para crear una cuenta de servicio para la carga de trabajo externa, sigue estos pasos:

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

    3. Concede acceso a la cuenta de servicio a los recursos a los que quieras que accedan las identidades externas.

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

  1. Para conceder acceso mediante la suplantación de identidad de una cuenta de servicio en el mismo proyecto, sigue estos pasos:

    1. Ve a la página Grupos de Workload Identity.

      Ir a Grupos de Workload Identity

    2. Selecciona Conceder acceso.

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

    4. En la lista Cuentas de servicio, selecciona la cuenta de servicio que las identidades externas deben suplantar y haz lo siguiente:

    5. 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 como subject y el valor del atributo como el valor de la reclamación sub en los tokens emitidos por su proveedor de identidades externo.

    6. Para guardar la configuración, haz clic en Guardar y, a continuación, en Cerrar.

Cuenta de servicio en otro proyecto

  1. Para conceder acceso mediante la suplantación de identidad de una cuenta de servicio en otro proyecto, sigue estos pasos:

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

      Ir a Cuentas de servicio

    2. Selecciona la cuenta de servicio que quieras suplantar.

    3. Haz clic en Gestionar acceso.

    4. Haz clic en Añadir principal.

    5. 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 proyecto
      • POOL_ID: el ID del grupo de cargas de trabajo
      • SUBJECT: 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 proyecto
      • WORKLOAD_POOL_ID: el ID del grupo de cargas de trabajo
      • GROUP: 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 proyecto
      • WORKLOAD_POOL_ID: el ID del grupo de cargas de trabajo
      • ATTRIBUTE_NAME: uno de los atributos que se ha asignado desde tu proveedor de identidades
      • ATTRIBUTE_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 proyecto
      • WORKLOAD_POOL_ID: el ID del grupo de cargas de trabajo
    6. En Selecciona un rol, selecciona el rol Usuario de Workload Identity (roles/iam.workloadIdentityUser).

    7. 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 servicio
  • PROJECT_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 trabajo
  • SUBJECT: el valor esperado del atributo que has asignado a google.subject
  • GROUP: el valor esperado del atributo que has asignado a google.groups
  • ATTRIBUTE_NAME: el nombre de un atributo personalizado en tu asignación de atributos
  • ATTRIBUTE_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, la CLI de gcloud y Terraform pueden obtener automáticamente credenciales externas y usarlas para suplantar 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 define lo siguiente:

  • 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

Para crear un archivo de configuración de credenciales, sigue estos pasos:

Consola

Para descargar un archivo de configuración de credenciales en la consola Trusted Cloud , sigue estos pasos:

  1. En la Trusted Cloud consola, ve a la página Grupos de identidades de carga de trabajo.

    Ir a Grupos de Workload Identity

  2. Busca el grupo de identidades de carga de trabajo del IdP que quieras usar y haz clic en él.

  3. Si has elegido usar el acceso directo a los recursos, haz lo siguiente:

    1. Haz clic en Conceder acceso.

    2. Selecciona Conceder acceso mediante identidades federadas (recomendado).

    3. Haz clic en Descargar.

    4. Sigue las instrucciones del cuadro de diálogo Configurar tu aplicación, más adelante en este procedimiento.

  4. Si has elegido usar la suplantación de identidad de cuentas de servicio, haz lo siguiente:

    1. Selecciona Cuentas de servicio conectadas.

    2. Busca la cuenta de servicio que quieras usar y haz clic en Descargar.

    3. Sigue las instrucciones del cuadro de diálogo Configurar tu aplicación, más adelante en este procedimiento.

  5. En el cuadro de diálogo Configure your application (Configurar la aplicación), selecciona el proveedor que contenga las identidades externas.

  6. Proporciona los siguientes ajustes adicionales:

    AWS

    No es necesario configurar nada más.

    Azure

    URL de ID de aplicación: URI de ID de aplicación de la aplicación de Azure

  7. Selecciona Descargar configuración para descargar el archivo de configuración de las credenciales y, a continuación, haz clic en Cerrar.

gcloud

Para crear un archivo de configuración de credenciales con gcloud iam workload-identity-pools create-cred-config, haz lo siguiente:

AWS

Para crear un archivo de configuración de credenciales que permita a la biblioteca obtener un token de acceso de los metadatos de la instancia de EC2, haz lo siguiente:

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 \
    --aws \
    --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: el 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 una cuenta de servicio, sustitúyelo por la dirección de correo de la cuenta de servicio. Omite esta marca si no usas la suplantación de identidad de cuentas de servicio.
  • SERVICE_ACCOUNT_TOKEN_LIFETIME: si usas la suplantación de identidad de la cuenta de servicio, sustitúyelo por el tiempo de vida del token de acceso de la cuenta de servicio, en segundos. Si no se proporciona, el valor predeterminado es 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 la constraints/iam.allowServiceAccountCredentialLifetimeExtension restricción de la política de organización.
  • FILEPATH: el archivo en el que se guardará la configuración.

Si usas IMDSv2 de AWS, debes añadir una marca adicional --enable-imdsv2 al comando gcloud iam workload-identity-pools create-cred-config:

gcloud iam workload-identity-pools create-cred-config \
    projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID \
    --service-account=SERVICE_ACCOUNT_EMAIL \
    --aws \
    --enable-imdsv2 \
    --output-file=FILEPATH.json

Si no puedes usar el servidor de metadatos de AWS, puedes proporcionar las credenciales de seguridad de AWS a través de las siguientes variables de entorno de AWS:

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • AWS_REGION o AWS_DEFAULT_REGION
  • Opcional: AWS_SESSION_TOKEN

La CLI de gcloud y las bibliotecas usan estas variables de entorno de AWS cuando el servidor de metadatos de AWS no está disponible.

Azure

Crea un archivo de configuración de credenciales que permita a la biblioteca obtener un token de acceso del servicio de metadatos de instancias de Azure (IMDS):

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 \
    --azure \
    --app-id-uri APPLICATION_ID_URI \
    --output-file=FILEPATH.json

Haz los cambios siguientes:

  • PROJECT_NUMBER: número del proyecto que contiene el grupo de identidades de carga de trabajo.
  • POOL_ID: el 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 una cuenta de servicio, sustitúyelo por la dirección de correo de la cuenta de servicio. Omite esta marca si no usas la suplantación de identidad de cuentas de servicio.
  • APPLICATION_ID_URI: el URI del ID de aplicación de la aplicación de Azure.
  • SERVICE_ACCOUNT_TOKEN_LIFETIME: si usas la suplantación de identidad de la cuenta de servicio,es el tiempo de vida del token de acceso de la cuenta de servicio en segundos. Si no se proporciona, el valor predeterminado es 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 la constraints/iam.allowServiceAccountCredentialLifetimeExtension restricción de la política de organización.
  • FILEPATH: el archivo en el que se guardará la configuración.

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 en tu entorno de AWS o Azure:

  1. Inicializa una variable de entorno GOOGLE_APPLICATION_CREDENTIALS y dirígela al archivo de configuración de la credencial:

    Bash

      export GOOGLE_APPLICATION_CREDENTIALS=`pwd`/FILEPATH.json
      
    donde FILEPATH es la ruta relativa al archivo de configuración de las credenciales.

    PowerShell

      $env:GOOGLE_APPLICATION_CREDENTIALS = Resolve-Path 'FILEPATH.json'
      
    donde FILEPATH es la ruta relativa al archivo de configuración de las credenciales.
  2. Usa una biblioteca o herramienta de cliente que admita la federación de identidades de cargas de trabajo y que pueda encontrar credenciales automáticamente:

    C++

    Las Trusted Cloud bibliotecas de cliente de C++ admiten Workload Identity Federation desde la versión v2.6.0. Para usar la federación de identidades de cargas de trabajo, debes compilar las bibliotecas de cliente con la versión 1.36.0 o una posterior de gRPC.

    Go

    Las bibliotecas de cliente de Go admiten la federación de identidades de carga de trabajo si usan la versión v0.0.0-20210218202405-ba52d332ba99 o una posterior del módulo golang.org/x/oauth2.

    Para comprobar qué versión de este módulo usa tu biblioteca de cliente, ejecuta los siguientes comandos:

    cd $GOPATH/src/cloud.google.com/go
    go list -m golang.org/x/oauth2
    

    Java

    Las bibliotecas de cliente de Java admiten la federación de identidades de cargas de trabajo si usan la versión 0.24.0 o posterior del artefacto com.google.auth:google-auth-library-oauth2-http.

    Para comprobar qué versión de este artefacto usa tu biblioteca de cliente, ejecuta el siguiente comando de Maven en el directorio de tu aplicación:

    mvn dependency:list -DincludeArtifactIds=google-auth-library-oauth2-http
    

    Node.js

    Las bibliotecas de cliente de Node.js admiten la federación de identidades de carga de trabajo si usan la versión 7.0.2 o una posterior del paquete google-auth-library.

    Para comprobar qué versión de este paquete usa tu biblioteca de cliente, ejecuta el siguiente comando en el directorio de tu aplicación:

    npm list google-auth-library
    

    Cuando creas un objeto GoogleAuth, puedes especificar un ID de proyecto o permitir que GoogleAuth lo encuentre automáticamente. Para encontrar el ID del 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 README del paquete google-auth-library.

    Python

    Las bibliotecas de cliente de Python admiten la federación de identidades de carga de trabajo si usan la versión 1.27.0 o una 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 paquete google-auth.

    gcloud

    Para autenticarte con la federación de identidades de cargas de trabajo, usa el comando gcloud auth login:

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

    Sustituye FILEPATH por la ruta del archivo de configuración de credenciales.

    La compatibilidad con Workload Identity Federation en la CLI de gcloud está disponible en la versión 363.0.0 y en versiones posteriores de la CLI de gcloud.

    Terraform

    El proveedorTrusted Cloud admite la federación de identidades de cargas de trabajo si usas la versión 3.61.0 o una posterior:

    terraform {
      required_providers {
        google = {
          source  = "hashicorp/google"
          version = "~> 3.61.0"
        }
      }
    }
    

    bq

    Para autenticarte mediante la federación de identidades de cargas de trabajo, usa el comando gcloud auth login, como se indica a continuación:

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

    Sustituye FILEPATH por la ruta del archivo de configuración de credenciales.

    La federación de identidades de carga de trabajo en bq está disponible en la versión 390.0.0 y en versiones posteriores de la CLI de gcloud.

    Si no puedes usar una biblioteca de cliente que admita la federación de identidades de carga de trabajo, puedes autenticarte de forma programática mediante la API REST.

Situaciones avanzadas

Autenticar una carga de trabajo mediante la API REST

Si no puedes usar las bibliotecas de cliente, sigue estos pasos para permitir que una carga de trabajo externa obtenga un token de acceso de corta duración mediante la API REST:

  1. Obtén las credenciales de tu proveedor de identidades externo:

    AWS

    Crea un documento JSON que contenga la información que normalmente incluirías en una solicitud al endpoint GetCallerIdentity() de AWS, incluida una firma de solicitud válida.

    Workload Identity Federation se refiere a este documento JSON como un token GetCallerIdentity. El token permite que la federación de identidades de cargas de trabajo verifique la identidad sin revelar la clave de acceso secreta de AWS.

    Un token GetCallerIdentity tiene un aspecto similar al siguiente:

    {
      "url": "https://sts.amazonaws.com?Action=GetCallerIdentity&Version=2011-06-15",
      "method": "POST",
      "headers": [
        {
          "key": "Authorization",
          "value" : "AWS4-HMAC-SHA256 Credential=AKIASOZTBDV4D7ABCDEDF/20200228/us-east-1/sts/aws4_request, SignedHeaders=host;x-amz-date,Signature=abcedefdfedfd"
        },
        {
          "key": "host",
          "value": "sts.amazonaws.com"
        },
        {
          "key": "x-amz-date",
          "value": "20200228T225005Z"
        },
        {
          "key": "x-goog-cloud-target-resource",
          "value": "//iam.googleapis.com/projects/12345678/locations/global/workloadIdentityPools/my-pool/providers/my-aws-provider"
        },
        {
          "key": "x-amz-security-token",
          "value": "GizFWJTqYX...xJ55YoJ8E9HNU="
        }
      ]
    }
    

    El token contiene los siguientes campos:

    • url: URL del endpoint de AWS STS para GetCallerIdentity(), con el cuerpo de una solicitud GetCallerIdentity() estándar añadida como parámetros de consulta. Por ejemplo, https://sts.amazonaws.com?Action=GetCallerIdentity&Version=2011-06-15. Te recomendamos que uses endpoints de STS regionales y diseñes una infraestructura fiable para tus cargas de trabajo. Para obtener más información, consulta Puntos de conexión regionales de AWS STS.
    • method: el método de solicitud HTTP: POST.
    • headers: los encabezados de la solicitud HTTP, que deben incluir lo siguiente:
      • Authorization: la firma de la solicitud.
      • host: el nombre de host del campo url. Por ejemplo, sts.amazonaws.com.
      • x-amz-date: la hora a la que enviarás la solicitud, con el formato de cadena ISO 8601 básico. Este valor suele ser la hora actual y se usa para evitar ataques de repetición.
      • x-goog-cloud-target-resource: el nombre completo del recurso del proveedor de identidades sin el prefijo https:. Por ejemplo:
        //iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID
        
      • x-amz-security-token: token de sesión. Solo es obligatorio si usas credenciales de seguridad temporales.

    En el siguiente ejemplo se crea un token GetCallerIdentity codificado como URL. Extrae el token codificado como URL para usarlo más adelante. También crea un token legible por humanos solo para tu referencia:

    import json
    import urllib
    
    import boto3
    from botocore.auth import SigV4Auth
    from botocore.awsrequest import AWSRequest
    
    
    def create_token_aws(project_number: str, pool_id: str, provider_id: str) -> None:
        # Prepare a GetCallerIdentity request.
        request = AWSRequest(
            method="POST",
            url="https://sts.amazonaws.com/?Action=GetCallerIdentity&Version=2011-06-15",
            headers={
                "Host": "sts.amazonaws.com",
                "x-goog-cloud-target-resource": f"//iam.googleapis.com/projects/{project_number}/locations/global/workloadIdentityPools/{pool_id}/providers/{provider_id}",
            },
        )
    
        # Set the session credentials and Sign the request.
        # get_credentials loads the required credentials as environment variables.
        # Refer:
        # https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html
        SigV4Auth(boto3.Session().get_credentials(), "sts", "us-east-1").add_auth(request)
    
        # Create token from signed request.
        token = {"url": request.url, "method": request.method, "headers": []}
        for key, value in request.headers.items():
            token["headers"].append({"key": key, "value": value})
    
        # The token lets workload identity federation verify the identity without revealing the AWS secret access key.
        print("Token:\n%s" % json.dumps(token, indent=2, sort_keys=True))
        print("URL encoded token:\n%s" % urllib.parse.quote(json.dumps(token)))
    
    
    def main() -> None:
        # TODO(Developer): Replace the below credentials.
        # project_number: Google Project number (not the project id)
        project_number = "my-project-number"
        pool_id = "my-pool-id"
        provider_id = "my-provider-id"
    
        create_token_aws(project_number, pool_id, provider_id)
    
    
    if __name__ == "__main__":
        main()

    Inicializa las siguientes variables:

    Bash

    SUBJECT_TOKEN_TYPE="urn:ietf:params:aws:token-type:aws4_request"
    SUBJECT_TOKEN=TOKEN
    

    PowerShell

    $SubjectTokenType = "urn:ietf:params:aws:token-type:aws4_request"
    $SubjectToken = "TOKEN"
    

    Donde TOKEN es el token codificado como URL GetCallerIdentity que ha generado la secuencia de comandos.

    Azure

    Conéctate a una máquina virtual de Azure que tenga una identidad gestionada asignada y obtén un token de acceso del servicio de metadatos de instancias de Azure (IMDS):

    Bash

    SUBJECT_TOKEN_TYPE="urn:ietf:params:oauth:token-type:jwt"
    SUBJECT_TOKEN=$(curl \
      "http://169.254.169.254/metadata/identity/oauth2/token?resource=APP_ID_URI&api-version=2018-02-01" \
      -H "Metadata: true" | jq -r .access_token)
    echo $SUBJECT_TOKEN
    

    Este comando usa la herramienta jq. jq está disponible de forma predeterminada en Cloud Shell.

    PowerShell

    $SubjectTokenType = "urn:ietf:params:oauth:token-type:jwt"
    $SubjectToken = (Invoke-RestMethod `
      -Uri "http://169.254.169.254/metadata/identity/oauth2/token?resource=APP_ID_URI&api-version=2018-02-01" `
      -Headers @{Metadata="true"}).access_token
    Write-Host $SubjectToken
    

    Donde APP_ID_URI es el URI del ID de aplicación de la aplicación que has configurado para la federación de identidades de cargas de trabajo.

  2. Usa la API Security Token Service para intercambiar la credencial por un token de acceso de corta duración:

    Bash

    STS_TOKEN=$(curl https://sts.googleapis.com/v1/token \
        --data-urlencode "audience=//iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID" \
        --data-urlencode "grant_type=urn:ietf:params:oauth:grant-type:token-exchange" \
        --data-urlencode "requested_token_type=urn:ietf:params:oauth:token-type:access_token" \
        --data-urlencode "scope=https://www.googleapis.com/auth/cloud-platform" \
        --data-urlencode "subject_token_type=$SUBJECT_TOKEN_TYPE" \
        --data-urlencode "subject_token=$SUBJECT_TOKEN" | jq -r .access_token)
    echo $STS_TOKEN
    

    PowerShell

    [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12
    $StsToken = (Invoke-RestMethod `
        -Method POST `
        -Uri "https://sts.googleapis.com/v1/token" `
        -ContentType "application/json" `
        -Body (@{
            "audience"           = "//iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID"
            "grantType"          = "urn:ietf:params:oauth:grant-type:token-exchange"
            "requestedTokenType" = "urn:ietf:params:oauth:token-type:access_token"
            "scope"              = "https://www.googleapis.com/auth/cloud-platform"
            "subjectTokenType"   = $SubjectTokenType
            "subjectToken"       = $SubjectToken
        } | ConvertTo-Json)).access_token
    Write-Host $StsToken
    

    Sustituye los siguientes valores:

    • PROJECT_NUMBER: número de proyecto 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: ID del proveedor de grupos de identidades de carga de trabajo
  3. Si usas la suplantación de identidad de una cuenta de servicio, usa el token del servicio de tokens de seguridad para invocar el método generateAccessToken de la API IAM Service Account Credentials para obtener un token de acceso.

Tokens para servicios de Cloud Run

Cuando accedas a un servicio de Cloud Run, debes usar un token de ID.

Bash

TOKEN=$(curl -0 -X POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL:generateIdToken \
    -H "Content-Type: text/json; charset=utf-8" \
    -H "Authorization: Bearer $STS_TOKEN" \
    -d @- <<EOF | jq -r .token
    {
        "audience": "SERVICE_URL"
    }
EOF
)
echo $TOKEN

PowerShell

$Token = (Invoke-RestMethod `
    -Method POST `
    -Uri "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL:generateIdToken" `
    -Headers @{ "Authorization" = "Bearer $StsToken" } `
    -ContentType "application/json" `
    -Body (@{
        "audience" = "SERVICE_URL"
    } | ConvertTo-Json)).token
Write-Host $Token

Haz los cambios siguientes:

  • SERVICE_ACCOUNT_EMAIL: la dirección de correo de la cuenta de servicio.
  • SERVICE_URL: la URL del servicio (por ejemplo, https://my-service-12345-us-central1.run.app). También puedes definirlo en tu endpoint de servicio personalizado. Para obtener más información, consulta el artículo Información sobre las audiencias personalizadas.

Tokens para otras plataformas

Cuando accedas a otro servicio, debes usar un token de acceso.

Bash

TOKEN=$(curl -0 -X POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL:generateAccessToken \
    -H "Content-Type: text/json; charset=utf-8" \
    -H "Authorization: Bearer $STS_TOKEN" \
    -d @- <<EOF | jq -r .accessToken
    {
        "scope": [ "https://www.googleapis.com/auth/cloud-platform" ]
    }
EOF
)
echo $TOKEN

PowerShell

$Token = (Invoke-RestMethod `
    -Method POST `
    -Uri "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL:generateAccessToken" `
    -Headers @{ "Authorization" = "Bearer $StsToken" } `
    -ContentType "application/json" `
    -Body (@{
        "scope" = , "https://www.googleapis.com/auth/cloud-platform"
    } | ConvertTo-Json)).accessToken
Write-Host $Token

Haz los cambios siguientes:

  • SERVICE_ACCOUNT_EMAIL: la dirección de correo de la cuenta de servicio.

Siguientes pasos