Claude Platform Docs
AdministraciónClaves de cifrado

Configurar Azure Key Vault para CMEK

Usa Azure Key Vault para proporcionar una clave de cifrado para tu organización.

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

Esta guía explica cómo configurar una clave de Azure Key Vault como una clave de cifrado administrada por el cliente, o "customer-managed encryption key" (CMEK) para tu organización de Anthropic.

Requisitos previos

  • Un Azure Key Vault con autorización RBAC habilitada (enableRbacAuthorization: true) y acceso de red pública permitido. Anthropic llama a tu vault a través del endpoint público del plano de datos; los endpoints privados no son compatibles.
  • Protección contra purga habilitada (enablePurgeProtection: true) en el vault. Sin ella, una clave eliminada puede purgarse permanentemente durante la ventana de retención de eliminación temporal (soft-delete), lo que causa la pérdida irreversible de tus datos protegidos con CMEK. La protección contra purga no se puede deshabilitar una vez habilitada.
  • Permisos para crear claves en el vault y para asignar roles RBAC sobre él.
  • Permisos para crear entidades de servicio (service principals) en tu tenant de Entra (Application Administrator, Cloud Application Administrator o un rol personalizado equivalente).
  • Una clave de API de administrador (Admin API key) de Anthropic para tu organización.
  • La CLI az instalada y autenticada.
  • Diagnostic Settings (configuración de diagnóstico) configurada en el vault para enrutar la categoría de registro AuditEvent a Log Analytics, una cuenta de almacenamiento o un event hub. Azure Key Vault no emite registros de auditoría del plano de datos (como KeyWrap, KeyUnwrap y KeyGet) de forma predeterminada, por lo que sin esto no obtienes ningún rastro de auditoría de las operaciones de clave de Anthropic.

Información de la aplicación de Anthropic

Para que Anthropic use tu clave de cifrado, debes configurar un ID de aplicación multitenant de Anthropic y un nombre para mostrar. Esos valores son:

CampoValor
ID de cliente de la aplicación multitenant (EE. UU.)8635ae1a-3e5d-44e8-a4ed-e0f614466f87
Nombre para mostrar de la aplicaciónanthropic-cmek-client-us

