For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
Navegación principal

Configuración de la federación de identidades de carga de trabajo para Microsoft Azure

Usa Microsoft Azure como proveedor de identidades de carga de trabajo en cualquiera de estos escenarios:

  • Identidad administrada de Azure: intercambia un token de acceso de Microsoft Entra ID emitido para una identidad administrada por un token de acceso de OpenAI de corta duración.
  • AKS: intercambia un token proyectado de cuenta de servicio de Azure Kubernetes Service (AKS) por un token de acceso de OpenAI de corta duración.

Para Codex, usa esta página para obtener e inspeccionar el token de Microsoft Entra. Luego, configura la identidad de carga de trabajo de Codex para escribir ese token en un archivo e indicarle a Codex dónde encontrarlo. La asignación de cuenta de servicio y los ejemplos del SDK de esta página se aplican a la API de OpenAI.

Identidad administrada de Azure

Las identidades administradas de Azure permiten que las cargas de trabajo alojadas en Azure soliciten tokens de Microsoft Entra sin almacenar secretos de larga duración. En la federación de identidades de carga de trabajo de OpenAI, el token de identidad administrada es el token de sujeto que OpenAI valida antes de emitir un token de acceso de OpenAI.

Configuración de una identidad administrada de Azure

Crea o usa un registro de aplicación de Microsoft Entra que represente la audiencia de tokens en la que OpenAI debe confiar. Configura su URI del ID de aplicación; este URI es el valor de resource que tu carga de trabajo solicita a Azure Instance Metadata Service (IMDS) y aparece como la declaración aud en el token emitido. Para conocer los pasos de configuración de Microsoft, consulta la guía de Microsoft Entra para crear una nueva aplicación de Entra ID y una entidad de servicio.

El URI del ID de aplicación configurado en Microsoft Entra ID, el parámetro resource de IMDS, la declaración aud del token resultante y la audiencia del proveedor de identidades de carga de trabajo de OpenAI deben coincidir.

Crea una identidad administrada y luego asigna esa identidad al recurso de Azure que ejecuta tu aplicación, como una máquina virtual. El recurso debe poder llamar a IMDS en tiempo de ejecución. Para obtener detalles sobre la configuración de Azure, consulta la descripción general de las identidades administradas de Microsoft y la documentación del recurso de Azure correspondiente para asignar la identidad.

Obtención de un token de identidad administrada de Azure

Desde el recurso de Azure que tiene asignada la identidad administrada, solicita un token a IMDS con el URI del ID de aplicación como parámetro resource. Este token es el token de sujeto que OpenAI intercambia por un token de acceso emitido por OpenAI.

APPLICATION_ID_URI="api://<application-client-id>"

TOKEN=$(curl -sS -G -H "Metadata: true" \
  "http://169.254.169.254/metadata/identity/oauth2/token" \
  --data-urlencode "api-version=2018-02-01" \
  --data-urlencode "resource=${APPLICATION_ID_URI}" \
  | jq -r .access_token)
export TOKEN

Si el recurso tiene varias identidades administradas asignadas por el usuario, agrega el parámetro de consulta client_id, object_id o msi_res_id de la identidad administrada que quieras usar. Microsoft documenta los parámetros de solicitud de tokens de IMDS en Usar identidades administradas en una máquina virtual para obtener un token de acceso.

Verifica el token

Antes de configurar la federación de identidades de carga de trabajo, exporta el token de Microsoft Entra como TOKEN y luego ejecuta este script localmente para inspeccionar sus declaraciones:

const parts = process.env.TOKEN?.split(".") ?? [];
if (parts.length !== 3) {
  throw new Error("Expected a compact JWT with three segments");
}
if (!/^[A-Za-z0-9_-]+$/.test(parts[1]) || parts[1].length % 4 === 1) {
  throw new Error("JWT payload is not valid Base64URL");
}

const bytes = Buffer.from(parts[1], "base64url");
if (bytes.toString("base64url") !== parts[1]) {
  throw new Error("JWT payload is not valid Base64URL");
}
const decoded = new TextDecoder("utf-8", { fatal: true }).decode(bytes);
const claims = JSON.parse(decoded);
if (claims === null || Array.isArray(claims) || typeof claims !== "object") {
  throw new Error("JWT payload is not a JSON object");
}
console.log(decoded);

Este comando decodifica la carga útil del JWT sin verificar la firma del token. Usa un decodificador local para los tokens de producción y evita pegarlos en herramientas de terceros.

Un token de identidad administrada de Microsoft Entra ID decodificado tendrá un aspecto similar al siguiente:

