Configura la federación de Workload Identity con AWS o Azure

En esta guía, se describe cómo usar la federación de identidades para cargas de trabajo para permitir que las cargas de trabajo de AWS y Azure se autentiquen en Google Cloud sin una clave de cuenta de servicio.

Mediante la federación de identidades para cargas de trabajo, las cargas de trabajo que se ejecutan en AWS EC2 y Azure pueden intercambiar sus credenciales específicas del entorno por tokens del servicio de tokens de seguridad de Google Cloud de corta duración.

Las credenciales específicas del entorno incluyen lo siguiente:

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

Antes de comenzar

  • Configura la autenticación.

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

    Python

    Para usar las muestras de Python de esta página en un entorno de desarrollo local, instala e inicializa gcloud CLI y, luego, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

      gcloud init
    3. If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

    Si deseas obtener más información, consulta Configura ADC para un entorno de desarrollo local en la documentación de autenticación de Google Cloud.

Prepara tu proveedor de identidad externo

Solo debes realizar estos pasos una vez por cada usuario de Microsoft Entra ID o cuenta de AWS.

AWS

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

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

Azure

Debes crear una aplicación de Microsoft Entra ID nueva en tu usuario de Microsoft Entra ID y configurarla para que pueda usarse en la federación de identidades para cargas de trabajo.

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

Para crear la aplicación, haz lo siguiente:

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

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

    Necesitarás el URI de ID de aplicación más adelante cuando configures el proveedor de grupo de identidades para cargas de trabajo.

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

  1. Crea una identidad administrada. Toma nota del ID de objeto de la identidad administrada. La necesitarás más adelante cuando configures el robo de identidad.

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

Configura la federación de identidades para cargas de trabajo

Solo debes realizar estos pasos una vez por cuenta de AWS o usuario de Microsoft Entra ID. Luego, puedes usar el mismo grupo y proveedor de identidades para cargas de trabajo en varias cargas de trabajo y en varios proyectos de Google Cloud.

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

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

    Go to project selector

  2. Es mejor usar un proyecto exclusivo para administrar los grupos y los proveedores de identidades para cargas de trabajo.
  3. Make sure that billing is enabled for your Google Cloud project.

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

    Enable the APIs

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

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

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

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

AWS

Las asignaciones de atributos pueden usar los campos de respuesta para 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 realiza la llamada.

Si tu aplicación se ejecuta en una instancia de Amazon Elastic Compute Cloud (EC2) con una función adjunta, 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 realiza lo siguiente:

  • Usa el ARN como identificador de asunto, por ejemplo: "arn:aws:sts::000000000000:assumed-role/ec2-my-role/i-00000000000000000.
  • Ingresa un atributo personalizado account y asígnale el ID de la cuenta de AWS.
  • Ingresa un atributo personalizado aws_role y asígnale el nombre de rol de AWS, por ejemplo: ec2-my-role.
  • Introduce un atributo personalizado aws_ec2_instance y asígnale el ID de instancia de EC2, por ejemplo: i-00000000000000000.

Mediante esta asignación, puedes otorgar acceso a lo siguiente:

  • Una instancia 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

Las asignaciones de atributos pueden usar las reclamaciones incorporadas 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

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

