«Workload Identity Federation» (федерация идентификации рабочих нагрузок), или WIF, позволяет вашим рабочим нагрузкам аутентифицироваться в Claude API с помощью короткоживущих токенов OpenID Connect (OIDC) вместо долгоживущих ключей API вида sk-ant-.... Токены поступают от поставщика идентификации (IdP), которым вы уже управляете: AWS IAM, Google Cloud или любого совместимого со стандартами эмитента OIDC, такого как GitHub Actions, Kubernetes, SPIFFE, Microsoft Entra ID или Okta.
Ваша рабочая нагрузка предъявляет подписанный JWT от вашего поставщика идентификации. Anthropic проверяет его на соответствие правилам доверия, которые вы настраиваете в Claude Console, и возвращает короткоживущий токен доступа Anthropic, привязанный к сервисному аккаунту в вашей организации. Нет статических секретов, которые нужно создавать, хранить в CI, ротировать или которые могут утечь.
Workload Identity Federation укрепляет вашу безопасность, заменяя статические ключи API токенами, срок действия которых истекает через минуты, а не никогда. Само по себе это не полноценное решение безопасности: федеративная аутентификация надёжна лишь настолько, насколько надёжен вышестоящий поставщик идентификации, подписывающий JWT. Для глубокоэшелонированной защиты сочетайте Workload Identity Federation с механизмами контроля, которые уже поддерживает ваш IdP (привязка идентификации рабочих нагрузок, условный доступ, журналирование аудита).
Прежде чем какая-либо рабочая нагрузка сможет использовать федерацию, вы настраиваете три ресурса в Claude Console. Вместе они выражают правило: «токены, подписанные эмитентом X, с утверждениями, которые выглядят как Y, могут действовать от имени сервисного аккаунта Z».
Сервисный аккаунт (svac_...) — это именованная нечеловеческая идентификация внутри вашей организации Anthropic. Это субъект, от имени которого действует федеративный токен. Сервисные аккаунты существуют на уровне организации и становятся активными в рабочем пространстве, когда вы добавляете их в качестве участников этого рабочего пространства. В момент обмена Anthropic проверяет, что рабочее пространство правила федерации соответствует одному из членств сервисного аккаунта в рабочих пространствах; выпущенный токен затем подчиняется ограничениям скорости и атрибуции использования этого рабочего пространства — так же, как и ключ API. В отличие от пользователя-человека, у сервисного аккаунта нет электронной почты, пароля и входа в Console.
Ключевое отличие от ключа API: ключ API является учётными данными, тогда как для сервисного аккаунта учётные данные выпускаются по требованию. Вы можете проводить аудит того, какие рабочие нагрузки действовали от имени какого сервисного аккаунта.
Эмитент федерации (fdis_...) регистрирует поставщика идентификации OIDC в вашей организации. Регистрация эмитента сообщает Anthropic: «JWT, подписанные этим поставщиком, могут утверждать идентификацию рабочих нагрузок для моей организации».
У эмитента есть два параметра конфигурации:
iss, которое появляется в JWT поставщика, например https://token.actions.githubusercontent.com или https://oidc.eks.us-west-2.amazonaws.com/id/EXAMPLE.discovery (значение по умолчанию) для любого поставщика, который обслуживает /.well-known/openid-configuration по своему URL эмитента. Используйте explicit_url, чтобы указать непосредственно на конечную точку JWKS, или inline, чтобы загрузить набор ключей для эмитентов, недоступных из публичного интернета (например, приватный кластер Kubernetes).URL эмитента и JWKS должны использовать https, порт 443 и публичное DNS-имя хоста, которое разрешается в публичные IP-адреса; IP-литералы не принимаются. Эти ограничения применяются только к URL, которые запрашивает Anthropic; в режимах explicit_url и inline значение issuer_url сравнивается как строка и может ссылаться на внутреннее имя хоста.
Обычно вы регистрируете по одному эмитенту на окружение: ваш продакшен-кластер EKS, ваш staging-кластер и GitHub Actions — это три отдельных эмитента.
Правило федерации (fdrl_...) — это мост между эмитентом и сервисным аккаунтом: «когда JWT от эмитента X содержит утверждения, которые выглядят как Y, выпустить токен для сервисного аккаунта Z с областью действия S».
Правило определяет условия соответствия, цель, а также область авторизации и время жизни токена, которые применяются при срабатывании правила:
subject_prefix (например, system:serviceaccount:prod:worker или с завершающим * для сопоставления по префиксу), точному значению audience, карте точных значений утверждений, выражению condition на языке CEL для сложной логики или любой их комбинации. Должен быть задан хотя бы один из параметров subject_prefix, claims или condition, и все настроенные сопоставители должны пройти проверку, чтобы JWT был принят.scope, предоставляемая выпущенному токену. По умолчанию это workspace:developer, что даёт тот же доступ, что и ключ API, выпущенный для этого рабочего пространства. Некоторые продукты фиксируют область действия при создании правила из своего потока; например, модальное окно создания туннеля в MCP tunnels создаёт правила с областью org:manage_tunnels. См. Области OAuth. Правило также задаёт token_lifetime_seconds (от 60 до 86400, по умолчанию 3600).У одного эмитента может быть много правил: по одному на команду, пространство имён или уровень разрешений. Правила оцениваются по идентификатору: клиент указывает, какое правило использовать, в запросе обмена, и Anthropic проверяет, что JWT удовлетворяет критериям соответствия этого правила. Неявного поиска правил не происходит.
iss в JWT идентифицирует поставщика, а sub и другие утверждения идентифицируют конкретную рабочую нагрузку.POST /v1/oauth/token, используя грант jwt-bearer из RFC 7523. Anthropic проверяет JWT по JWKS эмитента и условиям соответствия правила федерации, затем возвращает короткоживущий токен sk-ant-oat01-..., который действует от имени целевого сервисного аккаунта правила.api_key и вызывает API как обычно. SDK повторно выполняет обмен до истечения срока действия токена.Вам потребуется административный доступ к вашей организации Anthropic, поставщик идентификации с поддержкой OIDC и доступной конечной точкой JWKS (или документ JWKS, который вы можете вставить, для изолированных кластеров), а также рабочая нагрузка, способная получить токен идентификации от этого поставщика.
В Claude Console перейдите в Settings → Workload identity.
Зарегистрируйте эмитент
На вкладке Issuers выберите Create issuer.
| Поле | Значение |
|---|---|
| Name | Метка для вашего удобства, например prod-eks или gha. Строчные буквы, цифры и дефисы. |
| Issuer URL | Точное значение утверждения iss, которое ваш IdP помещает в свои JWT. Если вы не уверены, декодируйте образец токена: jq -rR 'split(".")[1] | gsub("-";"+") | gsub("_";"/") | @base64d | fromjson | .iss' token |
| JWKS source | discovery для большинства управляемых IdP. Выбирайте explicit_url или inline, только если discovery недоступен. |
| Discovery base / JWKS URL / Inline keys | Зависит от режима. Оставьте пустым для discovery, если IdP обслуживает .well-known по URL эмитента. |
| CA cert PEM | Только если ваш IdP обслуживает TLS с использованием приватного центра сертификации. Большинство управляемых IdP используют публичные CA, поэтому оставьте это поле пустым. |
Console включает предустановки для AWS и Google Cloud, которые предварительно заполняют шаблон URL эмитента и разумное правило по умолчанию, а также универсальный вариант OIDC для любого другого совместимого со стандартами поставщика (такого как GitHub Actions, эмитенты сервисных аккаунтов Kubernetes, Microsoft Entra ID или Okta).
Создайте сервисный аккаунт
Перейдите в Settings → Service accounts → Create service account. Укажите имя (например, inference-worker или ci-deploy) и необязательное описание.
Это идентификация, от имени которой действуют ваши выпущенные токены. Добавьте сервисный аккаунт в каждое рабочее пространство, в котором он должен действовать, на странице Members этого рабочего пространства. Правило федерации на следующем шаге нацелено на одно рабочее пространство, и выпущенный токен ограничен ограничениями скорости и атрибуцией использования этого рабочего пространства. Запишите идентификатор сервисного аккаунта (svac_...).
Создайте правило федерации
Вернитесь на страницу Workload identity, откройте вкладку Federation rules и выберите Create rule.
| Раздел | Значение |
|---|---|
| Basic info | Имя и необязательное описание. Выберите эмитент, зарегистрированный на шаге 1. |
| Match | Выберите Static для сопоставления по префиксу субъекта, аудитории и точным утверждениям или CEL для выражения. Будьте настолько конкретны, насколько позволяют утверждения вашего IdP: правило, которое соответствует слишком широко, предоставляет больше доступа, чем вы намереваетесь. |
| Target | Выберите сервисный аккаунт, созданный на шаге 2. |
| Authorization | Область OAuth (workspace:developer по умолчанию или специфичная для продукта область, такая как org:manage_tunnels; см. Области OAuth) и время жизни токена в секундах. |
Запишите идентификатор правила (fdrl_...). Ваша рабочая нагрузка передаёт этот идентификатор в каждом запросе обмена токенами.
После настройки федерации ваша рабочая нагрузка обменивает выданный IdP JWT на токен Anthropic во время выполнения. SDK обрабатывают цикл обмена и обновления за вас. Вкладка cURL показывает базовый HTTP-обмен для shell-скриптов, отладки или языков без поддержки SDK.
Вы можете создать клиент с явными учётными данными или без аргументов. Без аргументов SDK разрешает учётные данные из переменных окружения или активного профиля, как описано в разделе Приоритет учётных данных. Форма без аргументов — рекомендуемый шаблон для продакшен-нагрузок: поставляйте один и тот же образ контейнера везде и внедряйте ANTHROPIC_FEDERATION_RULE_ID, ANTHROPIC_ORGANIZATION_ID, ANTHROPIC_SERVICE_ACCOUNT_ID, ANTHROPIC_WORKSPACE_ID и ANTHROPIC_IDENTITY_TOKEN_FILE для каждого окружения.
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)Ответ на обмен токенами соответствует RFC 6749 §5.1. См. Ответ на обмен токенами для справки по полям.
Каждый SDK разрешает учётные данные в одном и том же пятиуровневом порядке: аргументы конструктора, затем ANTHROPIC_API_KEY / ANTHROPIC_AUTH_TOKEN, затем явный ANTHROPIC_PROFILE, затем переменные окружения федерации, затем неявный активный профиль. Побеждает первый источник, который предоставляет учётные данные.
ANTHROPIC_API_KEY находится выше уровней федерации, поэтому оставшийся в
окружении ключ незаметно перекрывает федерацию. При миграции рабочей нагрузки с ключей API
на Workload Identity Federation убедитесь, что ANTHROPIC_API_KEY не установлен везде, где выполняется эта рабочая
нагрузка (переменные окружения контейнера, секреты CI, профили оболочки). Команда CLI ant auth status
сообщает, какой источник победил.
Полную таблицу приоритетов, семантику каждого уровня и схему файла профиля см. в разделе Приоритет учётных данных в справочнике по WIF.
Чтобы переключить существующую рабочую нагрузку со статического ключа API на федерацию без простоя:
ANTHROPIC_API_KEY на месте.ant auth status изнутри рабочей нагрузки (или изучите отладочные логи SDK). Поскольку ANTHROPIC_API_KEY находится выше уровней федерации в цепочке приоритетов, на этом этапе всё ещё побеждает ключ API.ANTHROPIC_API_KEY везде, где он внедряется. Удалите его из секретов CI, окружения контейнера и профилей оболочки (см. предупреждение выше). Повторно запустите ant auth status и убедитесь, что теперь выбран источник федерации.Время жизни выпущенного токена Anthropic — это меньшее из (а) значения token_lifetime_seconds правила (по умолчанию 3600 секунд) и (б) удвоенного оставшегося времени жизни предъявленного вами JWT от IdP. Результат никогда не бывает меньше 60 секунд. Второе ограничение не позволяет токену Anthropic пережить вышестоящую идентификацию, из которой он был получен, более чем на небольшой запас.
SDK кэшируют токен и обновляют его по двухуровневому расписанию, смоделированному по образцу botocore:
Поскольку SDK перечитывает ANTHROPIC_IDENTITY_TOKEN_FILE при каждом обмене, он прозрачно подхватывает ротированные проецируемые токены (например, токены сервисных аккаунтов Kubernetes ротируются задолго до их exp).
Каждое руководство описывает, откуда берётся JWT на данной платформе, как выглядят его утверждения, а также конфигурацию эмитента и правила для регистрации.
Токены веб-идентификации STS или проецируемые токены EKS IRSA.
Токены идентификации, подписанные Google, с сервера метаданных.
Managed Identity (IMDS) и Entra Workload ID на AKS.
Аутентификация CI без ключей с помощью OIDC-токена Actions.
Самоуправляемые и локальные кластеры с использованием проецируемых токенов сервисных аккаунтов.
Рабочие нагрузки с SPIFFE JWT-SVID от SPIRE или другого совместимого эмитента.
Сервисные приложения Okta с использованием потока client-credentials.
Was this page helpful?