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 Google Cloud

Usa Google Cloud como proveedor de identidades de carga de trabajo en cualquiera de estos escenarios:

  • Identidad de carga de trabajo de Google: intercambia un token OIDC firmado por Google y emitido para una cuenta de servicio de Google asociada por un token de acceso de OpenAI de corta duración.
  • Google Kubernetes Engine: intercambia un token proyectado de cuenta de servicio de GKE por un token de acceso de OpenAI de corta duración.

Para Codex, usa esta página para obtener e inspeccionar el token de Google. 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 cuentas de servicio y los ejemplos del SDK de esta página corresponden a la API de OpenAI.

Identidad de carga de trabajo de Google

Las cargas de trabajo de Google Cloud pueden solicitar tokens de identidad OIDC firmados al servidor de metadatos de Google sin almacenar claves de cuentas de servicio de larga duración. En la federación de identidades de carga de trabajo de OpenAI, el token de identidad de Google es el token de sujeto que OpenAI valida antes de emitir un token de acceso de OpenAI. Este flujo funciona en Compute Engine, Cloud Run, cargas de trabajo de GKE que usan cuentas de servicio de Google asociadas y otros entornos de ejecución administrados por Google que exponen el punto de acceso de identidad del servidor de metadatos.

Configuración de la identidad de carga de trabajo de Google

Crea una cuenta de servicio de Google para la carga de trabajo que necesita llamar a la API de OpenAI. Para consultar el flujo completo de configuración, consulta la guía de Google para crear cuentas de servicio.

Por ejemplo, crea una cuenta de servicio con la CLI de Google Cloud:

gcloud iam service-accounts create openai-wif \
  --description="Service account for OpenAI workload identity federation" \
  --display-name="OpenAI workload identity federation"

Crea la VM de Compute Engine con la cuenta de servicio asociada o asocia la cuenta de servicio al recurso de Google Cloud que ejecuta tu aplicación. El recurso debe poder llamar al servidor de metadatos de Google durante la ejecución. Para obtener detalles sobre la configuración de la VM, consulta la guía de Google para crear una VM que use una cuenta de servicio administrada por el usuario.

No crees ni descargues claves de cuentas de servicio para este flujo. La carga de trabajo usa la cuenta de servicio asociada y el servidor de metadatos para solicitar un token OIDC de corta duración.

Obtener un token de identidad de Google

Desde el recurso de Google Cloud que tiene asociada la cuenta de servicio, solicita al servidor de metadatos un token de identidad OIDC con la audiencia configurada. Este token es el token de sujeto que OpenAI intercambia por un token de acceso emitido por OpenAI.

AUDIENCE="https://api.openai.com/v1"

TOKEN=$(curl -sS -G -H "Metadata-Flavor: Google" \
  "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity" \
  --data-urlencode "audience=${AUDIENCE}")
export TOKEN

El servidor de metadatos devuelve un JWT firmado por Google. Para obtener más información sobre el punto de acceso de identidad del servidor de metadatos, consulta la guía de Google para verificar la identidad de una VM.

Verificar el token

Antes de configurar la federación de identidades de carga de trabajo, exporta el token de identidad de Google 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 decodificado del servidor de metadatos de Google tendrá un aspecto similar al siguiente:

{
  "iss": "https://accounts.google.com",
  "aud": "https://api.openai.com/v1",
  "azp": "110123456789012345678",
  "sub": "110123456789012345678",
  "email": "openai-wif@my-project.iam.gserviceaccount.com",
  "email_verified": true,
  "iat": 1716235422,
  "exp": 1716239022
}

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, email y sub 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 los tokens de identidad emitidos por Google y luego agrega una asignación de cuentas de servicio que coincida con declaraciones estables del token.

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

Configurar el proveedor de identidades de carga de trabajo

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

  2. Establece el emisor y la audiencia. Establece URL del emisor OIDC en https://accounts.google.com. Establece Audiencia en la audiencia personalizada que tu carga de trabajo solicita al servidor de metadatos de Google, como https://api.openai.com/v1. Este valor debe coincidir con la declaración aud del token.

  3. Usa el descubrimiento OIDC de Google. Deja desactivada la opción Usar JWKS cargado para verificar tokens . OpenAI usa los metadatos de descubrimiento OIDC y el JWKS de Google para verificar el token de identidad firmado por Google.

  4. Agrega transformaciones de atributos si necesitas atributos derivados para la asignación. Por ejemplo, ingresa subject con la expresión assertion.sub para crear openai.subject a partir de la declaración de sujeto. El panel aplica el prefijo openai. automáticamente. Las declaraciones sin procesar 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.

Configurar la asignación de cuentas de servicio

  1. Crea una asignación de cuentas de servicio. Establece en Nombre un valor único dentro del proveedor de identidades de carga de trabajo, como compute-openai-wif. Usa Descripción, por ejemplo, Production Compute Engine OpenAI API workload, para explicar qué carga de trabajo puede usar la asignación.

  2. Establece coincidencias con declaraciones estables de la cuenta de servicio de Google. Agrega una fila de Clave y Valor por cada declaración que deba coincidir. Usa sub como vínculo principal de identidad porque es estable y único. También puedes establecer una coincidencia con email para facilitar la lectura.

  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 Google Cloud, como google-workload-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á autorizando el acceso como la cuenta de servicio asignada.

Usar el token en código

Configura tu cliente del SDK de OpenAI para solicitar un token de identidad de Google al servidor de metadatos e intercambiarlo por un token de acceso emitido por OpenAI.

Establece OPENAI_WIF_AUDIENCE en la audiencia personalizada configurada como audiencia del proveedor de identidades de carga de trabajo. El SDK solicita un token de identidad de Google 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.

Autenticarse con un token de identidad del servidor de metadatos de Google
import OpenAI from "openai";

const metadataEndpoint =
  "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity";

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 googleMetadataIdentityTokenProvider(audience) {
  return {
    tokenType: "jwt",
    getToken: async () => {
      const url = new URL(metadataEndpoint);
      url.searchParams.set("audience", audience);
      url.searchParams.set("format", "full");

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

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

      const token = (await response.text()).trim();
      if (!token) {
        throw new Error(
          "Google metadata server did not return an identity token."
        );
      }

      return token;
    },
  };
}

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

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

console.log(response.output_text);

Prácticas recomendadas para Google Cloud

  • Usa cuentas de servicio de Google dedicadas para cada carga de trabajo. Evita compartir cuentas de servicio entre servicios o entornos que no estén relacionados.
  • Usa flujos de identidad de carga de trabajo en lugar de claves de cuenta de servicio de larga duración. Evita distribuir y rotar archivos de claves JSON para cargas de trabajo que puedan usar tokens de identidad del servidor de metadatos o GKE Workload Identity.
  • Limita el alcance de las identidades al ámbito más reducido que resulte práctico para cada carga de trabajo. Usar cuentas de servicio independientes para cada aplicación permite realizar auditorías más claras y aplicar el principio de privilegio mínimo al acceso.
  • Usa las asignaciones basadas en atributos con cuidado. Siempre que sea posible, prioriza los identificadores estables, como las declaraciones de sujeto de las cuentas de servicio, frente a los metadatos que pueden cambiar.
  • Separa los proyectos de producción de los que no son de producción. Los proyectos independientes reducen el riesgo de compartir privilegios por accidente y simplifican las auditorías.
  • Otorga solo los permisos de IAM necesarios. Restringe la identidad de Google a los permisos que requiere la carga de trabajo.
  • Monitorea el uso de las cuentas de servicio. Los intercambios de tokens inesperados pueden indicar desviaciones de la configuración o cargas de trabajo comprometidas.