"Workload Identity Federation" (federación de identidad de cargas de trabajo), o WIF, permite que tus cargas de trabajo se autentiquen en la API de Claude con tokens de OpenID Connect (OIDC) de corta duración en lugar de claves de API sk-ant-... de larga duración. Los tokens provienen de un "identity provider" (proveedor de identidad), o IdP, que ya operas: AWS IAM, Google Cloud o cualquier emisor OIDC compatible con los estándares, como GitHub Actions, Kubernetes, SPIFFE, Microsoft Entra ID u Okta.
Tu carga de trabajo presenta un JWT firmado por tu proveedor de identidad. Anthropic lo valida contra las reglas de confianza que configuras en Claude Console y devuelve un token de acceso de Anthropic de corta duración vinculado a una cuenta de servicio en tu organización. No hay secretos estáticos que generar, almacenar en CI, rotar ni filtrar.
Workload Identity Federation fortalece tu postura de seguridad al reemplazar las claves de API estáticas con tokens que expiran en minutos en lugar de nunca. No es una solución de seguridad completa por sí sola: la autenticación federada es tan fuerte como el proveedor de identidad upstream que firma el JWT. Combina Workload Identity Federation con los controles que tu IdP ya admite (vinculación de identidad de cargas de trabajo, acceso condicional, registro de auditoría) para una defensa en profundidad.
Configuras tres recursos en Claude Console antes de que cualquier carga de trabajo pueda federarse. Juntos expresan "los tokens firmados por el emisor X, con claims que se ven como Y, pueden actuar como la cuenta de servicio Z".
Una cuenta de servicio (svac_...) es una identidad no humana con nombre dentro de tu organización de Anthropic. Es el principal en nombre del cual actúa un token federado. Las cuentas de servicio existen a nivel de organización y se activan en un workspace cuando las agregas como miembros de ese workspace. En el momento del intercambio, Anthropic verifica que el workspace de la regla de federación coincida con una de las membresías de workspace de la cuenta de servicio; el token generado sigue entonces los límites de velocidad y la atribución de uso de ese workspace, igual que una clave de API. A diferencia de un usuario humano, una cuenta de servicio no tiene correo electrónico, contraseña ni inicio de sesión en la Console.
La distinción clave respecto a una clave de API: una clave de API es una credencial, mientras que una cuenta de servicio tiene credenciales generadas para ella bajo demanda. Puedes auditar qué cargas de trabajo actuaron como qué cuenta de servicio.
Un emisor de federación (fdis_...) registra un proveedor de identidad OIDC en tu organización. Registrar un emisor le indica a Anthropic "los JWT firmados por este proveedor pueden afirmar identidad de carga de trabajo para mi organización".
Un emisor tiene dos elementos de configuración:
iss que aparece en los JWT del proveedor, por ejemplo https://token.actions.githubusercontent.com o https://oidc.eks.us-west-2.amazonaws.com/id/EXAMPLE.discovery (el valor predeterminado) para cualquier proveedor que sirva /.well-known/openid-configuration en su URL de emisor. Usa explicit_url para apuntar directamente a un endpoint JWKS, o inline para cargar el conjunto de claves para emisores que no son accesibles desde la internet pública (por ejemplo, un clúster privado de Kubernetes).Las URL del emisor y de JWKS deben ser https, en el puerto 443, y usar un nombre de host DNS público que resuelva a direcciones IP públicas; no se aceptan literales de IP. Estas restricciones se aplican solo a las URL que Anthropic obtiene; en los modos explicit_url e inline, la issuer_url se compara como una cadena y puede hacer referencia a un nombre de host interno.
Normalmente registras un emisor por entorno: tu clúster EKS de producción, tu clúster de staging y GitHub Actions son tres emisores separados.
Una regla de federación (fdrl_...) es el puente entre un emisor y una cuenta de servicio: "cuando un JWT del emisor X tiene claims que se ven como Y, genera un token para la cuenta de servicio Z con el scope S".
Una regla define condiciones de coincidencia, un destino, y el scope de autorización y la duración del token que se aplican cuando la regla coincide:
subject_prefix (por ejemplo, system:serviceaccount:prod:worker, o con un * al final para una coincidencia de prefijo), un audience exacto, un mapa de valores de claims exactos, una expresión condition en CEL para lógica compleja, o cualquier combinación. Al menos uno de subject_prefix, claims o condition debe estar configurado, y todos los matchers configurados deben pasar para que el JWT sea aceptado.scope de OAuth otorgado en el token generado. El valor predeterminado es workspace:developer, que otorga el mismo acceso que una clave de API emitida para ese workspace. Algunos productos bloquean el scope cuando creas una regla desde su flujo; por ejemplo, el modal de creación de túnel de MCP tunnels crea reglas con scope org:manage_tunnels. Consulta . La regla también establece (de 60 a 86400, predeterminado 3600).Un solo emisor puede tener muchas reglas: una por equipo, namespace o nivel de permisos. Las reglas se evalúan por ID: el cliente especifica qué regla usar en la solicitud de intercambio, y Anthropic verifica que el JWT satisfaga los criterios de coincidencia de esa regla. No hay búsqueda implícita de reglas.
iss del JWT identifica al proveedor, y su sub y otros claims identifican la carga de trabajo específica.POST /v1/oauth/token usando el grant jwt-bearer de RFC 7523. Anthropic verifica el JWT contra el JWKS del emisor y las condiciones de coincidencia de la regla de federación, y luego devuelve un token sk-ant-oat01-... de corta duración que actúa en nombre de la cuenta de servicio destino de la regla.api_key y llama a la API como de costumbre. El SDK vuelve a ejecutar el intercambio antes de que el token expire.Necesitas acceso de administrador a tu organización de Anthropic, un proveedor de identidad compatible con OIDC con un endpoint JWKS accesible (o un documento JWKS que puedas pegar, para clústeres aislados), y una carga de trabajo que pueda obtener un token de identidad de ese proveedor.
En Claude Console, ve a Settings → Workload identity.
Con la federación configurada, tu carga de trabajo intercambia su JWT emitido por el IdP por un token de Anthropic en tiempo de ejecución. Los SDK gestionan el intercambio y el bucle de renovación por ti. La pestaña de cURL muestra el intercambio HTTP subyacente para scripts de shell, depuración o lenguajes sin soporte de SDK.
Puedes construir el cliente con credenciales explícitas o sin argumentos. Sin argumentos, el SDK resuelve las credenciales a partir de variables de entorno o del perfil activo, como se describe en Precedencia de credenciales. La forma sin argumentos es el patrón recomendado para cargas de trabajo de producción: despliega la misma imagen de contenedor en todas partes e inyecta ANTHROPIC_FEDERATION_RULE_ID, ANTHROPIC_ORGANIZATION_ID, ANTHROPIC_SERVICE_ACCOUNT_ID, ANTHROPIC_WORKSPACE_ID y ANTHROPIC_IDENTITY_TOKEN_FILE por entorno.
La respuesta del intercambio de token sigue RFC 6749 §5.1. Consulta Respuesta del intercambio de token para la referencia de campos.
Cada SDK resuelve las credenciales en el mismo orden de cinco niveles: argumentos del constructor, luego ANTHROPIC_API_KEY / ANTHROPIC_AUTH_TOKEN, luego un ANTHROPIC_PROFILE explícito, luego las variables de entorno de federación, y luego el perfil activo implícito. La primera fuente que produce una credencial gana.
ANTHROPIC_API_KEY está por encima de los niveles de federación, por lo que una clave
residual en el entorno eclipsa silenciosamente la federación. Al migrar una carga de trabajo de claves de API
a Workload Identity Federation, confirma que ANTHROPIC_API_KEY no esté configurada en ningún lugar donde se ejecute esa carga de trabajo
(entorno del contenedor, secretos de CI, perfiles de shell). El comando ant auth status
de la CLI informa qué fuente ganó.
Para la tabla completa de precedencia, la semántica por nivel y el esquema del archivo de perfil, consulta Precedencia de credenciales en la referencia de WIF.
Para cambiar una carga de trabajo existente de una clave de API estática a federación sin tiempo de inactividad:
ANTHROPIC_API_KEY existente en su lugar por ahora.ant auth status desde dentro de la carga de trabajo (o inspecciona los logs de depuración del SDK). Dado que ANTHROPIC_API_KEY está por encima de los niveles de federación en la cadena de precedencia, la clave de API todavía gana en esta etapa.ANTHROPIC_API_KEY de todos los lugares donde se inyecta. Quítala de los secretos de CI, el entorno del contenedor y los perfiles de shell (consulta la advertencia anterior). Vuelve a ejecutar ant auth status y confirma que ahora se selecciona la fuente de federación.La duración del token de Anthropic generado es el menor de (a) el token_lifetime_seconds de la regla (predeterminado 3600 segundos) y (b) el doble de la duración restante del JWT del IdP que presentaste. El resultado nunca es menor a 60 segundos. El segundo límite evita que un token de Anthropic sobreviva a la identidad upstream de la que se derivó por más de un pequeño margen.
Los SDK almacenan en caché el token y lo renuevan según un calendario de dos niveles modelado a partir de botocore:
Dado que el SDK vuelve a leer ANTHROPIC_IDENTITY_TOKEN_FILE en cada intercambio, recoge de forma transparente los tokens proyectados rotados (los tokens de cuenta de servicio de Kubernetes, por ejemplo, rotan mucho antes de su exp).
Cada guía cubre de dónde proviene el JWT en esa plataforma, cómo se ven sus claims, y la configuración de emisor y regla que debes registrar.
Tokens de identidad web de STS, o tokens proyectados de EKS IRSA.
Tokens de identidad firmados por Google desde el servidor de metadatos.
Managed Identity (IMDS) y Entra Workload ID en AKS.
Was this page helpful?
token_lifetime_secondsRegistra un emisor
En la pestaña Issuers, selecciona Create issuer.
| Campo | Valor |
|---|---|
| Name | Una etiqueta para tu referencia, como prod-eks o gha. Letras minúsculas, dígitos y guiones. |
| Issuer URL | El claim iss exacto que tu IdP coloca en sus JWT. Si no estás seguro, decodifica un token de muestra: jq -rR 'split(".")[1] | gsub("-";"+") | gsub("_";"/") | @base64d | fromjson | .iss' token |
| JWKS source | discovery para la mayoría de los IdP gestionados. Elige explicit_url o inline solo si discovery no está disponible. |
| Discovery base / JWKS URL / Inline keys | Específico del modo. Déjalo en blanco para discovery cuando el IdP sirve .well-known en la URL del emisor. |
| CA cert PEM | Solo si tu IdP sirve TLS desde una CA privada. La mayoría de los IdP gestionados usan CA públicas, así que déjalo en blanco. |
La Console incluye presets para AWS y Google Cloud que rellenan previamente el patrón de URL del emisor y una regla predeterminada razonable, además de una opción OIDC genérica para cualquier otro proveedor compatible con los estándares (como GitHub Actions, emisores de cuentas de servicio de Kubernetes, Microsoft Entra ID u Okta).
Crea una cuenta de servicio
Ve a Settings → Service accounts → Create service account. Proporciona un nombre (por ejemplo, inference-worker o ci-deploy) y una descripción opcional.
Esta es la identidad en nombre de la cual actúan tus tokens generados. Agrega la cuenta de servicio a cada workspace en el que deba actuar desde la página Members de ese workspace. La regla de federación del siguiente paso apunta a un workspace, y el token generado está limitado a los límites de velocidad y la atribución de uso de ese workspace. Anota el ID de la cuenta de servicio (svac_...).
Crea una regla de federación
De vuelta en la página Workload identity, abre la pestaña Federation rules y selecciona Create rule.
| Sección | Valor |
|---|---|
| Basic info | Un nombre y una descripción opcional. Selecciona el emisor que registraste en el paso 1. |
| Match | Elige Static para coincidencia por prefijo de subject, audience y claims exactos, o CEL para una expresión. Sé tan específico como lo permitan los claims de tu IdP: una regla que coincide de forma demasiado amplia otorga más acceso del que pretendes. |
| Target | Selecciona la cuenta de servicio que creaste en el paso 2. |
| Authorization | Scope de OAuth (workspace:developer de forma predeterminada, o un scope específico del producto como org:manage_tunnels; consulta Scopes de OAuth) y duración del token en segundos. |
Anota el ID de la regla (fdrl_...). Tu carga de trabajo pasa este ID en cada solicitud de intercambio de token.
from anthropic import Anthropic, WorkloadIdentityCredentials, IdentityTokenFile
client = Anthropic(
credentials=WorkloadIdentityCredentials(
identity_token_provider=IdentityTokenFile(
"/var/run/secrets/anthropic.com/token"
),
federation_rule_id="fdrl_...",
organization_id="00000000-0000-0000-0000-000000000000",
service_account_id="svac_...",
workspace_id="wrkspc_...",
),
)
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello, Claude"}],
)
print(message.content[0].text)Autenticación de CI sin claves con el token OIDC de Actions.