Claude Platform Docs
AdminKunci enkripsi

Mengonfigurasi Azure Key Vault untuk CMEK

Gunakan Azure Key Vault untuk menyediakan kunci enkripsi bagi organisasi Anda.

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

Panduan ini menjelaskan langkah-langkah mengonfigurasi kunci Azure Key Vault sebagai "customer-managed encryption key" (kunci enkripsi yang dikelola pelanggan), atau CMEK untuk organisasi Anthropic Anda.

Prasyarat

  • Azure Key Vault dengan otorisasi RBAC diaktifkan (enableRbacAuthorization: true) dan akses jaringan publik diizinkan. Anthropic memanggil vault Anda melalui endpoint data-plane publik; private endpoint tidak didukung.
  • Purge protection diaktifkan (enablePurgeProtection: true) pada vault. Tanpanya, kunci yang dihapus dapat di-purge secara permanen selama jendela retensi soft-delete, yang menyebabkan kehilangan data terlindungi CMEK Anda secara permanen. Purge protection tidak dapat dinonaktifkan setelah diaktifkan.
  • Izin untuk membuat kunci di vault dan untuk menetapkan peran RBAC pada vault tersebut.
  • Izin untuk membuat service principal di tenant Entra Anda (Application Administrator, Cloud Application Administrator, atau peran kustom yang setara).
  • Kunci Admin API Anthropic untuk organisasi Anda.
  • CLI az terinstal dan terautentikasi.
  • Diagnostic Settings dikonfigurasi pada vault untuk merutekan kategori log AuditEvent ke Log Analytics, storage account, atau event hub. Azure Key Vault tidak mengeluarkan log audit data-plane (seperti KeyWrap, KeyUnwrap, dan KeyGet) secara default, sehingga tanpa ini Anda tidak mendapatkan jejak audit untuk operasi kunci yang dilakukan Anthropic.

Informasi aplikasi Anthropic

Agar Anthropic dapat menggunakan kunci enkripsi Anda, Anda harus mengonfigurasi ID aplikasi multitenant Anthropic dan nama tampilannya. Nilai-nilai tersebut adalah:

FieldNilai
Client ID aplikasi multitenant (US)8635ae1a-3e5d-44e8-a4ed-e0f614466f87
Nama tampilan aplikasianthropic-cmek-client-us

