Claude APIの認証方式 — APIキー・WIF・App Attestの違いと選び方
Claude APIの認証方式はAPIキー・WIF(Workload Identity Federation)・App Attestの3つです。向き不向きと、APIキーからWIFへ切り替えるタイミングを表で比べます。
Claude APIの認証方式は3つ、選び方は用途で決まる
Claude APIへのリクエストを認証する方法は、APIキー・Workload Identity Federation(WIF)・App Attestの3つです。WIFは、クラウドやCI/CDが持つIDトークンをClaude APIの短命なアクセストークンに交換する方式で、sk-ant-api...のような長期キーを発行しません。どれもMessages APIなど同じエンドポイントを叩けますが、想定する運用が違います。APIキーはローカル開発・プロトタイピング・自分でシークレットを管理できるサーバー向けです。WIFは本番ワークロードやCI/CDのように、すでにIdP(アイデンティティプロバイダー)発行のIDを持つ環境向けです。App AttestはバックエンドなしでClaude APIを直接叩くiOS/macOSアプリ向けです。
APIキーとWIFはClaude APIエンドポイントへの権限としては同等です。まずAPIキーで素早く動かし、ワークロードがすでにプラットフォーム発行のIDを持っているならWIFへ移行する、という順序が現実的です。App Attestは前提が異なり、モバイルアプリの配布という特定シーンでのみ選択肢に入ります。
そもそもClaude APIが使える国・地域は175か国に限られます。認証方式を選ぶ前に、自社の拠点が対応国に入っているかを見ておきます。
セキュリティ審査が絡む場合は、SOC2やISO27001の資料をTrust Centerから取得する手順も先に確認します。審査全体を前倒しできます。最初のキーの作り方はClaude APIキーの取得方法にあります。
| 認証方式 | 止まる条件 | ワークスペースの決まり方 | 向いている場面 |
|---|---|---|---|
| APIキー | 止まる条件期限切れ・無効化・削除。本人紐づけキーは紐づき先が外れたときも | ワークスペースの決まり方限定して作るか、リクエストごとのヘッダーで指定 | 向いている場面ローカル開発・スクリプト・自前でシークレット管理できるサーバー |
| Workload Identity Federation | 止まる条件アクセストークンの期限切れ(既定3600秒、SDKが自動更新) | ワークスペースの決まり方トークン交換の時点で選ばれる | 向いている場面AWS/Google Cloud/AzureやKubernetes上の本番ワークロード、CI/CDパイプライン |
| App Attest | 止まる条件トークンは1時間、連携のRevokeで失効 | ワークスペースの決まり方ワークスペース単位で発行 | 向いている場面バックエンドを持たずClaude APIを直接呼ぶiOS/macOSアプリ |
APIキーは「誰として動くか」で3種類に分かれる
APIキーを作るとき、キーの種類を選びます。種類によって、リクエストが誰の権限で実行されるか、どのワークスペースで使えるか、いつ止まるかが変わります。
キーの種類と止まるタイミング
Personal key
作成した本人として動きます。組織から外れた時点でアーカイブされます。単一ワークスペース用のキーなら、そのワークスペースへのアクセスを失ったときにも止まります。再招待されても元のキーは復活せず、作り直しが必要です。
Service account key
サービスアカウントとして動きます。サービスアカウントがアーカイブされたとき、単一ワークスペース用のキーならそのワークスペースから外されたときに止まります。
Workspace key(レガシー)
誰の権限でもなく、作成先のワークスペースに属します。期限切れ・無効化・削除・ワークスペースのアーカイブで止まり、作成者が組織を離れても動き続けます。
PersonalとService accountの2種類は、組織がすでに管理しているユーザーやサービスアカウントに紐づく「本人紐づけキー」です。紐づき先が組織から外れるとキーも止まるので、人や仕組みより長生きするキーが残る事故を避けられます。新規の統合ではWorkspace keyよりこちらが推奨されています。
Personal keyを共有スクリプトに使うと、リクエストは常にその1人として実行され、本人の退職とともに止まります。CIや本番サービスのように共有・自動化で使うなら、組織の管理者にService accountを作ってもらい、ワークロード自身のIDを持たせます。
キーの作成画面は、Claude ConsoleのSettings → API keysにあります。「Create key」で名前と有効期限を決め、「Linked account」を自分にすればPersonal key、サービスアカウントにすればService account keyになります。ワークスペースを限定すると、後述のワークスペースID指定を省けます。サービスアカウントにはメールアドレスもパスワードもConsoleログインもなく、組織の既定ワークスペースに暗黙のメンバーとして入ります。
送り方と環境変数
直接HTTPで呼ぶときはAuthorization: Bearer <キー>で送ります。SDKなら環境変数ANTHROPIC_API_KEYを設定するだけで自動的に読み込まれます。従来のx-api-keyヘッダーも引き続き使えます。
curl https://api.anthropic.com/v1/messages \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"model": "claude-opus-5-5",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Hello, Claude"}]
}'ワークスペースIDの指定が要るのはどんなキーか
ワークスペースを限定して作ったキーは、そのワークスペースでしか使えない代わりに、リクエストでワークスペースIDを省けます。限定していないキーでは、リクエストごとにanthropic-workspace-idヘッダーが必須です。IDはConsoleのSettings → Workspacesの「ID」列か、List Workspacesエンドポイントで調べます。
ヘッダーを付け忘れると、400エラー(invalid_request_error)が返ります。キーがワークスペースに限定されていない(not scoped)ことが原因なので、直し方は2つです。リクエストにヘッダーを足すか、ワークスペースを限定したキーを作り直します。
メッセージは次のとおりです。
anthropic-workspace-id is required when authenticating with an identity-linked API key; send the id of the workspace this request acts in.値の形式が不正なら同じ400で「anthropic-workspace-id header must be a valid workspace ID.」が返ります。存在しないワークスペースや、キーの持ち主にアクセス権がないワークスペースなら404(not_found_error)です。
Admin APIの扱いにも違いがあります。Personal keyとService account keyをAdmin APIで使えるのは、ワークスペースを限定していないキーだけです。
キーの有効期限をどう設定するか
キー作成時には有効期限も選びます。プリセットは3時間・1日・7日・30日で、カスタム期間や「Never」(無期限)も選べます。組織に有効期限の上限ポリシーがある場合、Consoleの選択肢は上限までに絞られ、Neverは選べなくなります。有効期限は作成後に変更できません。
Neverは、シークレットマネージャーに置いて自分でローテーションするキー向けの選択肢です。それ以外は短い期限のほうが、漏洩したキーが使える期間を短くできます。ただし期限は漏洩対策の代わりにはならず、シークレットマネージャーでの保管や、漏洩を疑ったキーの無効化は期限に関係なく必要です。
期限切れ前のメール通知は、キーの作成者に届きます。有効期間が14日以上のキーは7日前、7日以上のキーは1日前です。有効期間が7日未満のキーには、期限前のメールが届きません。3時間や1日のプリセットで作ったキーを常用すると、通知なしに止まります。
期限が切れたキーで呼ぶと401 authentication_errorが返ります。期限切れのキーは再有効化できず、新しいキーを作り直します。Consoleのキー一覧には各キーの期限が出ます。Admin APIのList API KeysとRetrieve API Keyでもexpires_atを取得でき、期限なしのキーではnullです。
無効化と削除は別物
漏洩を疑ったときの操作は2つあります。「Disable」は元に戻せます。Admin APIが返すstatusはinactiveになり、「Re-enable」でactiveに戻せます。「Delete」は取り消せず、キーはアーカイブされてstatus: "archived"でList API Keysに残ります。期限切れのキーに使えるのはDeleteだけです。
Workload Identity Federationはどんな仕組みで長期キーを消すか
WIFが使うのは、AWS IAMやGoogle Cloudが出す短命のIDトークンです。標準準拠のOIDC発行者も使えます。例はGitHub Actions・Kubernetes・SPIFFE・Microsoft Entra ID・Oktaです。ワークロードはそのIDトークンをPOST /v1/oauth/tokenでClaude APIの短命アクセストークンに交換し、SDKが期限切れ前に自動で更新します。アクセストークンの有効期間はルールで60〜86400秒に設定でき、APIの既定は3600秒です。権限スコープの既定はworkspace:developerで、ワークスペースAPIキーと同じアクセスになります。発行・配布・ローテーションが要るsk-ant-api...文字列そのものが存在しません。
長期キーを環境から追放できる分、漏洩時の被害範囲は小さくなります。ただしIdPさえ守れば安全というわけではありません。信頼の連鎖はIdPの設定強度に依存し、たとえばIdPトークンを発行できる静的なクラウド認証情報が1つ上流に残っていれば、そこが弱点になります。IPアローリスト・MFA・監査ログといったIdP側の統制と組み合わせて使う設計です。
設定はConsoleでサービスアカウント・連合発行者・連合ルールの3リソースを作るところから始まります。ワークスペースはキーの場合のように都度ヘッダーで指定せず、トークン交換の時点で選ばれます。詳細な手順とエラー逆引きはWIFリファレンスにまとめています。
App Attestが向くのはモバイルアプリだけ
App Attestは、Claude APIを直接呼び出すiOS/macOSアプリのために用意された方式です。アプリの各インストールがAppleのApp Attestサービスで「登録済みアプリの正規・未改変のビルドである」ことを証明し、Anthropicが短命のアクセストークンを発行します。トークンの利用料はワークスペースに課金されます。APIキーもIdPトークンも必要ないので、アプリの配布物に秘密を含めず、プロキシも運用せずに済みます。
App Attestのトークンと登録の制約
トークンの有効期間
1時間
ワークスペース単位で発行
呼べるAPI
Messages APIのみ
他のエンドポイントは認可されない
1連携のバンドルID
最大32個
Apple Developer Team IDとセットで登録
適用範囲は狭く、Claude APIへの直接呼び出しにしか使えません。Amazon Bedrock・Google Cloud・Microsoft Foundry経由のアクセスや、Webサーバー・CLIツールのような非モバイル環境には使えません。
トークンにエンドユーザーの識別情報は含まれません。App Attestが識別するのは「アプリ」であって、使っている人ではないので、ユーザーごとの制限や課金の按分はアプリ側で作ります。
実装面の前提もあります。Swiftパッケージはベータで、OS 27のベータ版が必要で、APIが変わる可能性があります。端末の証明にはSecure Enclaveを持つ実機が要るため、シミュレーターでは動きません。開発中はAPIキーで代用します。
登録には、Apple DeveloperのTeam IDと、組織のadmin・owner・primary ownerのいずれかのロールが必要です。Xcodeの「Signing & Capabilities」でApp Attestのcapabilityを追加します。続けてConsoleのApp integrationsで連携を作り、クライアントID(clid_...)を取得します。アプリが侵害されたり役目を終えたりしたら、同じ画面から連携をRevokeします。Revokeすると発行済みトークンも失効し、登録済みの端末は新しいトークンを取れなくなります。元に戻せないので、復旧には新しい連携を作ります。仕組みや設定の詳細はClaude App Attestの仕組みで扱っています。
選択でよくあるつまずき
WIFの有効期間が作り方で変わる。Consoleのウィザードはtoken_lifetime_secondsに600を事前入力しますが、APIで省略したときの既定は3600です。同じルールでも、どこから作ったかで既定値が6倍違います。
ルールを86400秒にしてもトークンは長生きしない。実際の寿命は、ルールのtoken_lifetime_secondsと、提示したIdPのJWTの残り寿命の2倍のうち小さいほうで決まります。60秒を下回ることもありません。
Default Workspaceが一覧に出ない。List Workspacesはinclude_default=trueを渡さないと、Default Workspaceを返しません。IDは、そのワークスペースで動いたリクエストのレスポンスヘッダーanthropic-workspace-idからも分かります。
404の原因が切り分けられない。存在しないワークスペースと、アクセス権のないワークスペースは、同じレスポンスで返ります。404を見たら、IDの打ち間違いと、キーの持ち主のアクセス権の両方を疑います。
Workspace keyから乗り換える手順
Workspace keyを使っている場合は、WIFか、本人紐づけキーへの切り替えが推奨されています。基盤にすでにIdPがあるクラウド環境なら、本人紐づけキーを経由せず直接WIFへ進んでも構いません。判断基準は「その環境にすでにプラットフォーム発行のIDがあるか」の1点です。
Workspace keyを本人紐づけキーに替える5ステップ
- 1
キーの種類を決める
自分のツールならPersonal key、共有・無人のワークロードならService account keyを選びます。
- 2
サービスアカウントを用意する
必要なら組織の管理者に、Settings → Service accountsで作成してもらい、該当ワークスペースに追加してもらいます。
- 3
新しいキーを作る
複数のワークスペースを使う必要がない限り、統合先のワークスペース専用で作ります。
- 4
新しいキーを配備する
ANTHROPIC_API_KEY環境変数やシークレットマネージャーのエントリを差し替えます。複数ワークスペース用のキーなら、anthropic-workspace-idヘッダーも送ります。 - 5
古いキーを削除する
リクエストが成功することを確かめてから、API keysページで旧Workspace keyを削除します。
方式ごとにワークスペースを分けると何が楽になるか
たとえばCIにはWIF、開発者のスクリプトにはPersonal key、配布するアプリにはApp Attestという使い分けが考えられます。
ワークスペースを限定したキーはそのワークスペースでしか動かず、App Attestのトークンもワークスペース単位で課金されます。WIFもトークン交換の時点でワークスペースが決まり、発行されたトークンはそのワークスペースのレート制限と利用の帰属に従います。APIキーと同じ扱いです。3方式とも、使い道ごとにワークスペースを分けておくと、どの方式がどのワークスペースにつながっているかを切り分けやすくなります。
まとめ
迷ったら、手元の開発はAPIキー、すでにクラウドのIDがあるならWIF、アプリ配布ならApp Attestです。Workspace keyが残っているなら、それが最初の棚卸し対象です。