Claude Platform Docs
管理暗号化キー

CMEK用にAzure Key Vaultを構成する

Azure Key Vaultを使用して、組織の暗号化キーを提供します。

Configure with the /claude-api skill in Claude Code
claude "/claude-api help me configure a customer-managed encryption key with Azure Key Vault"

このガイドでは、Azure Key VaultのキーをAnthropic組織の「customer-managed encryption key」(顧客管理暗号化キー)、すなわちCMEKとして構成する手順を説明します。

前提条件

  • RBAC認可が有効enableRbacAuthorization: true)で、パブリックネットワークアクセスが許可されているAzure Key Vault。Anthropicはパブリックなデータプレーンエンドポイント経由でボールトを呼び出します。プライベートエンドポイントはサポートされていません。
  • ボールトで消去保護が有効enablePurgeProtection: true)であること。これがない場合、削除されたキーがソフト削除の保持期間中に完全に消去される可能性があり、CMEKで保護されたデータが回復不能な形で失われます。消去保護は一度有効にすると無効化できません。
  • ボールト内にキーを作成し、ボールトに対してRBACロールを割り当てる権限。
  • Entraテナントでサービスプリンシパルを作成する権限(Application AdministratorCloud Application Administrator、または同等のカスタムロール)。
  • 組織のAnthropic Admin APIキー。
  • az CLIがインストールされ、認証済みであること。
  • AuditEventログカテゴリをLog Analytics、ストレージアカウント、またはイベントハブにルーティングするよう、ボールトに診断設定が構成されていること。Azure Key Vaultはデフォルトではデータプレーンの監査ログ(KeyWrapKeyUnwrapKeyGetなど)を出力しないため、これがないとAnthropicのキー操作に関する監査証跡が得られません。

Anthropicアプリの情報

Anthropicに暗号化キーを使用させるには、AnthropicのマルチテナントアプリケーションIDと表示名を構成する必要があります。その値は次のとおりです。

フィールド
マルチテナントアプリのクライアントID(US)8635ae1a-3e5d-44e8-a4ed-e0f614466f87
アプリの表示名anthropic-cmek-client-us

暗号化キーのセットアップ

  1. Anthropicマルチテナントアプリケーションに同意する

    これにより、AnthropicのCMEKクライアントアプリケーション用のサービスプリンシパルがEntraテナント内に作成されます。このアプリケーションはMicrosoft Graphの権限を一切要求しません。Key Vaultのデータプレーンアクセスのためのフェデレーションターゲットとしてのみ存在します。

    az ad sp create --id 8635ae1a-3e5d-44e8-a4ed-e0f614466f87

    出力からidフィールドを取得します。これはテナント内のサービスプリンシパルのオブジェクトIDであり、RBACロールを割り当てる際に使用します。

    {
      "appId": "8635ae1a-3e5d-44e8-a4ed-e0f614466f87",
      "displayName": "anthropic-cmek-client-us",
      "id": "<sp-object-id>"
    }

    サービスプリンシパルがすでにテナント内に存在する場合(以前の試行や別の統合によるもの)、az ad sp createは「already exists」エラーで終了します。その場合は代わりにオブジェクトIDを取得してください。

    az ad sp show --id 8635ae1a-3e5d-44e8-a4ed-e0f614466f87 --query id -o tsv

    この手順にはPortalでの同等の操作はありません。Azure CLIがローカルにインストールされていない場合は、Portalの上部ナビゲーションバーからCloud Shellを開いてください。コマンドが成功した後、Microsoft Entra ID > Enterprise applicationsでデフォルトのアプリケーションタイプフィルターを解除し、anthropic-cmek-client-usを検索すると、サービスプリンシパルのオブジェクトIDを確認できます。

    anthropic-cmek-client-usのMicrosoft Entraエンタープライズアプリケーション概要。Application IDとObject IDが表示されています。
    Entraのエンタープライズアプリケーション概要で、サービスプリンシパルのObject ID(オブジェクトID)を確認します。
  2. ボールトにRSAキーを作成する

    Azure Key Vaultは対称キーによるラッピングをサポートしていないため、キーはRSA(3072ビット以上)で、許可された操作にwrapKeyunwrapKeyが含まれている必要があります。

    az keyvault key create \
      --vault-name <your-vault-name> \
      --name <your-key-name> \
      --kty RSA --size 3072 \
      --ops wrapKey unwrapKey

    HSMで保護されたキーの場合は、--kty RSA-HSMを使用します(Premium SKUのボールトが必要です)。この統合では、ソフトウェアで保護されたRSAキーでも問題ありません。

    Portalからは、Key Vaultを開き、Keysを選択してからGenerate/Importを選択します。キータイプをRSAに、サイズを3072以上に設定します。キーをラップとアンラップのみに制限するには、キーバージョンを開き、Permitted operationsまでスクロールして、Wrap KeyUnwrap Key以外のすべてのチェックを外します。

    Azure Key VaultのCreate a keyページ。Generateオプション、RSAキータイプ、3072のRSAキーサイズが選択されています。
    サイズ3072以上のRSAキーを作成します。
    Permitted operationsがWrap KeyとUnwrap Keyに制限されたAzure Key Vaultのキーバージョン。
    Permitted operations(許可された操作)をWrap Key(キーのラップ)とUnwrap Key(キーのアンラップ)に制限します。
  3. Anthropicサービスプリンシパルにキーへのアクセスを付与する

    最初の手順で作成したサービスプリンシパルにKey Vault Crypto Userロールを割り当てます。スコープはボールト全体ではなく個別のキーにします。

    VAULT_ID=$(az keyvault show --name <your-vault-name> --query id -o tsv)
    
    az role assignment create \
      --role "Key Vault Crypto User" \
      --assignee-object-id <sp-object-id> \
      --assignee-principal-type ServicePrincipal \
      --scope "${VAULT_ID}/keys/<your-key-name>"

    組み込みのKey Vault Crypto Userロールは、割り当てられたスコープに対してキーの暗号化操作(暗号化、復号、ラップ、アンラップ、署名、検証)とキーの読み取りを付与します。前の手順でキーに設定した--ops wrapKey unwrapKeyの制限により、このキーに対して成功する操作がさらに絞り込まれるため、実際にはAnthropicはラップとアンラップのみを実行できます。

    Portalからは、(ボールトではなく)キーを開き、Access control (IAM)タブを選択し、Add > Add role assignmentをクリックしてKey Vault Crypto Userを選択し、anthropic-cmek-client-usサービスプリンシパルに割り当てます。

    anthropic-cmek-client-usにKey Vault Crypto Userロールが割り当てられていることを示すKey VaultのIAMロール割り当て。
    キーをスコープとして、AnthropicサービスプリンシパルにKey Vault Crypto Userを割り当てます。
  4. ボールトの構成を確認する

    az keyvault show --name <your-vault-name> \
      --query "{rbac:properties.enableRbacAuthorization, purge:properties.enablePurgeProtection, pub:properties.publicNetworkAccess, net:properties.networkAcls.defaultAction, ipRules:properties.networkAcls.ipRules, uri:properties.vaultUri, tenantId:properties.tenantId}"

    次の点を確認してください。

    • rbactrueであること。
    • purgetrueであること。falseまたはnullの場合は、先に進む前にボールトで消去保護を有効にしてください。これがないと、ソフト削除されたキーが保持期間中に完全に消去される可能性があり、CMEKで保護されたデータが回復不能になります。
    • pub"Enabled"であること。"Disabled"の場合、Anthropicはパブリックなデータプレーンエンドポイント経由でボールトに到達できず、検証が失敗します。
    • net"Allow"であること。または"Deny"の場合は、ipRulesにAnthropicのエグレス範囲が含まれていること(最新のリストについてはAnthropicにお問い合わせください)。
    • uriが、キーを登録する際に使用するボールトURIであること。
    • tenantIdが、ボールトを管理するテナントであること。キーを登録する際は、現在アクティブなサブスクリプションのテナントではなく、この値をtenant_idとして使用してください(クロステナント構成では両者が異なる場合があります)。

