• メッセージ
  • マネージドエージェント
  • 管理
Search...
⌘K
組織
Admin APIワークスペース
認証
概要Workload Identity FederationWIFリファレンス
AWSGoogle CloudMicrosoft AzureGitHub ActionsKubernetesSPIFFEOkta
モニタリング
Usage and Cost APIRate Limits APIClaude Code Analytics API
データとコンプライアンス
データレジデンシーAPIとデータ保持
Compliance API
概要アクセスの取得アクティビティフィードチャット、ファイル、プロジェクト組織、ユーザー、ロール、グループ統合の設計エラーFAQ
Log in
Kubernetes
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...

Solutions

  • AI agents
  • Code modernization
  • Coding
  • Customer support
  • Education
  • Financial services
  • Government
  • Life sciences

Partners

  • Amazon Bedrock
  • Google Cloud's Vertex AI

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Company

  • Anthropic
  • Careers
  • Economic Futures
  • Research
  • News
  • Responsible Scaling Policy
  • Security and compliance
  • Transparency

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Help and security

  • Availability
  • Status
  • Support
  • Discord

Terms and policies

  • Privacy policy
  • Responsible disclosure policy
  • Terms of service: Commercial
  • Terms of service: Consumer
  • Usage policy
管理/IDプロバイダー

KubernetesでWIFを使用する

プロジェクテッドサービスアカウントトークンを使用して、セルフマネージドKubernetesクラスターからClaude APIに認証します。

Was this page helpful?

  • 前提条件
  • Kubernetesの設定
  • Anthropicの設定
  • トークンの取得と使用
  • セットアップの検証
  • ルールのスコープ設定
  • 次のステップ

セルフマネージドKubernetesクラスター(kubeadm、k3s、OpenShift、オンプレミスディストリビューション)は、プロジェクテッドサービスアカウントトークンを通じて、すべてのPodに対してOIDC「JSON Web Token」(JSONウェブトークン)、すなわちJWTに署名します。クラスターのAPIサーバーがOIDCイシュアーとして機能し、各トークンのsubクレームはsystem:serviceaccount:<namespace>:<service-account>という形式に従います。クラスターのイシュアーURLは、ディスカバリードキュメントを読み取ることで確認できます。

cURL
kubectl get --raw /.well-known/openid-configuration | jq -r .issuer

このページで説明するメカニズム(プロジェクテッドサービスアカウントトークン、OIDCイシュアーとしてのクラスターAPIサーバー)はKubernetes自体にネイティブなものであるため、すべてのKubernetesディストリビューションの基盤となっています。マネージドKubernetesサービスで実行している場合は、クラウドプロバイダーのガイドでプロバイダー管理のイシュアーURLの確認方法を説明しています:AWS(EKS)、Google Cloud(GKE)、またはAzure(AKS)。クラスターでSPIREを実行している場合は、クラスターAPIサーバーではなくSPIRE OIDC Discovery Providerがイシュアーとなります。SPIFFEを参照してください。その他のディストリビューションや、そこに記載されていないマネージドプロバイダーについては、このガイドに従い、クラスターが報告するイシュアーURLを使用してください。

前提条件

  • WIFの概念(サービスアカウント、フェデレーションイシュアー、フェデレーションルール)に精通していること。
  • APIサーバーで--service-account-issuerフラグが設定されたKubernetesクラスター。ほとんどのディストリビューションではデフォルトで設定されており、kubeadmクラスターでは通常https://kubernetes.default.svc.cluster.localが使用されます。APIサーバー設定に直接アクセスできない場合は、プラットフォームチームに値を確認してください。
  • Anthropicがトークン署名を検証できるように、以下のいずれかが必要です。
    • イシュアーのJWKSエンドポイントがポート443のHTTPS経由でパブリックインターネットから到達可能であること、または
    • クラスター内部からJWKSを取得し、inlineモードで登録できること(Anthropicの設定で説明)。
  • Anthropic組織のClaude Consoleでサービスアカウント、フェデレーションイシュアー、フェデレーションルールを作成する権限。

Kubernetesの設定

フェデレーションルールが期待するオーディエンスと有効期間を指定して、サービスアカウントトークンをPodにプロジェクトします。serviceAccountTokenプロジェクションは、新しいJWTをマウントパスに書き込み、expirationSecondsが経過する前にローテーションします。

Pod
apiVersion: v1
kind: Pod
metadata:
  name: inference-worker
  namespace: inference
spec:
  serviceAccountName: inference-worker
  volumes:
    - name: anthropic-token
      projected:
        sources:
          - serviceAccountToken:
              audience: https://api.anthropic.com
              expirationSeconds: 3600
              path: token
  containers:
    - name: app
      image: your-registry/inference-worker:latest
      env:
        - name: ANTHROPIC_IDENTITY_TOKEN_FILE
          value: /var/run/secrets/anthropic.com/token
        - name: ANTHROPIC_FEDERATION_RULE_ID
          value: fdrl_...
        - name: ANTHROPIC_ORGANIZATION_ID
          value: 00000000-0000-0000-0000-000000000000
        - name: ANTHROPIC_SERVICE_ACCOUNT_ID
          value: svac_...
        - name: ANTHROPIC_WORKSPACE_ID  # required when the rule covers multiple workspaces
          value: wrkspc_...
      volumeMounts:
        - name: anthropic-token
          mountPath: /var/run/secrets/anthropic.com
          readOnly: true

このPodに対して発行されるトークンには、sub: "system:serviceaccount:inference:inference-worker"とaud: ["https://api.anthropic.com"]が含まれます。