Si no estás seguro de la lista de reclamaciones a las que puedes hacer referencia, haz lo siguiente:

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

  2. Obtén un token de acceso de Azure Instance Metadata Service (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 de 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
    

    Reemplaza APP_ID_URI por el URI de ID de aplicación de la aplicación que configuraste para la federación de Workload Identity.

  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 incorporadas en el token de acceso.

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

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.

AWS

Puedes usar una condición de atributo a fin de restringir qué usuarios y roles de IAM pueden usar la federación de Workload Identity para obtener tokens de Google Cloud de corta duración.

Por ejemplo, la siguiente condición restringe el acceso a los roles de AWS y no permite otros identificadores de IAM:

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

Azure

Puedes usar una condición de atributo a fin de restringir qué usuarios y principales de servicio pueden usar la federación de identidades para cargas de trabajo con el objetivo de obtener tokens de Google Cloud de corta duración. Como alternativa, puedes configurar tu aplicación de Microsoft Entra ID para que use asignaciones de roles de la aplicación.

Crea el proveedor y el grupo de identidades para cargas de trabajo

Roles obligatorios

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

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

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

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

Ya recopilaste toda la información que necesitas para crear un grupo y proveedor de Workload Identity:

Console

  1. En la consola de Google Cloud, ve a la página Proveedor y grupo de cargas de trabajo nuevos.

    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. Establece la configuración del proveedor:

    AWS

    Establece la siguiente configuración del proveedor:

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

    Azure

    Establece la siguiente configuración del proveedor:

    • Selecciona un proveedor: OpenID Connect (OIDC).
    • Nombre del proveedor: nombre para el proveedor. El nombre también se usa como el ID del proveedor. No puedes cambiar el ID del proveedor más adelante.
    • URL del emisor: https://sts.windows.net/TENANT_ID. Reemplaza TENANT_ID por el ID de usuario (GUID) de tu usuario de Microsoft Entra ID.
    • Públicos permitidos: URI de 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 de proveedores, agrega las asignaciones de atributos que identificaste antes.

  7. En la sección Condiciones de atributos, ingresa la condición de atributo que identificaste antes. Deja el campo en blanco si no tienes una condición de atributo.

  8. Haz clic en Guardar para crear el proveedor y el grupo de Workload Identity.

gcloud

  1. Crea un nuevo grupo de identidades para cargas de trabajo:

    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: la descripción del grupo. Esta descripción aparece cuando se otorga acceso a identidades de grupo.
  2. Agrega un proveedor de grupos de Workload Identity:

    AWS

    A fin de crear el proveedor de grupos de Workload Identity para 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"
    

    Reemplaza lo siguiente:

    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

    Si deseas crear el proveedor de grupos de Workload Identity para 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"
    

    Reemplaza lo siguiente:

    • PROVIDER_ID: el ID único para el proveedor.
    • POOL_ID: el ID del grupo.
    • ISSUER_URI: Es el ID de usuario (GUID) de tu usuario de Microsoft Entra ID, a veces con formato https://sts.windows.net/TENANT_ID. El URI del emisor puede variar, y para encontrar el URI de la entidad emisora, puedes depurar tu JWT con JWT.io.
    • APPLICATION_ID_URI: URI de ID de aplicación que usaste cuando registraste la aplicación en Microsoft Entra ID.
    • MAPPINGS: Es la lista separada por comas de las asignaciones de atributos que identificaste antes.
    • CONDITIONS: (Opcional) Es la condición de atributo que identificaste antes.

    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"

Autentica una carga de trabajo

Debes realizar estos pasos una vez por carga de trabajo.

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

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

Acceso directo a recursos

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

Console

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

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

    Ir a Buckets

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

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

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

    Aparecerá el cuadro de diálogo Agregar principales.

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

    Por tema

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

    Reemplaza lo siguiente:

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

    Por grupo

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

    Reemplaza lo siguiente:

    • PROJECT_NUMBER: el número del proyecto
    • WORKLOAD_POOL_ID: el ID del grupo de cargas de trabajo
    • GROUP: El grupo asignado desde tu IdP, por ejemplo: administrator-group@example.com

    Por atributo

    principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE
    

    Reemplaza lo siguiente:

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

  7. Haz clic en Guardar.

gcloud

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

  1. Obtén el número del proyecto en el que se define el recurso.

    gcloud projects describe $(gcloud config get-value core/project) --format=value\(projectNumber\)
    
  2. Otorga el acceso al recurso.

    Para usar gcloud CLI con el objetivo de otorgar el rol de Visualizador de objetos de almacenamiento (roles/storage.objectViewer) a identidades externas que cumplan con ciertos criterios, ejecuta el siguiente comando.

    Por tema

    gcloud storage buckets add-iam-policy-binding BUCKET_ID \
        --role=roles/storage.objectViewer \
        --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT"

    Por grupo

    gcloud storage buckets add-iam-policy-binding BUCKET_ID \
        --role=roles/storage.objectViewer \
        --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP"

    Por atributo

    gcloud storage buckets add-iam-policy-binding BUCKET_ID \
        --role=roles/storage.objectViewer \
        --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE"

    Reemplaza lo siguiente:

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

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

Uso de identidad temporal como cuenta de servicio

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

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

      Enable the APIs

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

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

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

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

Console

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

Cuenta de servicio en el mismo proyecto

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

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

      Ir a Grupos de Workload Identity

    2. Selecciona Otorgar acceso.

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

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

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

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

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

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

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

Cuenta de servicio en otro proyecto

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

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

      Ir a Cuentas de servicio

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

    3. Haz clic en Administrar acceso.

    4. Haz clic en Agregar principal.

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

      Por tema

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

      Reemplaza lo siguiente:

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

      Por grupo

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

      Reemplaza lo siguiente:

      • PROJECT_NUMBER: el número del proyecto
      • WORKLOAD_POOL_ID: el ID del grupo de cargas de trabajo
      • GROUP: El grupo asignado desde tu IdP, por ejemplo: administrator-group@example.com

      Por atributo

      principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE
      

      Reemplaza lo siguiente:

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

      Junto al grupo

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

      Reemplaza lo siguiente:

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

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

gcloud

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

Por tema

gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \
    --role=roles/iam.workloadIdentityUser \
    --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT"

Por grupo

gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \
    --role=roles/iam.workloadIdentityUser \
    --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP"

Por atributo

gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \
    --role=roles/iam.workloadIdentityUser \
    --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE"

Reemplaza lo siguiente:

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

Descarga o crea una configuración de credenciales

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

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

Para crear un archivo de configuración de credenciales, haz lo siguiente:

Console

Para descargar un archivo de configuración de credenciales en la consola de Google Cloud, haz lo siguiente:

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

    Ir a Grupos de Workload Identity

  2. Busca el grupo de Workload Identity para el IdP que deseas usar y haz clic en él.

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

    1. Haz clic en Otorgar acceso.

    2. Selecciona Otorgar acceso con identidades federadas (recomendado).

    3. Haz clic en Descargar.

    4. Continúa con las instrucciones del diálogo Configurar tu aplicación, que se encuentra más adelante en este procedimiento.

  4. Si elegiste usar la identidad temporal como cuenta 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. Continúa con las instrucciones del diálogo Configurar tu aplicación, que se encuentra más adelante en este procedimiento.

  5. En el cuadro de diálogo Configurar tu aplicación, selecciona el proveedor que contiene las identidades externas.

  6. Proporciona la siguiente configuración adicional:

    AWS

    No se requiere ninguna configuración adicional.

    Azure

    URL de ID de aplicación: el 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, luego, haz clic en Descartar.

gcloud

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

AWS

Para crear un archivo de configuración de credenciales que permita que la biblioteca obtenga 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

Reemplaza lo siguiente:

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

Si usas AWS IMDSv2, se debe agregar 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 credenciales de seguridad de AWS a través de las siguientes variables de entorno:

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • Ya sea de 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 Azure Instance Metadata Service (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

Reemplaza lo siguiente:

  • PROJECT_NUMBER: El número del proyecto que contiene el grupo de Workload Identity.
  • POOL_ID: El ID del grupo de Workload Identity
  • PROVIDER_ID: El ID del proveedor de grupos de Workload Identity
  • SERVICE_ACCOUNT_EMAIL: Si usas la identidad temporal como cuenta de servicio, reemplaza por la dirección de correo electrónico de la cuenta de servicio. Omite esta marca si no usas la identidad temporal como cuenta de servicio.
  • APPLICATION_ID_URI: El URI de ID de aplicación de la aplicación de Azure
  • SERVICE_ACCOUNT_TOKEN_LIFETIME: Si usas la identidad temporal como cuenta de servicio, el ciclo de vida del token de acceso de la cuenta de servicio, en segundos; el valor predeterminado es de una hora cuando no se proporciona. Omite esta marca si no usas la identidad temporal como cuenta de servicio. Para especificar un ciclo de vida de más de una hora, debes configurar la restricción de la política de la organización constraints/iam.allowServiceAccountCredentialLifetimeExtension.
  • FILEPATH: El archivo en el que se guardará la configuración

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

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

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

    Bash

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

    PowerShell

      $env:GOOGLE_APPLICATION_CREDENTIALS = Resolve-Path 'FILEPATH.json'
      
    En el ejemplo anterior, FILEPATH es la ruta de acceso relativa al archivo de configuración de credenciales.
  2. Usa una biblioteca cliente o herramienta que admita la federación de identidades para cargas de trabajo y pueda encontrar credenciales de forma automática:

    C++

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

    Go

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

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

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

    Java

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

    Para verificar qué versión de este artefacto usa tu biblioteca 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 cliente de Node.js admiten la federación de identidades para cargas de trabajo si usan la versión 7.0.2 o una versión posterior del paquete google-auth-library.

    Para verificar qué versión de este paquete usa tu biblioteca 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 del proyecto o puedes permitir que GoogleAuth encuentre 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 el README del paquete google-auth-library.

    Python

    Las bibliotecas cliente para Python admiten la federación de identidades para cargas de trabajo si usan la versión 1.27.0 o posterior del paquete google-auth.

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

    pip show google-auth
    

    Si deseas especificar un ID del proyecto para el cliente de autenticación, puedes configurar la variable de entorno GOOGLE_CLOUD_PROJECT o permitir que el cliente busque el ID del proyecto automáticamente. Para encontrar el ID del proyecto de manera automática, la cuenta de servicio en el archivo de configuración debe tener el rol de Navegador (roles/browser) o un rol con permisos equivalentes en tu proyecto. Para obtener más información, consulta la guía del usuario del paquete google-auth.

    gcloud

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

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

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

    La asistencia para la federación de identidades para cargas de trabajo en gcloud CLI está disponible en la versión 363.0.0 y posteriores de gcloud CLI.

    Terraform

    El proveedor de servicios de Google Cloud admite la federación de identidades para 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 autenticar a través de la federación de identidades para cargas de trabajo, usa el comando gcloud auth login de la siguiente manera:

    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 en bq está disponible en la versión 390.0.0 y posteriores de gcloud CLI.

    Si no puedes usar una biblioteca cliente que admita la federación de identidades para cargas de trabajo, puedes autenticarte de manera programática con la API de REST.

Situaciones avanzadas

Autentica una carga de trabajo con la API de REST

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

  1. Obtén credenciales de tu IdP externo:

    AWS

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

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

    Un token GetCallerIdentity es similar al que se muestra a continuación:

    {
      "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: La URL del extremo de AWS STS para GetCallerIdentity(), con el cuerpo de una solicitud GetCallerIdentity() estándar anexada como parámetros de consulta. Por ejemplo, https://sts.amazonaws.com?Action=GetCallerIdentity&Version=2011-06-15 Te recomendamos usar extremos de STS regionales y diseñes una infraestructura confiable para tus cargas de trabajo. Para obtener más información, consulta Extremos regionales de AWS STS.
    • method: Es el método de solicitud HTTP: POST.
    • headers: Son 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 una string simple ISO 8601. Por lo general, este valor se establece en 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 identidad sin un prefijo https:. Por ejemplo:
        //iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID
        
      • x-amz-security-token: Es el token de sesión. Solo es necesario si usas credenciales de seguridad temporales.

    En el siguiente ejemplo, se crea un token GetCallerIdentity codificado en URL. Extrae el token codificado en URL para usarlo más adelante. También crea un token legible 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"
    

    En el ejemplo anterior, TOKEN es el token GetCallerIdentity codificado como URL que generó la secuencia de comandos anterior.

    Azure

    Conéctate a una VM de Azure que tenga una identidad administrada y obtén un token de acceso de Azure Instance Metadata Service (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 de 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
    

    En el ejemplo anterior, APP_ID_URI es el URI de ID de aplicación de la aplicación que configuraste para la federación de Workload Identity.

  2. Usa la API de servicio de token de seguridad 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
    

    Reemplaza los siguientes valores:

    • PROJECT_NUMBER: Es el número del proyecto que contiene el grupo de Workload Identity.
    • POOL_ID: Es el ID del grupo de Workload Identity.
    • PROVIDER_ID: Es el ID del proveedor de grupos de Workload Identity.
  3. Si usas la identidad temporal como cuenta de servicio, usa el token del servicio de tokens de seguridad para invocar el método generateAccessToken de la API de Service Account Credentials de IAM para obtener un token de acceso, haz lo siguiente:

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

Reemplaza lo siguiente:

  • SERVICE_ACCOUNT_EMAIL: La dirección de correo electrónico de la cuenta de servicio
  • SERVICE_URL: La URL del servicio, por ejemplo, https://my-service-12345-us-central1.run.app. También puedes configurarlo en tu extremo de servicio personalizado. Para obtener más información, consulta Información sobre los públicos personalizados.

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

Reemplaza lo siguiente:

  • SERVICE_ACCOUNT_EMAIL: La dirección de correo electrónico de la cuenta de servicio

¿Qué sigue?