Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Un servicio que se ejecuta en Google Cloud normalmente se autentica en Microsoft Entra ID con un secreto de aplicación de Microsoft Entra almacenado para que pueda llegar a Azure recursos. Debe proteger y rotar ese secreto, y el servicio se enfrenta a una interrupción si el secreto expira antes de reemplazarlo.
La federación de identidades de carga de trabajo quita ese secreto almacenado. Configure una aplicación de Microsoft Entra para confiar en el token de identificador que Google emite en una cuenta de servicio de Google Cloud y el servicio intercambia su token emitido por Google para un token de acceso de Microsoft Entra en lugar de almacenar una credencial.
En este tutorial, identificará una cuenta de servicio de Google Cloud, la federa con una aplicación de Microsoft Entra e intercambiará un token de identificador emitido por Google para un token de acceso de Microsoft Entra que la carga de trabajo usa para llamar a un recurso de Azure, como Azure Blob Storage.
El tutorial tiene tres partes secuenciales que se compilan en un escenario completado. Cada parte depende de la salida de la parte antes de ella.
En este tutorial, usted hará lo siguiente:
- Identifique una cuenta de servicio de Google Cloud y obtenga su identificador único.
- Configure una aplicación de Microsoft Entra para confiar en el token emitido por Google.
- Exchange un token de identificador de Google para un token de acceso de Microsoft Entra y acceder a un recurso de Azure.
En el diagrama siguiente se muestra el flujo de federación de identidades de carga de trabajo: una carga de trabajo obtiene un token de un proveedor de identidades externo, lo intercambia con el Plataforma de identidad de Microsoft para un token de acceso y usa ese token de acceso para llegar a un recurso de Azure. En este tutorial, el proveedor de identidades externo es Google Cloud y el token es un token de identificador emitido por Google.
Prerequisites
- Un inquilino de Microsoft Entra y una suscripción de Azure. Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
- Un proyecto de Google Cloud y una carga de trabajo que se ejecuta en un servicio de Google Cloud que puede obtener un token de identificador para una cuenta de servicio, como App Engine o Compute Engine.
- Acceso a la consola de Google Cloud con permiso para ver las cuentas de servicio en IAM & Admin.
- La herramienta de línea de comandos CLI de Azure (
az) instalada y configurada para llegar al inquilino. También puede completar los pasos de Microsoft Entra en el Centro de administración Microsoft Entra. - Permiso para agregar una credencial de identidad federada a un registro de aplicación o una identidad administrada. Para agregar una credencial federada a un registro de aplicación, la cuenta debe ser propietario de la aplicación o contener uno de los roles Administrador de aplicaciones, Desarrollador de aplicaciones o Administrador de aplicaciones en la nube, o bien tener el
microsoft.directory/applications/credentials/updatepermiso.
Parte 1: Identificación de una cuenta de servicio de Google Cloud
La carga de trabajo de Google Cloud necesita una identidad para la que Google pueda emitir tokens. Las cuentas de servicio de Google Cloud proporcionan esta identidad. Use la cuenta de servicio predeterminada del proyecto de Google Cloud o cree una cuenta de servicio dedicada para la carga de trabajo.
Google emite tokens de identificador para una cuenta de servicio en la que la sub notificación (sujeto) es el identificador único de la cuenta de servicio y la iss notificación (emisor) es https://accounts.google.com. Use ambos valores para configurar la confianza en la aplicación Microsoft Entra en la parte 2.
En la consola de Google Cloud, vaya a IAM y cuentas de servicio de administración>.
Seleccione la cuenta de servicio en la que se ejecuta la carga de trabajo.
En los detalles de la cuenta de servicio, busque su identificador único y copie el valor. Este valor es la
subnotificación en los tokens que Google emite para la cuenta de servicio.
Registre el identificador único como <service-account-unique-id>. Se usa como sujeto de la credencial de identidad federada en la parte 2.
Parte 2: Configuración de una aplicación de Microsoft Entra para confiar en el token de Google
En esta parte, agregará una credencial de identidad federada a una aplicación de Microsoft Entra para que Microsoft Entra ID confíe en los tokens de identificador que google emite para su cuenta de servicio. Una credencial de identidad federada necesita tres entradas:
-
subject: debe coincidir con lasubnotificación en el token emitido por Google: el identificador único de la cuenta de servicio,<service-account-unique-id>. -
issuer: debe coincidir con laissnotificación. Para Google Cloud, este valor eshttps://accounts.google.com. El emisor debe cumplir con la especificación de detección de OpenID Connect, ya que Microsoft Entra ID usa la dirección URL del emisor para capturar las claves que validan el token. -
audiences: debe coincidir con laaudnotificación. Use el valorapi://AzureADTokenExchangerecomendado Microsoft .
Una aplicación Microsoft Entra admite un número limitado de credenciales de identidad federada. Para conocer el límite actual y otras restricciones, consulte Consideraciones y restricciones importantes para las credenciales de identidad federada.
Cree un archivo denominado
credential.jsoncon el siguiente contenido. Reemplace por<service-account-unique-id>el identificador único que copió en la parte 1.{ "name": "AccessFromGoogle", "issuer": "https://accounts.google.com", "subject": "<service-account-unique-id>", "audiences": ["api://AzureADTokenExchange"], "description": "Federated credential for a Google Cloud workload" }Agregue la credencial de identidad federada al registro de la aplicación. Reemplace por
<your-app-id>el identificador de aplicación (cliente) del registro de la aplicación.az ad app federated-credential create --id <your-app-id> --parameters credential.json
También puede agregar la credencial federada en el Centro de administración Microsoft Entra. Vaya a Registros de aplicaciones> lascredenciales federadasde certificados y secretos>> de la aplicación >Agregar credenciales y seleccione el escenario Otro emisor. Proporcione https://accounts.google.com como emisor y el identificador único de la cuenta de servicio como sujeto. Para conocer los pasos detallados, consulte Configuración de una aplicación para confiar en un proveedor de identidades externo.
Para configurar la credencial en una identidad administrada asignada por el usuario en lugar de un registro de aplicación, use el comando siguiente. Necesita el rol Propietario o Colaborador en la identidad administrada. Para conocer los pasos detallados, consulte Configuración de una identidad administrada asignada por el usuario para confiar en un proveedor de identidades externo.
az identity federated-credential create \
--name AccessFromGoogle \
--identity-name <your-identity-name> \
--resource-group <your-resource-group> \
--issuer https://accounts.google.com \
--subject <service-account-unique-id> \
--audience api://AzureADTokenExchange
Conceda a la aplicación o a la identidad administrada acceso a los recursos de Azure a los que llama la carga de trabajo, como una asignación de roles en la cuenta de almacenamiento.
Parte 3: Exchange un token de Google para un token de acceso de Microsoft Entra
En esta parte, la carga de trabajo obtiene un token de identificador emitido por Google para su cuenta de servicio y lo intercambia por un token de acceso de Microsoft Entra, que usa para llamar a un recurso de Azure.
Un servicio de Google Cloud, como App Engine o Compute Engine, solicita un token de identificador para su cuenta de servicio desde el servidor de metadatos de Google. Google administra las claves de firma, por lo que la carga de trabajo no necesita claves almacenadas.
Solicite un token de identificador de Google desde el servidor de metadatos. La audiencia de la solicitud debe coincidir con la audiencia que configuró en la credencial de identidad federada,
api://AzureADTokenExchange. El siguiente Node.js fragmento de código solicita el token y lo devuelve como una cadena. El concepto es el mismo en cualquier idioma.async function getGoogleIdToken() { const endpoint = "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=api://AzureADTokenExchange"; const headers = { "Metadata-Flavor": "Google" }; const response = await fetch(endpoint, { method: "GET", headers }); return response.text(); }Exchange el token de identificador de Google para un token de acceso de Microsoft Entra mediante
ClientAssertionCredentialdesde el SDK de identidad de Azure.ClientAssertionCredentialtoma una devolución de llamada que devuelve la aserción federada; en este caso, el token de identificador de Google. Proporcione el identificador de inquilino de Microsoft Entra comotenantIdy el identificador de aplicación (cliente) del registro de la aplicación comoclientId.import { ClientAssertionCredential } from "@azure/identity"; const credential = new ClientAssertionCredential(tenantId, clientId, getGoogleIdToken);Use la credencial con cualquier cliente de SDK de Azure. Por ejemplo, para llamar a Azure Blob Storage:
const { BlobServiceClient } = require("@azure/storage-blob"); const blobClient = new BlobServiceClient(blobUrl, credential);
Cuando el cliente necesita un token, invoca la devolución de llamada para capturar un token de identificador de Google nuevo, intercambia el token de Google con Plataforma de identidad de Microsoft para un token de acceso y almacena en caché el token de acceso resultante. Dado que ClientAssertionCredential proporciona la aserción federada a través de una devolución de llamada, la carga de trabajo nunca almacena un secreto.
ClientAssertionCredentialestá disponible en los SDK de Azure Identity, incluidos .NET, Java, JavaScript, Python y Go. Las bibliotecas MSAL también admiten aserciones de cliente si necesita un control de nivel inferior sobre el intercambio de tokens.
La carga de trabajo de Google Cloud ahora puede acceder a Microsoft Entra recursos protegidos sin secretos almacenados.
Limpieza de recursos
Si ya no necesita los recursos que creó en este tutorial, quítelos para evitar cargos continuos:
Elimine la credencial de identidad federada del registro de la aplicación:
az ad app federated-credential delete \ --id <your-app-id> \ --federated-credential-id AccessFromGoogleSi ha creado una cuenta de servicio de Google Cloud dedicada para este tutorial, elimínela en la consola de Google Cloud enCuentas de servicio de administración y> IAM.
Quite las asignaciones de roles que haya agregado para conceder acceso a la aplicación o a la identidad administrada a Azure recursos.
Contenido relacionado
- Federación de identidades de carga de trabajo
- Configuración de una aplicación para confiar en un proveedor de identidades externo
- Configurar una identidad administrada asignada por el usuario para confiar en un proveedor de identidades externo
- Consideraciones y restricciones importantes para las credenciales de identidad federada
- Creación de un federatedIdentityCredential (Microsoft Graph)