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은 공용 데이터 플레인 엔드포인트를 통해 vault를 호출하며, 프라이빗 엔드포인트는 지원되지 않습니다.
  • vault에 제거 보호(purge protection)가 활성화(enablePurgeProtection: true)되어 있어야 합니다. 이 기능이 없으면 삭제된 키가 소프트 삭제 보존 기간 동안 영구적으로 제거될 수 있으며, 이로 인해 CMEK로 보호된 데이터가 복구 불가능하게 손실됩니다. 제거 보호는 한 번 활성화하면 비활성화할 수 없습니다.
  • vault에서 키를 생성하고 RBAC 역할을 할당할 수 있는 권한.
  • Entra 테넌트에서 서비스 주체를 생성할 수 있는 권한(Application Administrator, Cloud Application Administrator 또는 이에 상응하는 사용자 지정 역할).
  • 조직의 Anthropic Admin API 키.
  • az CLI가 설치되고 인증되어 있어야 합니다.
  • AuditEvent 로그 범주를 Log Analytics, 스토리지 계정 또는 이벤트 허브로 라우팅하도록 vault에 **진단 설정(Diagnostic Settings)**이 구성되어 있어야 합니다. Azure Key Vault는 기본적으로 데이터 플레인 감사 로그(KeyWrap, KeyUnwrap, KeyGet 등)를 내보내지 않으므로, 이 설정이 없으면 Anthropic의 키 작업에 대한 감사 추적을 얻을 수 없습니다.

Anthropic 앱 정보

Anthropic이 암호화 키를 사용하도록 하려면 Anthropic 멀티테넌트 애플리케이션 ID와 표시 이름을 구성해야 합니다. 해당 값은 다음과 같습니다.

필드
멀티테넌트 앱 클라이언트 ID(US)8635ae1a-3e5d-44e8-a4ed-e0f614466f87
앱 표시 이름anthropic-cmek-client-us

암호화 키 설정

  1. Anthropic 멀티테넌트 애플리케이션에 동의

    이 단계는 Anthropic의 CMEK 클라이언트 애플리케이션에 대한 서비스 주체를 Entra 테넌트에 생성합니다. 이 애플리케이션은 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. vault에 RSA 키 생성

    Azure Key Vault는 대칭 키 래핑을 지원하지 않으므로, 키는 허용된 작업에 wrapKeyunwrapKey가 포함된 RSA(3072비트 이상)여야 합니다.

    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 vault 필요). 소프트웨어 보호 RSA 키도 이 통합에 사용할 수 있습니다.

    Portal에서는 Key Vault를 열고 Keys를 선택한 다음 Generate/Import를 선택하세요. 키 유형을 RSA로, 크기를 3072 이상으로 설정하세요. 키를 래핑 및 언래핑으로만 제한하려면 키 버전을 열고 Permitted operations로 스크롤한 다음 Wrap KeyUnwrap Key를 제외한 모든 항목의 선택을 해제하세요.

    Generate 옵션, RSA 키 유형, 3072 RSA 키 크기가 선택된 Azure Key Vault Create a key 페이지.
    크기가 3072 이상인 RSA 키를 생성합니다.
    Permitted operations가 Wrap Key와 Unwrap Key로 제한된 Azure Key Vault 키 버전.
    Permitted operations(허용된 작업)를 Wrap Key와 Unwrap Key로 제한합니다.
  3. Anthropic 서비스 주체에 키 액세스 권한 부여

    첫 번째 단계의 서비스 주체에 Key Vault Crypto User 역할을 할당하되, 범위는 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>"

    기본 제공 Key Vault Crypto User 역할은 할당된 범위에서 키 암호화 작업(encrypt, decrypt, wrap, unwrap, sign, verify)과 키 읽기 권한을 부여합니다. 이전 단계에서 키에 설정한 --ops wrapKey unwrapKey 제한은 이 키에 대해 성공할 수 있는 작업을 더욱 좁히므로, 실제로 Anthropic은 래핑과 언래핑만 수행할 수 있습니다.

    Portal에서는 vault가 아닌 를 열고 Access control (IAM) 탭을 선택한 다음 Add > Add role assignment를 클릭하고 Key Vault Crypto User를 선택하여 anthropic-cmek-client-us 서비스 주체에 할당하세요.

    anthropic-cmek-client-us에 Key Vault Crypto User 역할이 할당된 것을 보여주는 Key Vault IAM 역할 할당.
    키 범위로 지정하여 Anthropic 서비스 주체에 Key Vault Crypto User를 할당합니다.
  4. 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}"

    다음을 확인하세요.

    • rbactrue입니다.
    • purgetrue입니다. false 또는 null인 경우 진행하기 전에 vault에서 제거 보호를 활성화하세요. 이 기능이 없으면 소프트 삭제된 키가 보존 기간 동안 영구적으로 제거되어 CMEK로 보호된 데이터를 복구할 수 없게 됩니다.
    • pub"Enabled"입니다. "Disabled"인 경우 Anthropic이 공용 데이터 플레인 엔드포인트를 통해 vault에 접근할 수 없어 검증이 실패합니다.
    • net"Allow"이거나, "Deny"인 경우 ipRules에 Anthropic의 이그레스 범위가 포함되어 있습니다(현재 목록은 Anthropic에 문의하세요).
    • uri는 키를 등록할 때 사용하는 vault URI입니다.
    • tenantId는 vault를 관리하는 테넌트입니다. 키를 등록할 때 현재 활성 구독의 테넌트가 아닌 이 값을 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 전파 지연: 역할 할당이 적용되기까지 몇 분이 걸릴 수 있습니다. 잠시 기다린 후 다시 시도하세요.
    • Anthropic을 차단하는 네트워크 ACL: 확인 단계에서 설명한 대로 공용 네트워크 액세스와 ipRules를 확인하세요.
    • 워크로드 ID에 대한 조건부 액세스 정책: 테넌트에 서비스 주체를 대상으로 하는 조건부 액세스 정책이 있는 경우, 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

코드형 인프라(infrastructure-as-code) 배포의 경우, 동일한 단계가 azurermazuread 프로바이더에 매핑됩니다.

Was this page helpful?