CMEK용 Azure Key Vault 구성
Azure Key Vault를 사용하여 조직에 암호화 키를 제공합니다.
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 키.
azCLI가 설치되고 인증되어 있어야 합니다.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 |
암호화 키 설정
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를 찾을 수 있습니다.
Entra 엔터프라이즈 애플리케이션 개요에서 서비스 주체의 Object ID(개체 ID)를 찾습니다. vault에 RSA 키 생성
Azure Key Vault는 대칭 키 래핑을 지원하지 않으므로, 키는 허용된 작업에
wrapKey및unwrapKey가 포함된 RSA(3072비트 이상)여야 합니다.az keyvault key create \ --vault-name <your-vault-name> \ --name <your-key-name> \ --kty RSA --size 3072 \ --ops wrapKey unwrapKeyHSM 기반 키의 경우
--kty RSA-HSM을 사용하세요(Premium SKU vault 필요). 소프트웨어 보호 RSA 키도 이 통합에 사용할 수 있습니다.Portal에서는 Key Vault를 열고 Keys를 선택한 다음 Generate/Import를 선택하세요. 키 유형을 RSA로, 크기를 3072 이상으로 설정하세요. 키를 래핑 및 언래핑으로만 제한하려면 키 버전을 열고 Permitted operations로 스크롤한 다음 Wrap Key와 Unwrap Key를 제외한 모든 항목의 선택을 해제하세요.

크기가 3072 이상인 RSA 키를 생성합니다. 
Permitted operations(허용된 작업)를 Wrap Key와 Unwrap Key로 제한합니다. 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 서비스 주체에 Key Vault Crypto User를 할당합니다. 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}"다음을 확인하세요.
rbac가true입니다.purge가true입니다.false또는null인 경우 진행하기 전에 vault에서 제거 보호를 활성화하세요. 이 기능이 없으면 소프트 삭제된 키가 보존 기간 동안 영구적으로 제거되어 CMEK로 보호된 데이터를 복구할 수 없게 됩니다.pub이"Enabled"입니다."Disabled"인 경우 Anthropic이 공용 데이터 플레인 엔드포인트를 통해 vault에 접근할 수 없어 검증이 실패합니다.net이"Allow"이거나,"Deny"인 경우ipRules에 Anthropic의 이그레스 범위가 포함되어 있습니다(현재 목록은 Anthropic에 문의하세요).uri는 키를 등록할 때 사용하는 vault URI입니다.tenantId는 vault를 관리하는 테넌트입니다. 키를 등록할 때 현재 활성 구독의 테넌트가 아닌 이 값을tenant_id로 사용하세요(교차 테넌트 설정에서는 두 값이 다를 수 있습니다).
Anthropic에 키 등록
키를 등록하는 방법은 사용하는 제품에 따라 다릅니다.
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>" }키 검증
키에 대해 암호화 및 복호화 왕복 작업을 트리거하세요. 이를 통해 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의 이그레스 범위를 추가하세요.
워크스페이스에 키 연결
키가 검증되면 해당 워크스페이스에 요청을 보내기 전에 새 워크스페이스에 키를 연결하세요. 이미 요청을 받고 있는 워크스페이스의 경우 키가 적용되기까지 최대 하루가 걸릴 수 있습니다.
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) 배포의 경우, 동일한 단계가 azurerm 및 azuread 프로바이더에 매핑됩니다.
Was this page helpful?