Anthropicにキーを登録する

キーの登録方法は、使用する製品によって異なります。

  1. Anthropicにキーを登録する

    Admin APIを通じて外部キー構成を作成します。

    client = anthropic.Anthropic()
    
    external_key = client.beta.organization.external_keys.create(
        display_name="<friendly-name>",
        geo="us",
        provider_config={
            "type": "azure",
            "vault_uri": "https://<your-vault-name>.vault.azure.net/",
            "key_name": "<your-key-name>",
            "tenant_id": "<your-tenant-id>",
        },
    )
    
    print(f"id: {external_key.id}")
    print(f"display_name: {external_key.display_name}")

    レスポンスには外部キーIDが含まれます。

    {
      "type": "external_key",
      "id": "ekey_<id>",
      "display_name": "<friendly-name>"
    }
  2. キーを検証する

    キーに対して暗号化と復号のラウンドトリップをトリガーします。これにより、Anthropicがテナントに認証し、ラップおよびアンラップ操作を実行できることを確認します。

    client = anthropic.Anthropic()
    
    validation = client.beta.organization.external_keys.validate("ekey_<id>")
    
    print(f"status: {validation.status}")
    print(f"error: {validation.error}")

    成功したレスポンスは次のようになります。

    { "type": "external_key_validation", "status": "success", "error": null }

    検証が失敗した場合、errorフィールドに問題の説明が記載されます。よくある原因は次のとおりです。

    • RBACの伝播遅延: ロールの割り当てが有効になるまで数分かかる場合があります。しばらく待ってから再試行してください。
    • ネットワークACLによるAnthropicのブロック: 確認手順で説明したとおり、パブリックネットワークアクセスとipRulesを確認してください。
    • ワークロードIDに対する条件付きアクセスポリシー: テナントにサービスプリンシパルを対象とする条件付きアクセスポリシーがある場合は、Anthropicサービスプリンシパルを除外するか、ポリシーのネームドロケーションにAnthropicのエグレス範囲を追加してください。
  3. キーをワークスペースにアタッチする

    キーが検証されたら、そのワークスペースにリクエストを送信する前に、新しいワークスペースにキーをアタッチします。すでにリクエストを受信しているワークスペースの場合、キーが有効になるまで最大1日かかることがあります。

    client = anthropic.Anthropic()
    
    workspace = client.beta.organization.workspaces.update(
        "<workspace-id>", external_key_id="ekey_<id>"
    )
    
    print(f"id: {workspace.id}")
    print(f"external_key_id: {workspace.external_key_id}")

Terraform

Infrastructure as Codeによるデプロイの場合、同じ手順がazurermおよびazureadプロバイダーに対応します。

Was this page helpful?