Настройка AWS KMS для CMEK
Используйте AWS KMS, чтобы предоставить ключ шифрования для вашей организации.
claude "/claude-api help me configure a customer-managed encryption key with AWS KMS"В этом руководстве описывается настройка ключа AWS KMS в качестве «customer-managed encryption key» (ключа шифрования, управляемого клиентом), или CMEK для вашей организации Anthropic.
Предварительные требования
- Учётная запись AWS с разрешениями на создание ключей KMS и установку политик ключей (
kms:CreateKeyиkms:PutKeyPolicy). - Ключ Admin API Anthropic для вашей организации.
- Установленный и аутентифицированный AWS CLI.
Amazon Resource Name (ARN) для Anthropic
Чтобы Anthropic использовала ваш ключ шифрования, вы должны предоставить роли IAM Anthropic ключ KMS, который она сможет использовать для шифрования данных. ARN для Anthropic CMEK:
arn:aws:iam::915198916910:role/anthropic-cmek-client-usНастройка ключа шифрования
Создайте ключ KMS с межаккаунтной политикой ключа
Политика ключа предоставляет роли IAM Anthropic межаккаунтный доступ. Требуются три оператора (statements):
- Администратор root учётной записи: стандартный шаблон KMS. Ваша учётная запись сохраняет полный административный контроль.
- Шифрование и расшифровка для Anthropic: действия
kms:Encryptиkms:Decrypt, которые Anthropic использует для шифрования и расшифровки ключей данных, защищающих данные вашего рабочего пространства («envelope encryption» — конвертное шифрование). - Describe для Anthropic: чтение метаданных, которое Anthropic выполняет при запуске. Оно предоставляется отдельно, поскольку у
DescribeKeyнет параметраEncryptionContext, поэтому условиеEncryptionContextдля этого действия всегда приводило бы к отказу.
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\": \"*\" } ] }"Сохраните значение
KeyMetadata.Arnиз вывода. Оно понадобится вам при регистрации ключа на следующем шаге.Условие
EncryptionContextрекомендуется, но не является обязательным. Anthropic всегда включает идентификатор компартмента (compartment ID) вашего рабочего пространства в контекст шифрования, поэтому шифротекст в любом случае криптографически привязан к этому компартменту. Добавление условия обеспечивает эшелонированную защиту (defense-in-depth) на уровне IAM. Чтобы начать без него, опустите блокConditionв оператореAllowAnthropicCMEKCryptoи добавьте его позже с помощьюkms:PutKeyPolicy.Вы также можете создать ключ в AWS Console. Выберите симметричный ключ с использованием ключа для шифрования и расшифровки (encrypt and decrypt), однорегиональный ключ и происхождение материала ключа KMS. Мастер Create-key фиксирует политику ключа на шаге Review: если вы добавите там идентификатор учётной записи Anthropic
915198916910в разрешениях на использование ключа, сгенерированная политика предоставит всей учётной записи Anthropic более широкие действия (такие какkms:ReEncrypt*иkms:GenerateDataKey*) без условияEncryptionContext, и валидация всё равно пройдёт успешно. Чтобы не оставлять ключ с избыточными разрешениями, завершите мастер только с административными разрешениями, затем откройте вкладку Key policy ключа и замените JSON политикой с ограничением по роли, показанной ранее (три оператора, ограниченные рольюanthropic-cmek-client-us, с условиемEncryptionContext).
Configure key (настройка ключа): symmetric (симметричный), encrypt and decrypt (шифрование и расшифровка), single-region key (однорегиональный ключ). 
Добавьте псевдоним (alias) и описание (description) для ключа. 
Define key administrative permissions (определение административных разрешений ключа) — необязательно. Ваша учётная запись сохраняет полный административный контроль. 
Не добавляйте здесь идентификатор учётной записи Anthropic. Этот шаг мастера создаёт политику с избыточными разрешениями. Оставьте usage permissions (разрешения на использование) пустыми и отредактируйте JSON Key policy (политики ключа) после создания (см. предыдущую политику ключа).
Регистрация ключа в Anthropic
Способ регистрации ключа зависит от того, какой продукт вы используете.
Зарегистрируйте ключ в Anthropic
Создайте конфигурацию внешнего ключа через Admin API.
client = anthropic.Anthropic() external_key = client.beta.organization.external_keys.create( display_name="<friendly-name>", geo="us", provider_config={"type": "aws", "kms_arn": "<key-arn-from-create-key-step>"}, ) print(f"id: {external_key.id}") print(f"display_name: {external_key.display_name}")Ответ содержит идентификатор внешнего ключа:
{ "type": "external_key", "id": "ekey_<id>", "display_name": "<friendly-name>" }Выполните валидацию ключа
Запустите цикл шифрования и расшифровки с использованием вашего ключа.
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 }Если валидация не проходит, распространённые причины таковы:
- Несоответствие контекста шифрования: Валидация не проходит, в то время как трафик данных работает (или наоборот), с непрозрачной ошибкой
AccessDeniedException, когда условиеkms:EncryptionContext:anthropic:compartment_uuidразрешает только одно из двух значений, которые отправляет Anthropic. Валидация отправляет UUID из одних нулей (00000000-0000-0000-0000-000000000000); рабочий трафик отправляет идентификатор компартмента привязанного рабочего пространства. Убедитесь, что в условии указаны оба. Чтобы полностью исключить условие как причину, временно удалите блокConditionиз оператораAllowAnthropicCMEKCryptoи повторите валидацию. - Политики управления ресурсами (RCP): Если в вашей организации AWS есть RCP, запрещающая операции KMS, когда
aws:PrincipalOrgIDне совпадает с вашей организацией, она блокирует межаккаунтную роль Anthropic. В RCP необходимо исключение для этого ключа или для ARN роли Anthropic. Политики управления сервисами (SCP) здесь не применяются, поскольку они не оцениваются для внешних принципалов, выполняющих вызовы через политики на основе ресурсов. - Доступ предоставлен через IAM вместо политики ключа: Межаккаунтный доступ к KMS должен быть предоставлен в самой политике ключа, а не через политику IAM в вашей учётной записи. Проверьте с помощью
aws kms get-key-policy --key-id <id> --policy-name default. - Несоответствие региона: Убедитесь, что регион ключа — один из тех, в которых 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}")
Настройка CMEK на Claude Platform on AWS
На Claude Platform on AWS CMEK использует только ключи AWS KMS, и настройка отличается от предыдущих разделов следующим образом:
- Принципал: Ваша политика ключа предоставляет доступ сервисному принципалу AWS
aws-external-anthropic.amazonaws.com. Роль IAM и идентификатор учётной записи Anthropic не используются, поэтому ARN для Anthropic не применяется. - Требования к ключу: Ключ должен быть симметричным ключом KMS с использованием для шифрования и расшифровки, однорегиональным и находиться в той же учётной записи AWS и регионе, что и рабочее пространство, к которому вы его привязываете. Межаккаунтные ключи не поддерживаются: ключ должен находиться в учётной записи AWS, в которой размещена ваша организация. Мультирегиональные ключи (идентификаторы ключей, начинающиеся с
mrk-) и ARN псевдонимов отклоняются при регистрации ключа; используйте ARN ключа. - Нет отдельного шага валидации: Помимо этих проверок ARN ключа при регистрации, ключ проходит валидацию при привязке к рабочему пространству. Вызов привязки выполняет цикл шифрования/расшифровки с использованием ключа с идентификатором компартмента этого рабочего пространства в качестве контекста шифрования, поэтому проблема с политикой ключа проявляется во время привязки, а не при регистрации. В отличие от политики Claude Platform, приведённой ранее на этой странице, условию
EncryptionContextпоэтому не нужна запись из одних нулей. - Где вы управляете ключами: Регистрируйте и привязывайте ключи в Claude Console, войдя через AWS с ролью Admin. Конечные точки внешних ключей также доступны на Claude Platform on AWS с авторизацией через действия IAM; там ключ идентифицируется по ARN ключа KMS, а не по идентификатору
ekey_.
Предварительные требования
- Учётная запись AWS, в которой размещена ваша организация Claude Platform on AWS, с разрешениями на создание ключей KMS и установку политик ключей (
kms:CreateKeyиkms:PutKeyPolicy). - Роль Admin в Claude Console для Claude Platform on AWS. См. Использование Claude Console.
- Для принципала IAM, с которым вы входите в Claude Console: помимо
aws-external-anthropic:AssumeConsole, действия IAM для операций, которые вы там выполняете, поскольку страница Encryption keys и привязка ключа проходят через шлюз AWS. Регистрация ключа — этоRegisterKey(сListKeysиGetKeyдля просмотра регистраций), а привязка —UpdateWorkspaceилиCreateWorkspace. Действия с внешними ключами (иCreateWorkspace) имеют область действия учётной записи, поэтому предоставляйте их наResource: "*"; политика, ограниченная ARN рабочих пространств, их не включает. - Для принципала IAM, который привязывает ключ к рабочему пространству (идентичность, с которой вы вошли в Claude Console):
kms:DescribeKey,kms:Encryptиkms:Decryptдля ключа. Доступ вашего принципала к ключу проверяется при привязке, в дополнение к доступу сервисного принципала. - Необязательно, для средства выбора ключа в Claude Console:
kms:ListKeysиkms:DescribeKeyдля принципала, с которым вы входите. Без них вместо этого вставьте ARN ключа.
Создание ключа KMS
Политика ключа содержит три оператора: оператор администратора root вашей учётной записи; оператор, позволяющий сервисному принципалу Claude Platform on AWS шифровать, расшифровывать и генерировать ключи данных; и отдельный оператор для kms:DescribeKey. Оба оператора сервисного принципала содержат рекомендуемое условие aws:SourceArn: сервис вызывает ваш ключ от имени конкретного рабочего пространства и передаёт ARN этого рабочего пространства в качестве исходного ARN, поэтому показанный шаблон ограничивает предоставление доступа рабочими пространствами в вашей собственной учётной записи AWS. DescribeKey предоставляется отдельно, поскольку у него нет параметра EncryptionContext, поэтому условие EncryptionContext для этого действия всегда приводило бы к отказу.
Если вы планируете использовать необязательное условие EncryptionContext, показанное здесь, сначала создайте рабочее пространство (без ключа) и скопируйте его идентификатор компартмента из Claude Console в разделе Workspace > Security, в блоке Encryption key (поле Compartment ID), или из поля compartment_id, возвращаемого конечной точкой Get Workspace. Подставьте его вместо <compartment-uuid>. В противном случае удалите запись StringEquals из блока Condition этого оператора и оставьте запись ArnLike.
export YOUR_ACCOUNT=$(aws sts get-caller-identity --query Account --output text)
aws kms create-key \
--region <workspace-region> \
--description "Anthropic CMEK (Claude Platform on AWS)" \
--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\": \"AllowClaudePlatformOnAWSCrypto\",
\"Effect\": \"Allow\",
\"Principal\": {\"Service\": \"aws-external-anthropic.amazonaws.com\"},
\"Action\": [\"kms:Encrypt\", \"kms:Decrypt\", \"kms:GenerateDataKey\"],
\"Resource\": \"*\",
\"Condition\": {
\"ArnLike\": {
\"aws:SourceArn\": \"arn:aws:aws-external-anthropic:*:${YOUR_ACCOUNT}:workspace/*\"
},
\"StringEquals\": {
\"kms:EncryptionContext:anthropic:compartment_uuid\": [
\"<compartment-uuid>\"
]
}
}
},
{
\"Sid\": \"AllowClaudePlatformOnAWSDescribe\",
\"Effect\": \"Allow\",
\"Principal\": {\"Service\": \"aws-external-anthropic.amazonaws.com\"},
\"Action\": \"kms:DescribeKey\",
\"Resource\": \"*\",
\"Condition\": {
\"ArnLike\": {
\"aws:SourceArn\": \"arn:aws:aws-external-anthropic:*:${YOUR_ACCOUNT}:workspace/*\"
}
}
}
]
}"Сохраните значение KeyMetadata.Arn из вывода. Оно понадобится вам при регистрации ключа.
Оба условия являются необязательным усилением защиты, и они сочетаются друг с другом. Условие aws:SourceArn можно написать до того, как появится какое-либо рабочее пространство; чтобы привязать ключ к конкретным рабочим пространствам вместо всей учётной записи, перечислите их полные ARN рабочих пространств вместо шаблона с подстановочным знаком, а чтобы начать без него, удалите запись ArnLike из обоих операторов сервисного принципала (удалив блок Condition, если он при этом останется пустым). Условие EncryptionContext также необязательно. Каждый вызов шифрования, расшифровки и генерации ключа данных, выполняемый для рабочего пространства, включая проверку при привязке, содержит идентификатор компартмента этого рабочего пространства в виде anthropic:compartment_uuid, поэтому в условии перечисляются идентификаторы компартментов каждого рабочего пространства, к которому вы привязываете ключ, и запись из одних нулей не нужна. Его добавление привязывает ключ к перечисленным вами рабочим пространствам также и на уровне IAM. Поскольку идентификатор компартмента существует только после создания его рабочего пространства, порядок таков: создайте рабочее пространство, поместите его идентификатор компартмента в условие (при создании ключа или позже с помощью kms:PutKeyPolicy), затем привяжите ключ. Перед привязкой ключа к каждому дополнительному рабочему пространству добавьте идентификатор компартмента этого рабочего пространства таким же образом. Чтобы начать без него, удалите запись StringEquals из блока Condition оператора AllowClaudePlatformOnAWSCrypto; если вы добавите его позже, включите идентификатор компартмента каждого рабочего пространства, к которому ключ уже привязан.
Вы также можете создать ключ в AWS Console: выберите симметричный ключ с использованием ключа для шифрования и расшифровки, однорегиональный ключ и происхождение материала ключа KMS, в регионе рабочего пространства. Оставьте разрешения на использование ключа пустыми в мастере Create-key, затем откройте вкладку Key policy ключа и замените JSON политикой, показанной здесь.
Регистрация и привязка ключа
Зарегистрируйте ключ
В Claude Console откройте Settings > Encryption keys и нажмите Add key. Введите отображаемое имя, затем выберите ключ в средстве выбора ключа или выберите Enter ARN manually и вставьте ARN ключа, и нажмите Add. Ключ должен находиться в учётной записи AWS, в которой размещена ваша организация; межаккаунтные ключи не поддерживаются. Средство выбора отображает включённые, управляемые клиентом, симметричные, однорегиональные ключи в вашей учётной записи в одном из регионов вашей организации; для ключа, которого нет в списке средства выбора, введите ARN. Оно отображает ключи только в том случае, если принципал, с которым вы вошли, может вызывать
kms:ListKeysиkms:DescribeKey.Привяжите ключ к рабочему пространству
Привяжите ключ к новому рабочему пространству, прежде чем отправлять какие-либо запросы в это рабочее пространство. Для рабочего пространства, которое уже получает запросы, вступление ключа в силу может занять до одного дня. В Claude Console откройте рабочее пространство и в разделе Security выберите ключ в поле Encryption key, сохраните и подтвердите. Вы также можете выбрать ключ при создании рабочего пространства в Claude Console, но только если ваша политика ключа ещё не указывает конкретные рабочие пространства (нет условия
EncryptionContext, и используется шаблонaws:SourceArnдля всей учётной записи, а не отдельные ARN рабочих пространств), поскольку идентификатор рабочего пространства и идентификатор компартмента назначаются при создании. После привязки ключ рабочего пространства изменить нельзя.Именно в этот момент ключ проходит валидацию: вызов привязки проверяет доступ вашего принципала к ключу и выполняет цикл шифрования/расшифровки с его использованием с идентификатором компартмента рабочего пространства в качестве контекста шифрования, поэтому проблема либо с политикой ключа, либо с разрешениями вашего принципала проявляется как ошибка этого вызова. Если привязка завершается ошибкой доступа KMS, проверьте следующее:
- Политика ключа указывает сервисный принципал
aws-external-anthropic.amazonaws.comи предоставляетkms:Encrypt,kms:Decryptиkms:GenerateDataKey, а такжеkms:DescribeKeyв отдельном операторе без условияEncryptionContext. - Условие
aws:SourceArnсоответствует ARN этого рабочего пространства (идентификатор вашей учётной записи и рабочее пространство, если вы перечислили конкретные ARN), а любое условиеEncryptionContextвключает идентификатор компартмента этого рабочего пространства. - Ключ включён, является однорегиональным и находится в той же учётной записи AWS и регионе, что и рабочее пространство.
- Принципал, под которым вы вошли, имеет
kms:DescribeKey,kms:Encryptиkms:Decryptдля ключа. - Никакая политика управления сервисами или политика управления ресурсами в вашей организации AWS не препятствует использованию ключа сервисным принципалом или вашим принципалом.
- Если политика выглядит правильно, а привязка всё равно не удаётся, найдите отклонённое событие
kms:в CloudTrail в учётной записи ключа (оно показывает вызывающего принципала и, для криптографических вызовов, контекст шифрования), затем повторите попытку с временно удалённым условиемaws:SourceArn, чтобы отличить несоответствие исходного ARN от несоответствия контекста шифрования.
- Политика ключа указывает сервисный принципал
Terraform
Для развёртываний в формате «infrastructure-as-code» (инфраструктура как код) те же шаги соответствуют провайдеру aws с ресурсами aws_kms_key и aws_kms_alias.
Was this page helpful?