Configurar o AWS KMS para CMEK
Use o AWS KMS para fornecer uma chave de criptografia para sua organização.
claude "/claude-api help me configure a customer-managed encryption key with AWS KMS"Este guia explica como configurar uma chave do AWS KMS como uma "customer-managed encryption key" (chave de criptografia gerenciada pelo cliente), ou CMEK, para sua organização Anthropic.
Pré-requisitos
- Uma conta AWS com permissões para criar chaves KMS e definir políticas de chave (
kms:CreateKeyekms:PutKeyPolicy). - Uma chave de API Admin da Anthropic para sua organização.
- A AWS CLI instalada e autenticada.
Amazon Resource Name (ARN) para a Anthropic
Para que a Anthropic use sua chave de criptografia, você deve conceder à função IAM da Anthropic uma chave KMS que ela possa usar para criptografar dados. O ARN para CMEK da Anthropic é:
arn:aws:iam::915198916910:role/anthropic-cmek-client-usConfiguração da chave de criptografia
Crie a chave KMS com uma política de chave entre contas
A política de chave concede à função IAM da Anthropic acesso entre contas (cross-account). Três declarações são necessárias:
- Administrador root da conta: o padrão KMS convencional. Sua conta mantém controle administrativo total.
- Criptografia e descriptografia pela Anthropic: as ações
kms:Encryptekms:Decrypt, que a Anthropic usa para criptografar e descriptografar as chaves de dados que protegem os dados do seu workspace ("envelope encryption", ou criptografia de envelope). - Describe pela Anthropic: a leitura de metadados que a Anthropic realiza na inicialização. Ela é concedida separadamente porque
DescribeKeynão tem parâmetroEncryptionContext, portanto uma condiçãoEncryptionContextnessa ação sempre negaria.
export YOUR_ACCOUNT=$(aws sts get-caller-identity --query Account --output text) aws kms create-key \ --region <region> \ --description "Anthropic CMEK" \ --key-usage ENCRYPT_DECRYPT \ --policy "{ \"Version\": \"2012-10-17\", \"Statement\": [ { \"Sid\": \"AccountRootAdmin\", \"Effect\": \"Allow\", \"Principal\": {\"AWS\": \"arn:aws:iam::${YOUR_ACCOUNT}:root\"}, \"Action\": \"kms:*\", \"Resource\": \"*\" }, { \"Sid\": \"AllowAnthropicCMEKCrypto\", \"Effect\": \"Allow\", \"Principal\": {\"AWS\": \"arn:aws:iam::915198916910:role/anthropic-cmek-client-us\"}, \"Action\": [\"kms:Encrypt\", \"kms:Decrypt\"], \"Resource\": \"*\", \"Condition\": { \"StringEquals\": { \"kms:EncryptionContext:anthropic:compartment_uuid\": [ \"00000000-0000-0000-0000-000000000000\", \"<compartment-uuid>\" ] } } }, { \"Sid\": \"AllowAnthropicCMEKDescribe\", \"Effect\": \"Allow\", \"Principal\": {\"AWS\": \"arn:aws:iam::915198916910:role/anthropic-cmek-client-us\"}, \"Action\": \"kms:DescribeKey\", \"Resource\": \"*\" } ] }"Capture
KeyMetadata.Arnda saída. Você precisará dele ao registrar a chave na próxima etapa.A condição
EncryptionContexté recomendada, mas opcional. A Anthropic sempre inclui o ID de compartimento do seu workspace no contexto de criptografia, portanto o texto cifrado fica criptograficamente vinculado a esse compartimento de qualquer forma. Adicionar a condição fornece defesa em profundidade na camada IAM. Para começar sem ela, omita o blocoConditionda declaraçãoAllowAnthropicCMEKCryptoe adicione-o depois comkms:PutKeyPolicy.Você também pode criar a chave pelo AWS Console. Escolha uma chave simétrica com uso de chave para criptografar e descriptografar, uma chave de região única e origem de material de chave KMS. O assistente Create key confirma uma política de chave na etapa Review: se você adicionar o ID de conta da Anthropic
915198916910nas permissões de uso da chave ali, a política gerada concede à conta inteira da Anthropic ações mais amplas (comokms:ReEncrypt*ekms:GenerateDataKey*) sem condiçãoEncryptionContext, e a validação ainda seria bem-sucedida com ela. Para evitar deixar uma chave excessivamente permissiva, conclua o assistente apenas com permissões administrativas, depois abra a aba Key policy da chave e substitua o JSON pela política com escopo de função mostrada anteriormente (as três declarações com escopo para a funçãoanthropic-cmek-client-us, com a condiçãoEncryptionContext).
Configure key (configurar chave): Symmetric (simétrica), Encrypt and decrypt (criptografar e descriptografar), Single-Region key (chave de região única). 
Add labels (adicionar rótulos): adicione um alias e uma descrição para a chave. 
Define key administrative permissions (definir permissões administrativas da chave), opcional. Sua conta mantém controle administrativo total. 
Não adicione o ID de conta da Anthropic aqui. Esta etapa do assistente, Define key usage permissions (definir permissões de uso da chave), produz uma política excessivamente permissiva. Deixe as permissões de uso vazias e edite o JSON da Key policy após a criação (consulte a política de chave anterior).
Registre a chave na Anthropic
A forma de registrar a chave depende de qual produto você usa.
Registre a chave na Anthropic
Crie uma configuração de chave externa por meio da Admin API.
curl -sS https://api.anthropic.com/v1/organizations/external_keys \ -H "x-api-key: <anthropic-admin-api-key>" \ -H "anthropic-version: 2023-06-01" \ -H "content-type: application/json" \ -d '{ "display_name": "<friendly-name>", "geo": "us", "provider_config": { "type": "aws", "kms_arn": "<key-arn-from-create-key-step>", "role_arn": "arn:aws:iam::915198916910:role/anthropic-cmek-client-us" } }'A resposta contém o ID da chave externa:
{ "type": "external_key", "id": "ekey_<id>", "display_name": "<friendly-name>" }Valide a chave
Dispare um ciclo completo de criptografia e descriptografia com sua chave.
curl -sS -X POST https://api.anthropic.com/v1/organizations/external_keys/ekey_<id>/validate \ -H "x-api-key: <anthropic-admin-api-key>" \ -H "anthropic-version: 2023-06-01" \ -H "content-type: application/json" \ -d '{}'Uma resposta bem-sucedida tem esta aparência:
{ "type": "external_key_validation", "status": "success", "error": null }Se a validação falhar, as causas comuns são:
- Incompatibilidade de contexto de criptografia: A validação falha enquanto o tráfego de dados funciona (ou o inverso) com uma
AccessDeniedExceptionopaca quando uma condiçãokms:EncryptionContext:anthropic:compartment_uuidpermite apenas um dos dois valores que a Anthropic envia. A validação envia o UUID todo em zeros (00000000-0000-0000-0000-000000000000); o tráfego real envia o ID de compartimento do workspace anexado. Confirme que a condição lista ambos. Para descartar totalmente a condição como causa, remova temporariamente o blocoConditionda declaraçãoAllowAnthropicCMEKCryptoe valide novamente. - Resource control policies (RCPs): Se sua organização AWS tiver uma RCP que nega operações KMS quando
aws:PrincipalOrgIDnão corresponde à sua organização, ela bloqueia a função entre contas da Anthropic. A RCP precisa de uma exceção para esta chave ou para o ARN da função da Anthropic. Service control policies não se aplicam aqui, porque não são avaliadas para principais externos que chamam por meio de políticas baseadas em recursos. - Acesso concedido via IAM em vez da política de chave: O acesso KMS entre contas deve ser concedido na própria política de chave, não por meio de uma política IAM na sua conta. Verifique com
aws kms get-key-policy --key-id <id> --policy-name default. - Incompatibilidade de região: Confirme que a região da chave é uma em que a Anthropic opera para o nível geográfico que você configurou.
- Incompatibilidade de contexto de criptografia: A validação falha enquanto o tráfego de dados funciona (ou o inverso) com uma
Anexe a chave a um workspace
Depois que a chave for validada, anexe-a a um novo workspace antes de enviar qualquer requisição a esse workspace. Para um workspace que já recebe requisições, a chave pode levar até um dia para entrar em vigor.
curl -sS -X POST https://api.anthropic.com/v1/organizations/workspaces/<workspace-id> \ -H "x-api-key: <anthropic-admin-api-key>" \ -H "anthropic-version: 2023-06-01" \ -H "content-type: application/json" \ -d '{ "external_key_id": "ekey_<id>" }'
Terraform
Para implantações de infraestrutura como código, as mesmas etapas correspondem ao provider aws com os recursos aws_kms_key e aws_kms_alias.
Was this page helpful?