Penyiapan kunci enkripsi

  1. Berikan persetujuan untuk aplikasi multitenant Anthropic

    Langkah ini membuat service principal di tenant Entra Anda untuk aplikasi klien CMEK Anthropic. Aplikasi ini tidak meminta izin Microsoft Graph apa pun; aplikasi ini hanya ada sebagai target federasi untuk akses data-plane Key Vault.

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

    Dari output, catat field id. Ini adalah object ID service principal di tenant Anda, yang Anda gunakan saat menetapkan peran RBAC.

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

    Jika service principal sudah ada di tenant Anda (dari percobaan sebelumnya atau integrasi lain), az ad sp create akan keluar dengan error "already exists". Ambil object ID-nya sebagai gantinya:

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

    Langkah ini tidak memiliki padanan di Portal. Jika Anda tidak memiliki Azure CLI yang terinstal secara lokal, buka Cloud Shell dari bilah navigasi atas Portal. Setelah perintah berhasil, Anda dapat menemukan object ID service principal di Microsoft Entra ID > Enterprise applications dengan menghapus filter tipe aplikasi default dan mencari anthropic-cmek-client-us.

    Ringkasan enterprise application Microsoft Entra untuk anthropic-cmek-client-us, yang menampilkan Application ID dan Object ID-nya.
    Temukan Object ID service principal pada halaman ringkasan enterprise application Entra-nya.
  2. Buat kunci RSA di vault Anda

    Azure Key Vault tidak mendukung symmetric key wrapping, sehingga kunci harus berupa RSA (3072-bit atau lebih besar) dengan wrapKey dan unwrapKey dalam operasi yang diizinkan.

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

    Untuk kunci yang didukung HSM, gunakan --kty RSA-HSM (memerlukan vault dengan SKU Premium). Kunci RSA yang dilindungi perangkat lunak dapat diterima untuk integrasi ini.

    Dari Portal, buka Key Vault Anda, pilih Keys, lalu Generate/Import. Atur tipe kunci ke RSA dan ukurannya ke 3072 atau lebih besar. Untuk membatasi kunci hanya untuk wrap dan unwrap, buka versi kunci, gulir ke Permitted operations, dan hapus centang semuanya kecuali Wrap Key dan Unwrap Key.

    Halaman Create a key di Azure Key Vault dengan opsi Generate, tipe kunci RSA, dan ukuran kunci RSA 3072 dipilih.
    Buat kunci RSA berukuran 3072 atau lebih besar.
    Versi kunci Azure Key Vault dengan Permitted operations dibatasi ke Wrap Key dan Unwrap Key.
    Batasi Permitted operations (operasi yang diizinkan) ke Wrap Key dan Unwrap Key.
  3. Berikan akses ke kunci Anda kepada service principal Anthropic

    Tetapkan peran Key Vault Crypto User ke service principal dari langkah pertama, dengan cakupan pada kunci individual, bukan seluruh vault.

    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>"

    Peran bawaan Key Vault Crypto User memberikan operasi kriptografi kunci (encrypt, decrypt, wrap, unwrap, sign, verify) ditambah pembacaan kunci pada cakupan yang ditetapkan. Pembatasan --ops wrapKey unwrapKey yang Anda atur pada kunci di langkah sebelumnya semakin mempersempit operasi mana yang dapat berhasil terhadap kunci ini, sehingga dalam praktiknya Anthropic hanya dapat melakukan wrap dan unwrap.

    Dari Portal, buka kunci (bukan vault), pilih tab Access control (IAM), klik Add > Add role assignment, pilih Key Vault Crypto User, dan tetapkan ke service principal anthropic-cmek-client-us.

    Penetapan peran IAM Key Vault yang menampilkan anthropic-cmek-client-us diberi peran Key Vault Crypto User.
    Tetapkan Key Vault Crypto User ke service principal Anthropic, dengan cakupan pada kunci.
  4. Verifikasi konfigurasi vault Anda

    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}"

    Pastikan bahwa:

    • rbac bernilai true.
    • purge bernilai true. Jika bernilai false atau null, aktifkan purge protection pada vault sebelum melanjutkan. Tanpanya, kunci yang di-soft-delete dapat di-purge secara permanen selama jendela retensi, sehingga data terlindungi CMEK Anda tidak dapat dipulihkan.
    • pub bernilai "Enabled". Jika bernilai "Disabled", Anthropic tidak dapat menjangkau vault melalui endpoint data-plane publiknya dan validasi akan gagal.
    • net bernilai "Allow", atau, jika bernilai "Deny", pastikan ipRules mencakup rentang egress Anthropic (hubungi Anthropic untuk daftar terbaru).
    • uri adalah URI vault yang Anda gunakan saat mendaftarkan kunci.
    • tenantId adalah tenant yang mengatur vault. Gunakan nilai ini sebagai tenant_id saat Anda mendaftarkan kunci, bukan tenant dari subscription Anda yang sedang aktif (keduanya dapat berbeda dalam penyiapan lintas tenant).

Daftarkan kunci ke Anthropic

Cara Anda mendaftarkan kunci bergantung pada produk yang Anda gunakan.

  1. Daftarkan kunci ke Anthropic

    Buat konfigurasi kunci eksternal melalui 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}")

    Respons berisi ID kunci eksternal:

    {
      "type": "external_key",
      "id": "ekey_<id>",
      "display_name": "<friendly-name>"
    }
  2. Validasi kunci

    Picu proses encrypt dan decrypt bolak-balik terhadap kunci Anda. Ini memastikan bahwa Anthropic dapat melakukan autentikasi ke tenant Anda dan melakukan operasi wrap dan unwrap.

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

    Respons yang berhasil terlihat seperti ini:

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

    Jika validasi gagal, field error menjelaskan masalahnya. Penyebab umumnya adalah:

    • Penundaan propagasi RBAC: penetapan peran dapat memerlukan beberapa menit untuk berlaku. Tunggu dan coba lagi.
    • ACL jaringan memblokir Anthropic: pastikan akses jaringan publik dan ipRules seperti yang dijelaskan pada langkah verifikasi.
    • Kebijakan conditional access pada workload identity: jika tenant Anda memiliki kebijakan conditional access yang menargetkan service principal, kecualikan service principal Anthropic atau tambahkan rentang egress Anthropic ke named locations kebijakan tersebut.
  3. Lampirkan kunci ke workspace

    Setelah kunci divalidasi, lampirkan ke workspace baru sebelum Anda mengirim permintaan apa pun ke workspace tersebut. Untuk workspace yang sudah menerima permintaan, kunci dapat memerlukan waktu hingga satu hari untuk berlaku.

    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

Untuk deployment infrastructure-as-code, langkah-langkah yang sama dipetakan ke provider azurerm dan azuread.

Was this page helpful?