{
  "iss": "https://login.microsoftonline.com/11111111-2222-3333-4444-555555555555/v2.0",
  "aud": "api://00000000-1111-2222-3333-444444444444",
  "tid": "11111111-2222-3333-4444-555555555555",
  "appid": "22222222-3333-4444-5555-666666666666",
  "oid": "33333333-4444-5555-6666-777777777777",
  "sub": "33333333-4444-5555-6666-777777777777",
  "xms_mirid": "/subscriptions/<subscription-id>/resourcegroups/my-resource-group/providers/Microsoft.Compute/virtualMachines/openai-wif-vm",
  "iat": 1716235422,
  "exp": 1716239022
}

Verifica las declaraciones que planeas configurar en OpenAI:

  • iss: usa el valor exacto del emisor que aparece en el token. El emisor puede ser https://login.microsoftonline.com/<tenant-id>/v2.0, pero no des por hecho que tiene ese sufijo.
  • aud: debe coincidir con el URI del ID de aplicación, el parámetro resource de IMDS y la audiencia del proveedor de identidades de carga de trabajo de OpenAI.
  • tid: el ID del inquilino de Microsoft Entra.
  • appid: el ID de aplicación/cliente de la identidad administrada, cuando está presente.
  • iat y exp: verifica la duración total del token, exp - iat, en segundos.

Para Codex, establece max_assertion_lifetime_seconds del proveedor en un límite aprobado que cubra el rango de duración de tokens previsto para el emisor. No uses la vigencia restante del token ni supongas que todos los tokens de Entra duran una hora. Microsoft documenta la duración variable de los tokens de acceso y no admite configurar la duración de los tokens de identidad administrada. Consulta el ejemplo de proveedor de la API de administración.

Los tokens de identidad administrada también pueden contener declaraciones como azp, oid, sub o xms_mirid. Usa el token decodificado como fuente de referencia y elige declaraciones que identifiquen con precisión la identidad administrada y el límite de recursos en los que confías.

Usa la carga útil decodificada para comparar el token que recibiste con los valores de emisor, audiencia y asignación configurados en OpenAI. La mayoría de los problemas de configuración se pueden detectar en las declaraciones iss, aud, tid y de identidad administrada antes de intercambiar el token.

Configuración de la federación de identidades de carga de trabajo

Crea un proveedor de identidades de carga de trabajo en OpenAI para el emisor de Microsoft Entra ID y luego agrega una asignación de cuenta de servicio que coincida con declaraciones estables del token de identidad administrada.

Primero configura el proveedor de identidades de carga de trabajo y luego crea la asignación de cuenta de servicio.

Configura el proveedor de identidades de carga de trabajo

  1. Crea el proveedor de identidades de carga de trabajo. Establece Nombre en un valor único, como azure-managed-identity-prod. Usa Descripción, por ejemplo, Production Azure managed identity workloads, para ayudar a los administradores a identificar el proveedor.

  2. Establece el emisor y la audiencia. Establece URL del emisor OIDC en el valor exacto de la declaración iss del token. Primero obtén un token de identidad administrada de muestra e inspecciona sus declaraciones. Por ejemplo, el emisor puede ser https://login.microsoftonline.com/<tenant-id>/v2.0. Establece Audiencia en el URI del ID de aplicación de Microsoft Entra que configuraste, como api://<application-client-id>. Este valor debe coincidir con la declaración aud del token.

  3. Usa la verificación de tokens de Microsoft Entra. Deja desactivada la opción Usar JWKS cargados para la verificación de tokens . OpenAI usa los metadatos del emisor de Microsoft Entra y JWKS para verificar el token de identidad administrada.

  4. Agrega transformaciones de atributos si necesitas atributos derivados para la asignación. Por ejemplo, ingresa managed_identity_client_id con la expresión assertion.appid para crear openai.managed_identity_client_id a partir de la declaración del ID de aplicación/cliente de la identidad administrada. El panel aplica el prefijo openai. automáticamente. Las declaraciones originales del token que ya comienzan con openai. se ignoran para las claves de asignación openai., a menos que se configure una transformación correspondiente.