Anthropicの設定

セットアップ手順に従って、Claude Consoleでフェデレーションイシュアーの登録、Anthropicサービスアカウントの作成、フェデレーションルールの作成を行います。以下のKubernetes固有の値を使用してください。

フェデレーションイシュアー: 多くのセルフマネージドクラスターは、https://kubernetes.default.svc.cluster.localのようなパブリックインターネットから到達できないイシュアーURLを使用しています。お使いのクラスターがこれに該当する場合は、inline JWKSソースを選択し、クラスターのキーを貼り付けてください。クラスター内部から以下のように取得します。

cURL
kubectl get --raw /openid/v1/jwks

次に、返されたkeys配列の内容(外側の{"keys": [...]}ラッパーではなく)を使用してイシュアーを設定します。

{
  "name": "onprem-k8s",
  "issuer_url": "https://kubernetes.default.svc.cluster.local",
  "jwks_source": "inline",
  "jwks_keys": [{ "kty": "RSA", "kid": "...", "n": "...", "e": "AQAB" }]
}

inlineモードでは、issuer_urlはJWTのissクレームとの比較にのみ使用され、Anthropicがそこに到達しようとすることはありません。イシュアーがパブリックに到達可能な場合は、代わりに"jwks_source": "discovery"を使用し、jwks_keysを省略してください。

inlineキーを使用する場合、クラスターがサービスアカウント署名キーをローテーションした際にイシュアーを更新する責任はユーザー側にあります。ローテーションはまれ(通常はクラスターのアップグレード時のみ)ですが、新しいJWKSをプッシュするまでトークン交換は署名エラーで失敗します。

フェデレーションルール: サービスアカウントのsubクレームと、プロジェクテッドトークンに設定したオーディエンスをマッチさせます。

{
  "name": "onprem-inference",
  "issuer_id": "fdis_...",
  "match": {
    "subject_prefix": "system:serviceaccount:inference:inference-worker",
    "audience": "https://api.anthropic.com"
  },
  "target": {
    "type": "service_account",
    "service_account_id": "svac_..."
  },
  "workspace_id": "wrkspc_...",
  "oauth_scope": "workspace:developer",
  "token_lifetime_seconds": 600
}

ワークロードが許す限り具体的に指定してください。名前空間内のすべてのサービスアカウントを同じAnthropicサービスアカウントにマッピングすべき場合にのみ、subject_prefixをsystem:serviceaccount:inference:*(末尾の*によりプレフィックスマッチになります)に緩めてください。ルールのfdrl_... IDをPodのANTHROPIC_FEDERATION_RULE_ID環境変数に追加します。

トークンの取得と使用

Kubernetesの設定のPod仕様では、ANTHROPIC_IDENTITY_TOKEN_FILEをプロジェクテッドマウントパスに設定し、ANTHROPIC_FEDERATION_RULE_ID、ANTHROPIC_ORGANIZATION_ID、ANTHROPIC_SERVICE_ACCOUNT_ID、ANTHROPIC_WORKSPACE_IDも設定しています。これらが設定されていれば、SDKは交換のたびにディスクからトークンを読み取り、Anthropicアクセストークンを自動的に更新します。

セットアップの検証

交換が成功すると、sk-ant-oat01-で始まるaccess_tokenと、秒単位のexpires_in値が返されます。400 invalid_grantが返された場合は、失敗した交換のトラブルシューティングを参照してください。Kubernetes側で最も一般的な原因はJWKSキーの不一致です(inlineモードの場合は、kubectl get --raw /openid/v1/jwksで再取得し、イシュアーを更新してください)。

ルールのスコープ設定

subject_prefixをsystem:serviceaccount:*にすると、クラスター内のすべてのサービスアカウントにマッチするため、どのPodでもフェデレーションされたAnthropicトークンを取得できてしまいます。audienceマッチャーがない場合、ルールはクラスターのデフォルトオーディエンストークンにもマッチし、これはすべてのPodにすでにプロジェクトされています。

ルールのmatchブロックを、ユースケースに適した最も狭いスコープに制限してください。

  • 名前空間とサービスアカウント名を固定する: 末尾に*を付けずに、完全なsystem:serviceaccount:<namespace>:<name>値を使用します。
  • 常にオーディエンスを設定する: ルールでaudienceを必須とし、PodのserviceAccountTokenプロジェクションに同じ値を設定して、デフォルトオーディエンストークンが拒否されるようにします。
  • 名前空間ごとに個別のルールを使用する: 1つのルールを広げるのではなく、名前空間ごとに個別のルールとAnthropicサービスアカウントを作成します。
  • inline JWKSイシュアーを1つのクラスターにスコープする: 複数のクラスターがイシュアーURLを共有している場合は、各クラスターのJWKSを独自のフェデレーションイシュアーとして登録し、ルールをそのイシュアーのみにバインドします。

次のステップ

  • Workload Identity Federation:概念、トークン交換フロー、SDK設定オプション。
  • WIFリファレンス:環境変数、JWKSソースモード、ルールマッチモード。
import anthropic

# ANTHROPIC_IDENTITY_TOKEN_FILE、ANTHROPIC_FEDERATION_RULE_ID、
# ANTHROPIC_ORGANIZATION_ID、ANTHROPIC_SERVICE_ACCOUNT_ID、ANTHROPIC_WORKSPACE_ID を
# Pod の環境から読み取ります。
client = anthropic.Anthropic()

message = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello, Claude"}],
)
print(message.content[0].text)