Claude Media
Claude Admin APIキーを作った人が退職した後の削除と再発行手順

Claude Admin APIキーを作った人が退職した後の削除と再発行手順

claude.aiで作ったAdmin APIキーは、作成者を組織から外しても失効しません。退職処理で漏れやすいキーの棚卸しと、削除から再発行までの手順を示します。

claude.aiのOrganization settingsで作ったAdmin APIキーは、作成者が退職しても止まりません。作成者を組織から削除しても、IdPからデプロビジョニングしても、ロールを下げても、キーは作成時のスコープのまま有効です。退職処理では、メンバーの削除とは別に、その人が作ったキーを削除して作り直す作業が必要になります。

作成者を外してもキーが生き残る理由

Admin APIキーは個人ではなく組織に紐づきます。作成者を組織から外すと、その人自身のアクセスは終わりますが、作ったキーには影響しません。ロールを降格した場合も同じで、各キーは元のスコープのまま有効です。

さらに、claude.aiで作ったキーには有効期限がありません。放っておくと「作った人はもういないのに、メンバー管理やCompliance APIを呼べるキー」が残り続けます。

くらべる

退職時にキーが残る場合と止まる場合

claude.aiのキー

止まらない

組織に紐づく。作成者の削除・IdPからのデプロビジョニング・降格のどれでも失効しない。期限もない。

Consoleの個人キー

止まる

作成者が組織から外れると、個人キーはアーカイブされる。再招待されても復活せず、作り直しになる。

Consoleのモデル呼び出し用キーは、個人キーとサービスアカウントキーで扱いが違います。個人キーは本人の権限で動くので、組織から外れた時点で止まります。サービスアカウントキーは、サービスアカウントをアーカイブしない限り動き続けます。こちらはメンバー削除後のAPIキーの挙動でも触れています。

退職処理で確認するキーの置き場所

キーは作成した場所の画面から削除します。置き場所は組織の種類で分かれるので、まず自社がどちらを使っているかを確かめます。

組織キーの一覧キーの接頭辞作成できる人
Claude Enterprise(claude.ai)キーの一覧Organization settings > APIのKeysキーの接頭辞sk-ant-api01-作成できる人親組織のprimary owner。組織のownerはCompliance APIのスコープだけのキーを自組織向けに作れる
Claude Consoleキーの一覧Settings > Admin keysキーの接頭辞sk-ant-admin01-作成できる人adminロールのメンバー

Consoleで作るAdminキーは、作成時に有効期限を選べます。期限なしの「Never」も選べますが、組織に最大期限のポリシーがあれば選べません。claude.ai側のキーには期限の選択肢がなく、この違いが退職後に残りやすい差になります。

Consoleのキーが作成者の退職でどうなるかは、Admin keysの一覧で確かめられます。claude.aiのキーと同じ扱いだと決め打ちせず、退職者が作ったキーが一覧に残っていれば、同じ手順で削除します。

削除して作り直す手順

手順は4つです。メンバー側の処理と、キー側の処理を分けて進めます。

手順

退職者のAdmin APIキーを入れ替える流れ

  1. 1

    退職者が作ったキーを洗い出す

    Organization settings > APIのKeysを開き、Scopes列でスコープを見ます。一覧から読み取れるのは名前とスコープなので、名前と用途から退職者のキーを見分けます。

  2. 2

    新しいキーを同じスコープで作る

    primary ownerがスコープを選んで作成します。スコープは作成時に固定され、後から足せません。

  3. 3

    連携先を新しいキーに差し替える

    SIEMへの転送ツールや社内スクリプトの設定を更新します。

  4. 4

    古いキーを削除する

    Keysの一覧から削除します。削除は次のリクエストから効き、猶予期間はありません。Compliance Access Keyは自然に期限切れになることもないので、消さない限り使えるままです。

順序は「作る、差し替える、消す」です。先に消すと、そのキーに頼っていた連携が止まります。逆に、新しいキーに切り替えた後は、古いキーを残さないことが肝心です。

新しいキーを作るとき、スコープは使う用途に必要な分だけ選びます。たとえばメンバーと招待の読み取りならread:members、メンバーの削除や招待の作成ならwrite:membersです。Compliance APIでチャットなどを読むならread:compliance_user_data、削除するならdelete:compliance_user_dataが要ります。

読み取りと削除の両方を使う運用では、キーを2本に分けます。読み取り用のキーが漏れても、データを削除できないようにするためです。シークレットは表示が1回限りなので、作成時にシークレット管理ツールへ保存します。

メンバーの削除とキーの削除は別作業

退職者をAPIで組織から外す手順は、公式の例にまとまっています。メールアドレスでメンバーを引き、見つかったIDで削除します。

# 1. メールアドレスでメンバーを探す
curl "https://api.anthropic.com/v1/organizations/users?email=departing@example.com" \
  -H "x-api-key: $ANTHROPIC_ADMIN_KEY" \
  -H "anthropic-version: 2023-06-01"
 