Configuración de la clave de cifrado

  1. Otorga consentimiento a la aplicación multitenant de Anthropic

    Esto crea una entidad de servicio en tu tenant de Entra para la aplicación cliente CMEK de Anthropic. La aplicación no solicita permisos de Microsoft Graph; existe únicamente como destino de federación para el acceso al plano de datos de Key Vault.

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

    De la salida, captura el campo id. Este es el ID de objeto de la entidad de servicio en tu tenant, que usarás cuando asignes el rol RBAC.

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

    Si la entidad de servicio ya existe en tu tenant (por un intento anterior u otra integración), az ad sp create termina con un error "already exists". En su lugar, obtén su ID de objeto:

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

    Este paso no tiene equivalente en el Portal. Si no tienes la CLI de Azure instalada localmente, abre Cloud Shell desde la barra de navegación superior del Portal. Después de que el comando se ejecute correctamente, puedes encontrar el ID de objeto de la entidad de servicio en Microsoft Entra ID > Enterprise applications quitando el filtro predeterminado de tipo de aplicación y buscando anthropic-cmek-client-us.

    Vista general de la aplicación empresarial de Microsoft Entra para anthropic-cmek-client-us, que muestra su Application ID y Object ID.
    Encuentra el Object ID (ID de objeto) de la entidad de servicio en la vista general de su aplicación empresarial de Entra.
  2. Crea una clave RSA en tu vault

    Azure Key Vault no admite el encapsulado (wrapping) de claves simétricas, por lo que la clave debe ser RSA (de 3072 bits o más) con wrapKey y unwrapKey en sus operaciones permitidas.

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

    Para claves respaldadas por HSM, usa --kty RSA-HSM (requiere un vault de SKU Premium). Las claves RSA protegidas por software son aceptables para esta integración.

    Desde el Portal, abre tu Key Vault, selecciona Keys y luego Generate/Import. Establece el tipo de clave en RSA y el tamaño en 3072 o más. Para restringir la clave únicamente a encapsular y desencapsular, abre la versión de la clave, desplázate hasta Permitted operations y desmarca todo excepto Wrap Key y Unwrap Key.

    Página Create a key de Azure Key Vault con la opción Generate, el tipo de clave RSA y el tamaño de clave RSA 3072 seleccionados.
    Crea una clave RSA de tamaño 3072 o mayor.
    Versión de clave de Azure Key Vault con Permitted operations limitadas a Wrap Key y Unwrap Key.
    Restringe las Permitted operations (operaciones permitidas) a Wrap Key (encapsular clave) y Unwrap Key (desencapsular clave).
  3. Otorga a la entidad de servicio de Anthropic acceso a tu clave

    Asigna el rol Key Vault Crypto User a la entidad de servicio del primer paso, con alcance a la clave individual en lugar de a todo el 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>"

    El rol integrado Key Vault Crypto User otorga operaciones criptográficas de clave (cifrar, descifrar, encapsular, desencapsular, firmar, verificar) además de lectura de clave en su alcance asignado. La restricción --ops wrapKey unwrapKey que estableciste en la clave en el paso anterior limita aún más cuáles de esas operaciones pueden realizarse correctamente sobre esta clave, por lo que en la práctica Anthropic solo puede encapsular y desencapsular.

    Desde el Portal, abre la clave (no el vault), selecciona su pestaña Access control (IAM), haz clic en Add > Add role assignment, selecciona Key Vault Crypto User y asígnalo a la entidad de servicio anthropic-cmek-client-us.

    Asignaciones de roles IAM de Key Vault que muestran anthropic-cmek-client-us con el rol Key Vault Crypto User asignado.
    Asigna Key Vault Crypto User a la entidad de servicio de Anthropic, con alcance a la clave.
  4. Verifica la configuración de tu 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}"

    Confirma que:

    • rbac es true.
    • purge es true. Si es false o null, habilita la protección contra purga en el vault antes de continuar. Sin ella, una clave eliminada temporalmente puede purgarse permanentemente durante la ventana de retención, lo que hace que tus datos protegidos con CMEK sean irrecuperables.
    • pub es "Enabled". Si es "Disabled", Anthropic no puede acceder al vault a través de su endpoint público del plano de datos y la validación falla.
    • net es "Allow" o, si es "Deny", que ipRules incluya los rangos de salida (egress) de Anthropic (contacta a Anthropic para obtener la lista actual).
    • uri es el URI del vault que usas cuando registras la clave.
    • tenantId es el tenant que gobierna el vault. Usa este valor como tenant_id cuando registres la clave, no el tenant de tu suscripción actualmente activa (ambos pueden diferir en configuraciones entre tenants).

Registra la clave con Anthropic

La forma de registrar la clave depende del producto que uses.

  1. Registra la clave con Anthropic

    Crea una configuración de clave externa a través de la 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 respuesta contiene el ID de la clave externa:

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

    Activa un ciclo completo de cifrado y descifrado con tu clave. Esto confirma que Anthropic puede autenticarse en tu tenant y realizar operaciones de encapsulado y desencapsulado.

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

    Una respuesta exitosa se ve así:

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

    Si la validación falla, el campo error describe el problema. Las causas comunes son:

    • Retraso en la propagación de RBAC: las asignaciones de roles pueden tardar unos minutos en surtir efecto. Espera y vuelve a intentarlo.
    • ACL de red que bloquean a Anthropic: confirma el acceso de red pública y las ipRules como se describe en el paso de verificación.
    • Políticas de acceso condicional sobre identidades de carga de trabajo: si tu tenant tiene políticas de acceso condicional dirigidas a entidades de servicio, excluye la entidad de servicio de Anthropic o agrega los rangos de salida de Anthropic a las ubicaciones con nombre de la política.
  3. Asocia la clave a un workspace

    Una vez validada la clave, asóciala a un nuevo workspace antes de enviar cualquier solicitud a ese workspace. Para un workspace que ya recibe solicitudes, la clave puede tardar hasta un día en surtir efecto.

    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

Para implementaciones de infraestructura como código, los mismos pasos se corresponden con los proveedores azurerm y azuread.

Was this page helpful?