Claude Platform Docs
AmministrazioneChiavi di crittografia

Configurare Azure Key Vault per CMEK

Usa Azure Key Vault per fornire una chiave di crittografia per la tua organizzazione.

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

Questa guida illustra come configurare una chiave di Azure Key Vault come customer-managed encryption key (chiave di crittografia gestita dal cliente), o CMEK per la tua organizzazione Anthropic.

Prerequisiti

  • Un Azure Key Vault con autorizzazione RBAC abilitata (enableRbacAuthorization: true) e accesso alla rete pubblica consentito. Anthropic chiama il tuo vault tramite l'endpoint pubblico del data plane; gli endpoint privati non sono supportati.
  • Protezione dall'eliminazione definitiva (purge protection) abilitata (enablePurgeProtection: true) sul vault. Senza di essa, una chiave eliminata può essere rimossa definitivamente durante la finestra di conservazione del soft-delete, causando la perdita irreversibile dei tuoi dati protetti da CMEK. La purge protection non può essere disabilitata una volta abilitata.
  • Permessi per creare chiavi nel vault e per assegnare ruoli RBAC su di esso.
  • Permessi per creare service principal nel tuo tenant Entra (Application Administrator, Cloud Application Administrator o un ruolo personalizzato equivalente).
  • Una chiave API Admin di Anthropic per la tua organizzazione.
  • La CLI az installata e autenticata.
  • Diagnostic Settings (impostazioni di diagnostica) configurate sul vault per instradare la categoria di log AuditEvent verso Log Analytics, un account di archiviazione o un event hub. Azure Key Vault non emette log di audit del data plane (come KeyWrap, KeyUnwrap e KeyGet) per impostazione predefinita, quindi senza questa configurazione non ottieni alcuna traccia di audit per le operazioni di Anthropic sulla chiave.

Informazioni sull'app Anthropic

Per consentire ad Anthropic di usare la tua chiave di crittografia, devi configurare un ID applicazione multitenant di Anthropic e un nome visualizzato. Questi valori sono:

CampoValore
Client ID dell'app multitenant (US)8635ae1a-3e5d-44e8-a4ed-e0f614466f87
Nome visualizzato dell'appanthropic-cmek-client-us