# 2. 返ってきた id を指定して削除する
curl -X DELETE "https://api.anthropic.com/v1/organizations/users/{user_id}" \
  -H "x-api-key: $ANTHROPIC_ADMIN_KEY" \
  -H "anthropic-version: 2023-06-01"

この2本のリクエストが終わっても、キーは消えません。削除に使ったキー自身が、退職者の作ったものかもしれません。スクリプトに使うキーの出どころも、一緒に点検の対象です。

SSO環境では、APIで削除できないことがあります。メンバーシップをSCIMプロビジョニングで管理している組織では、APIからの削除は400を返します。この場合は、IdP側でユーザーを外します。IdPで外せば本人のアクセスは終わりますが、先に述べたとおり、作ったキーは残ります。SCIMの同期タイミングはClaude SCIM同期の仕組み、3つの方式の違いはSSO・JIT・SCIMの違いにあります。

owner、membership_admin、primary_ownerのロールを持つメンバーは、APIで変更も削除もできません。管理者ロールだった人の退職は、claude.aiの組織設定で処理します。

SSO連携の組織で、退職処理が400で止まるとき

退職処理のスクリプトが400で止まるのは、IdPが管理している操作をAPIから触ったときです。公式の説明では、次のように分かれます。

IdPの管理範囲APIで400になる操作
JITまたはSCIMでユーザーを自動で作るAPIで400になる操作招待の作成
ロールをIdPが管理する(advanced SSOまたはadvanced SCIM provisioning)APIで400になる操作ロールの更新
SCIMプロビジョニングでメンバーシップを管理するAPIで400になる操作メンバーの削除

読み取り系のリクエストは、どの構成でも通ります。そのため、退職者のメンバー情報を引くところまではスクリプトで進められ、削除だけをIdPで行う分担になります。

ロールの降格をAPIで行っても、退職者が作ったキーは何も変わりません。降格してもキーの権限は下がりません。

退職者のキーがまだ使われているかを見る

削除の前に、そのキーが最近使われているかを確かめたい場合があります。Compliance APIのActivity Feedは、Compliance APIを呼んだ操作をcompliance_api_accessedとして記録します。actor.typeがapi_actorのものについて、actor.api_key_idを見れば、どのキーが呼んだかを特定できます。

Admin APIキーでメンバー、招待、ワークスペース、APIキーを管理した操作は、admin_api_key_actorとして記録され、admin_api_key_idが付きます。公式の説明は組織のadminがAdminキーで管理した操作を指しており、対象はConsoleのAdminキーです。claude.aiのキーを調べるときは、compliance_api_accessedの側で退職者のキーIDを探します。Activity Feedの絞り込み方はCompliance API Activity Feedの使い方にまとめています。

compliance_api_accessedだけに絞って、キーIDで拾うには次のようにします。activity_types[]は繰り返し指定でき、返ってきたJSONのdata配列からjqで絞ります。

curl --fail-with-body -sS -G \
  "https://api.anthropic.com/v1/compliance/activities" \
  --data-urlencode "activity_types[]=compliance_api_accessed" \
  --data-urlencode "limit=100" \
  --header "x-api-key: $ANTHROPIC_COMPLIANCE_ACCESS_KEY" \
  --header "anthropic-version: 2023-06-01" \
  | jq '.data[] | select(.actor.type == "api_actor"
      and .actor.api_key_id == "<退職者のキーID>")'

1ページに収まらないときは、レスポンスのhas_moreがtrueの間、last_idをafter_idに渡して古いほうへたどります。出力が空なら、そのキーは取得した範囲で使われていません。

利用がなければ、そのまま削除して問題ありません。利用があれば、連携先が使っているということなので、差し替えを済ませてから削除します。

退職のたびに繰り返さないための運用

棚卸しでは名前が手がかりになります。用途と担当チームを名前に入れ、個人名は入れない運用にしておくと、退職者の作ったキーを探す手間が減ります。

もう一つは、キーの持ち主を個人にしないことです。Compliance Access Keyは、リンクされた全組織のチャットやファイルを読めるので、本番データベースの認証情報と同じ扱いにします。primary ownerについては、Claude Enterprise HIPAA構成の適用前に確認することでも触れています。

Console側で期限を選べるキーは、期限を設ける選択肢があります。期限の通知メールは作成者に届くため、通知先が退職者のままだと見逃されます。期限が近づいたときの連絡先も、作成者の退職時に見直します。

漏洩が疑われるときの無効化は、退職処理とは別の流れです。Claude APIキーの漏洩が疑われるときの無効化手順を参照してください。

まとめ

退職者の後始末は、「メンバーを外す」と「その人が作ったキーを消す」の2つに分かれます。前者はDELETE /v1/organizations/users/{user_id}かIdPで済みますが、後者は画面で行います。claude.aiのキーは期限もないので、削除しない限り残ります。次の退職者が出る前に、現在のKeys一覧に作成者不明のキーがないかを確認しておくと、同じ抜けを避けられます。

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