Configura la asignación de cuenta de servicio

  1. Crea una asignación de cuenta de servicio. Establece Nombre en un valor único dentro de ese proveedor de identidades de carga de trabajo, como vm-openai-wif. Usa Descripción, por ejemplo, Production VM Azure managed identity workload, para explicar qué carga de trabajo puede usar la asignación.

  2. Exige la coincidencia de declaraciones estables de la identidad administrada. Agrega una fila con Clave y Valor por cada declaración que deba coincidir. Si el token contiene appid, establece Clave en appid y Valor en el ID de cliente de la identidad administrada. La declaración appid identifica el ID de aplicación/cliente de la identidad administrada y suele ser la declaración más estable para vincular una asignación a una identidad administrada específica. Si tu token no contiene appid, usa otra declaración estable del token decodificado, como azp, oid, sub o xms_mirid. Para vincular la asignación a un solo inquilino, establece también Clave en tid y Valor en el ID del inquilino de Microsoft Entra. Decodifica un token de muestra de IMDS y usa declaraciones que sean estables para la identidad administrada y el recurso en los que confías.

  3. Elige el destino en OpenAI. Establece Proyecto en el proyecto de OpenAI al que pertenece la cuenta de servicio de destino. Establece Cuenta de servicio en la cuenta de servicio de OpenAI que puede usar la carga de trabajo de Azure, como azure-managed-identity-prod-openai-wif.

  4. Restringe los permisos de la API si es necesario. Selecciona los Permisos adecuados, como api.model.request y api.vector_store.read, para restringir aún más los tokens de acceso emitidos a partir de esta asignación. Deja los permisos en blanco para evitar agregar una restricción de alcance específica de WIF; el token seguirá otorgando autorización como la cuenta de servicio asignada.

Uso del token en el código

Configura tu cliente del SDK de OpenAI para solicitar un token de identidad administrada de Azure a IMDS e intercambiarlo por un token de acceso emitido por OpenAI.

Establece OPENAI_WIF_AUDIENCE en el URI del ID de aplicación de Microsoft Entra configurado como audiencia del proveedor de identidades de carga de trabajo. El SDK solicita un token de identidad administrada para esa audiencia, lo intercambia por un token de acceso emitido por OpenAI y usa el token de OpenAI para autenticar las solicitudes a la API.

Autenticación con un token de identidad administrada de Azure
import OpenAI from "openai";

const imdsEndpoint = "http://169.254.169.254/metadata/identity/oauth2/token";

const identityProviderId = process.env.OPENAI_IDENTITY_PROVIDER_ID;
const serviceAccountId = process.env.OPENAI_SERVICE_ACCOUNT_ID;
const audience = process.env.OPENAI_WIF_AUDIENCE;

if (!identityProviderId || !serviceAccountId || !audience) {
  throw new Error(
    "Set OPENAI_IDENTITY_PROVIDER_ID, OPENAI_SERVICE_ACCOUNT_ID, and OPENAI_WIF_AUDIENCE"
  );
}

function azureManagedIdentityTokenProvider(resource) {
  return {
    tokenType: "jwt",
    getToken: async () => {
      const url = new URL(imdsEndpoint);
      url.searchParams.set("api-version", "2018-02-01");
      url.searchParams.set("resource", resource);

      const clientId = process.env.AZURE_CLIENT_ID;
      if (clientId) {
        url.searchParams.set("client_id", clientId);
      }

      const response = await fetch(url, {
        headers: { Metadata: "true" },
      });

      if (!response.ok) {
        throw new Error(
          `Azure IMDS token request failed with status ${response.status}.`
        );
      }

      const body = await response.json();
      if (!body.access_token) {
        throw new Error("Azure IMDS did not return an access token.");
      }

      return body.access_token;
    },
  };
}

const client = new OpenAI({
  workloadIdentity: {
    identityProviderId,
    serviceAccountId,
    provider: azureManagedIdentityTokenProvider(audience),
  },
});

const response = await client.responses.create({
  model: "gpt-5.6-terra",
  input: "Say hello from Azure managed identity workload identity federation.",
});

console.log(response.output_text);

Prácticas recomendadas para Microsoft Azure

  • Usa identidades administradas siempre que sea posible. Las identidades administradas ofrecen un modelo de autenticación más sencillo y seguro que la distribución manual de credenciales.
  • Usa identidades administradas, aplicaciones de Microsoft Entra y asignaciones de OpenAI separadas para cada aplicación y entorno. Evita compartir una identidad entre cargas de trabajo de desarrollo, preproducción y producción.
  • Restringe las audiencias aceptadas. Configura solo las audiencias necesarias para la federación de identidades de carga de trabajo de OpenAI.
  • Usa aplicaciones dedicadas de Microsoft Entra ID para establecer límites de seguridad. Separar las aplicaciones permite definir con mayor claridad quién es responsable de cada una, así como su auditoría y la administración del acceso.
  • Da preferencia a las asignaciones específicas de cada carga de trabajo. Configura las coincidencias con declaraciones específicas de la carga de trabajo en lugar de atributos generales de todo el inquilino.
  • Revisa periódicamente las configuraciones de credenciales federadas. Las credenciales federadas obsoletas pueden seguir concediendo acceso de forma involuntaria mucho después de que las cargas de trabajo se retiren.
  • Separa las identidades de producción de las de otros entornos. Las cargas de trabajo de producción deben autenticarse mediante identidades federadas y cuentas de servicio de OpenAI distintas.