Claude Media
Claude APIの認証方式 — APIキー・WIF・App Attestの違いと選び方

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キーを作るとき、キーの種類を選びます。種類によって、リクエストが誰の権限で実行されるか、どのワークスペースで使えるか、いつ止まるかが変わります。

3種類

キーの種類と止まるタイミング

  • 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 for Foundation Models Swiftパッケージ経由の利用が前提です

適用範囲は狭く、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. 1

    キーの種類を決める

    自分のツールならPersonal key、共有・無人のワークロードならService account keyを選びます。

  2. 2

    サービスアカウントを用意する

    必要なら組織の管理者に、Settings → Service accountsで作成してもらい、該当ワークスペースに追加してもらいます。

  3. 3

    新しいキーを作る

    複数のワークスペースを使う必要がない限り、統合先のワークスペース専用で作ります。

  4. 4

    新しいキーを配備する

    ANTHROPIC_API_KEY環境変数やシークレットマネージャーのエントリを差し替えます。複数ワークスペース用のキーなら、anthropic-workspace-idヘッダーも送ります。

  5. 5

    古いキーを削除する

    リクエストが成功することを確かめてから、API keysページで旧Workspace keyを削除します。

方式ごとにワークスペースを分けると何が楽になるか

たとえばCIにはWIF、開発者のスクリプトにはPersonal key、配布するアプリにはApp Attestという使い分けが考えられます。

ワークスペースを限定したキーはそのワークスペースでしか動かず、App Attestのトークンもワークスペース単位で課金されます。WIFもトークン交換の時点でワークスペースが決まり、発行されたトークンはそのワークスペースのレート制限と利用の帰属に従います。APIキーと同じ扱いです。3方式とも、使い道ごとにワークスペースを分けておくと、どの方式がどのワークスペースにつながっているかを切り分けやすくなります。

まとめ

迷ったら、手元の開発はAPIキー、すでにクラウドのIDがあるならWIF、アプリ配布ならApp Attestです。Workspace keyが残っているなら、それが最初の棚卸し対象です。

この記事を共有:XはてブLinkedIn