Claude Platform Docs
АдминистрированиеКлючи шифрования

Настройка Azure Key Vault для CMEK

Используйте 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 в качестве «customer-managed encryption key» (ключа шифрования, управляемого клиентом), или CMEK для вашей организации Anthropic.

Предварительные требования

  • Azure Key Vault с включённой авторизацией RBAC (enableRbacAuthorization: true) и разрешённым публичным сетевым доступом. Anthropic обращается к вашему хранилищу через публичную конечную точку плоскости данных; частные конечные точки не поддерживаются.
  • Включённая защита от очистки (enablePurgeProtection: true) в хранилище. Без неё удалённый ключ может быть безвозвратно очищен в течение периода хранения при мягком удалении, что приведёт к необратимой потере ваших данных, защищённых CMEK. Защиту от очистки нельзя отключить после включения.
  • Разрешения на создание ключей в хранилище и назначение ролей RBAC для него.
  • Разрешения на создание субъектов-служб (service principals) в вашем клиенте Entra (Application Administrator, Cloud Application Administrator или эквивалентная пользовательская роль).
  • Ключ Anthropic Admin API для вашей организации.
  • Установленный и аутентифицированный az CLI.
  • Diagnostic Settings (параметры диагностики), настроенные в хранилище для направления категории журналов AuditEvent в Log Analytics, учётную запись хранения или концентратор событий. Azure Key Vault по умолчанию не создаёт журналы аудита плоскости данных (такие как KeyWrap, KeyUnwrap и KeyGet), поэтому без этого у вас не будет аудиторского следа операций Anthropic с ключом.

Информация о приложении Anthropic

Чтобы Anthropic использовал ваш ключ шифрования, необходимо настроить идентификатор мультитенантного приложения Anthropic и его отображаемое имя. Эти значения:

ПолеЗначение
Идентификатор клиента мультитенантного приложения (US)8635ae1a-3e5d-44e8-a4ed-e0f614466f87
Отображаемое имя приложенияanthropic-cmek-client-us

Настройка ключа шифрования

  1. Дайте согласие на мультитенантное приложение Anthropic

    Это создаёт субъект-службу в вашем клиенте Entra для клиентского приложения CMEK от Anthropic. Приложение не запрашивает никаких разрешений Microsoft Graph; оно существует исключительно как цель федерации для доступа к плоскости данных Key Vault.

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

    Из вывода сохраните поле id. Это идентификатор объекта субъекта-службы в вашем клиенте, который вы используете при назначении роли RBAC.

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

    Если субъект-служба уже существует в вашем клиенте (после предыдущей попытки или другой интеграции), az ad sp create завершится с ошибкой «already exists». Вместо этого получите его идентификатор объекта:

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

    У этого шага нет эквивалента в Portal. Если у вас не установлен Azure CLI локально, откройте Cloud Shell из верхней панели навигации Portal. После успешного выполнения команды вы можете найти идентификатор объекта субъекта-службы в разделе Microsoft Entra ID > Enterprise applications, сбросив фильтр по типу приложения по умолчанию и выполнив поиск anthropic-cmek-client-us.

    Обзор корпоративного приложения Microsoft Entra для anthropic-cmek-client-us с отображением его Application ID и Object ID.
    Найдите Object ID (идентификатор объекта) субъекта-службы на странице обзора его корпоративного приложения Entra.
  2. Создайте ключ RSA в вашем хранилище

    Azure Key Vault не поддерживает обёртывание симметричных ключей, поэтому ключ должен быть RSA (3072 бит или больше) с операциями wrapKey и unwrapKey в списке разрешённых.

    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 Key и Unwrap Key.

    Страница Create a key в Azure Key Vault с выбранными параметрами Generate, типом ключа RSA и размером ключа RSA 3072.
    Создайте ключ RSA размером 3072 или больше.
    Версия ключа 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.

    Назначения ролей IAM в Key Vault, показывающие 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}"

    Убедитесь, что:

    • rbac имеет значение true.
    • purge имеет значение true. Если значение 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}")

    Ответ содержит идентификатор внешнего ключа:

    {
      "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 в именованные расположения политики.
  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

Для развёртываний в формате «инфраструктура как код» те же шаги соответствуют провайдерам azurerm и azuread.

Was this page helpful?