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
  • 保存庫上已設定診斷設定(Diagnostic Settings),將 AuditEvent 記錄類別路由至 Log Analytics、儲存體帳戶或事件中樞。Azure Key Vault 預設不會發出資料平面稽核記錄(例如 KeyWrapKeyUnwrapKeyGet),因此若未設定,您將無法取得 Anthropic 金鑰操作的稽核軌跡。

Anthropic 應用程式資訊

若要讓 Anthropic 使用您的加密金鑰,您必須設定 Anthropic 多租用戶應用程式 ID 與顯示名稱。這些值如下:

欄位
多租用戶應用程式用戶端 ID(美國)8635ae1a-3e5d-44e8-a4ed-e0f614466f87
應用程式顯示名稱anthropic-cmek-client-us

加密金鑰設定

  1. 同意 Anthropic 多租用戶應用程式

    此步驟會在您的 Entra 租用戶中為 Anthropic 的 CMEK 用戶端應用程式建立一個服務主體。該應用程式不會要求任何 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 金鑰。
    Azure Key Vault 金鑰版本,其 Permitted operations 僅限於 Wrap Key 與 Unwrap Key。
    將 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 服務主體。

    Key Vault IAM 角色指派,顯示 anthropic-cmek-client-us 已被指派 Key Vault Crypto User 角色。
    將 Key Vault Crypto User 指派給 Anthropic 服務主體,範圍限定於該金鑰。
  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。若為 falsenull,請在繼續之前於保存庫上啟用清除保護。若未啟用,虛刪除的金鑰可能會在保留期間內被永久清除,使您受 CMEK 保護的資料無法復原。
    • pub"Enabled"。若為 "Disabled",Anthropic 將無法透過公用資料平面端點連線至保存庫,驗證會失敗。
    • net"Allow";或者若為 "Deny",則 ipRules 須包含 Anthropic 的輸出 IP 範圍(請聯絡 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
    • 針對工作負載身分識別的條件式存取原則: 如果您的租用戶有以服務主體為目標的條件式存取原則,請排除 Anthropic 服務主體,或將 Anthropic 的輸出 IP 範圍加入該原則的具名位置。
  3. 將金鑰附加至工作區

    金鑰驗證完成後,請在向新工作區傳送任何請求之前將金鑰附加至該工作區。對於已在接收請求的工作區,金鑰可能需要最多一天才會生效

    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)的部署,相同的步驟可對應至 azurermazuread 提供者。

Was this page helpful?