Configurazione della chiave di crittografia

  1. Concedi il consenso all'applicazione multitenant di Anthropic

    Questo crea un service principal nel tuo tenant Entra per l'applicazione client CMEK di Anthropic. L'applicazione non richiede alcun permesso Microsoft Graph; esiste unicamente come destinazione di federazione per l'accesso al data plane di Key Vault.

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

    Dall'output, acquisisci il campo id. Questo è l'object ID del service principal nel tuo tenant, che userai quando assegni il ruolo RBAC.

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

    Se il service principal esiste già nel tuo tenant (da un tentativo precedente o da un'altra integrazione), az ad sp create termina con un errore "already exists". Recupera invece il suo object ID:

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

    Questo passaggio non ha un equivalente nel Portal. Se non hai la Azure CLI installata localmente, apri Cloud Shell dalla barra di navigazione superiore del Portal. Dopo che il comando ha avuto successo, puoi trovare l'object ID del service principal in Microsoft Entra ID > Enterprise applications rimuovendo il filtro predefinito per tipo di applicazione e cercando anthropic-cmek-client-us.

    Panoramica dell'enterprise application Microsoft Entra per anthropic-cmek-client-us, che mostra il suo Application ID e Object ID.
    Trova l'Object ID del service principal nella panoramica della sua enterprise application in Entra.
  2. Crea una chiave RSA nel tuo vault

    Azure Key Vault non supporta il wrapping di chiavi simmetriche, quindi la chiave deve essere RSA (3072 bit o superiore) con wrapKey e unwrapKey tra le operazioni consentite.

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

    Per chiavi supportate da HSM, usa --kty RSA-HSM (richiede un vault con SKU Premium). Le chiavi RSA protette via software sono accettabili per questa integrazione.

    Dal Portal, apri il tuo Key Vault, seleziona Keys, quindi Generate/Import. Imposta il tipo di chiave su RSA e la dimensione su 3072 o superiore. Per limitare la chiave alle sole operazioni di wrap e unwrap, apri la versione della chiave, scorri fino a Permitted operations (operazioni consentite) e deseleziona tutto tranne Wrap Key e Unwrap Key.

    Pagina Create a key di Azure Key Vault con l'opzione Generate, il tipo di chiave RSA e la dimensione della chiave RSA 3072 selezionati.
    Crea una chiave RSA di dimensione 3072 o superiore.
    Versione della chiave di Azure Key Vault con Permitted operations limitate a Wrap Key e Unwrap Key.
    Limita le Permitted operations (operazioni consentite) a Wrap Key e Unwrap Key.
  3. Concedi al service principal di Anthropic l'accesso alla tua chiave

    Assegna il ruolo Key Vault Crypto User al service principal del primo passaggio, con ambito limitato alla singola chiave anziché all'intero 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>"

    Il ruolo predefinito Key Vault Crypto User concede le operazioni crittografiche sulle chiavi (encrypt, decrypt, wrap, unwrap, sign, verify) più la lettura delle chiavi nell'ambito assegnato. La restrizione --ops wrapKey unwrapKey che hai impostato sulla chiave nel passaggio precedente restringe ulteriormente quali di queste operazioni possono avere successo su questa chiave, quindi in pratica Anthropic può solo eseguire wrap e unwrap.

    Dal Portal, apri la chiave (non il vault), seleziona la scheda Access control (IAM), fai clic su Add > Add role assignment, seleziona Key Vault Crypto User e assegnalo al service principal anthropic-cmek-client-us.

    Assegnazioni di ruolo IAM di Key Vault che mostrano anthropic-cmek-client-us con il ruolo Key Vault Crypto User assegnato.
    Assegna Key Vault Crypto User al service principal di Anthropic, con ambito limitato alla chiave.
  4. Verifica la configurazione del tuo vault

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

    Conferma che:

    • rbac sia true.
    • purge sia true. Se è false o null, abilita la purge protection sul vault prima di procedere. Senza di essa, una chiave in soft-delete può essere rimossa definitivamente durante la finestra di conservazione, rendendo irrecuperabili i tuoi dati protetti da CMEK.
    • pub sia "Enabled". Se è "Disabled", Anthropic non può raggiungere il vault tramite il suo endpoint pubblico del data plane e la validazione fallisce.
    • net sia "Allow", oppure, se è "Deny", che ipRules includa gli intervalli di egress di Anthropic (contatta Anthropic per l'elenco aggiornato).
    • uri sia l'URI del vault che userai quando registri la chiave.
    • tenantId sia il tenant che governa il vault. Usa questo valore come tenant_id quando registri la chiave, non il tenant della tua sottoscrizione attualmente attiva (i due possono differire nelle configurazioni cross-tenant).

Registra la chiave con Anthropic

Il modo in cui registri la chiave dipende dal prodotto che usi.

  1. Registra la chiave con Anthropic

    Crea una configurazione di chiave esterna tramite l'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}")

    La risposta contiene l'ID della chiave esterna:

    {
      "type": "external_key",
      "id": "ekey_<id>",
      "display_name": "<friendly-name>"
    }
  2. Valida la chiave

    Attiva un ciclo completo di crittografia e decrittografia sulla tua chiave. Questo conferma che Anthropic può autenticarsi al tuo tenant ed eseguire operazioni di wrap e unwrap.

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

    Una risposta riuscita ha questo aspetto:

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

    Se la validazione fallisce, il campo error descrive il problema. Le cause comuni sono:

    • Ritardo di propagazione RBAC: le assegnazioni di ruolo possono richiedere alcuni minuti per diventare effettive. Attendi e riprova.
    • ACL di rete che bloccano Anthropic: conferma l'accesso alla rete pubblica e le ipRules come descritto nel passaggio di verifica.
    • Criteri di accesso condizionale sulle workload identity: se il tuo tenant ha criteri di accesso condizionale che hanno come destinazione i service principal, escludi il service principal di Anthropic oppure aggiungi gli intervalli di egress di Anthropic alle named location del criterio.
  3. Associa la chiave a un workspace

    Una volta validata la chiave, associala a un nuovo workspace prima di inviare qualsiasi richiesta a quel workspace. Per un workspace che riceve già richieste, la chiave può richiedere fino a un giorno per diventare effettiva.

    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

Per i deployment infrastructure-as-code, gli stessi passaggi corrispondono ai provider azurerm e azuread.

Was this page helpful?