claude "/claude-api help me configure a customer-managed encryption key with AWS KMS"Diese Anleitung führt dich durch die Konfiguration eines AWS KMS-Schlüssels als „customer-managed encryption key" (kundenverwalteter Verschlüsselungsschlüssel), oder CMEK, für deine Anthropic-Organisation.
Die Aktivierung von CMEK ist dauerhaft. Wenn dein KMS-Schlüssel gelöscht oder deaktiviert wird, kann Anthropic die damit verschlüsselten Daten nicht wiederherstellen. Lies die Warnungen und Einschränkungen, bevor du beginnst.
kms:CreateKey und kms:PutKeyPolicy).Damit Anthropic deinen Verschlüsselungsschlüssel verwenden kann, musst du der IAM-Rolle von Anthropic einen KMS-Schlüssel zur Verfügung stellen, den sie zum Verschlüsseln von Daten nutzen kann. Der ARN für Anthropic CMEK lautet:
arn:aws:iam::915198916910:role/anthropic-cmek-client-usVerwende ausschließlich diesen veröffentlichten ARN. Vertraue niemals einem Identifier, der per E-Mail, Chat oder über einen Onboarding-Kanal bereitgestellt wird.
Erstelle den KMS-Schlüssel mit einer kontoübergreifenden Key-Policy
Die Key-Policy gewährt der IAM-Rolle von Anthropic kontoübergreifenden Zugriff. Drei Statements sind erforderlich:
kms:Encrypt und kms:Decrypt, die Anthropic verwendet, um die Datenschlüssel zu ver- und entschlüsseln, die deine Workspace-Daten schützen (Envelope-Verschlüsselung).DescribeKey keinen EncryptionContext-Parameter hat – eine EncryptionContext-Bedingung für diese Aktion würde daher immer verweigern.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\": \"<compartment-uuid>\"
}
}
},
{
\"Sid\": \"AllowAnthropicCMEKDescribe\",
\"Effect\": \"Allow\",
\"Principal\": {\"AWS\": \"arn:aws:iam::915198916910:role/anthropic-cmek-client-us\"},
\"Action\": \"kms:DescribeKey\",
\"Resource\": \"*\"
}
]
}"Notiere dir KeyMetadata.Arn aus der Ausgabe. Du benötigst ihn, wenn du den Schlüssel im nächsten Schritt registrierst.
Die EncryptionContext-Bedingung wird empfohlen, ist aber optional. Anthropic fügt die Compartment-ID deines Workspaces immer in den Encryption-Context ein, sodass der Ciphertext unabhängig davon kryptografisch an dieses Compartment gebunden ist. Das Hinzufügen der Bedingung bietet Defense-in-Depth auf der IAM-Ebene. Um ohne sie zu starten, lass den Condition-Block im AllowAnthropicCMEKCrypto-Statement weg und füge ihn später mit kms:PutKeyPolicy hinzu.
So findest du deine Compartment-ID: Jeder Workspace hat eine Compartment-ID, die den Geltungsbereich seiner CMEK-Daten festlegt. Du findest sie in der Claude Console unter Workspace > Security > Encryption keys (das Feld Compartment ID) oder im Feld compartment_id, das vom Endpunkt Get Workspace zurückgegeben wird. Setze diesen Wert für <compartment-uuid> in der obigen Key-Policy ein. Anthropic sendet ihn auch als Encryption-Context bei der Validierung des Schlüssels, daher muss der Bedingungswert übereinstimmen, damit die Validierung erfolgreich ist.
Du kannst den Schlüssel auch über die AWS Console erstellen. Wähle einen symmetrischen Schlüssel mit der Schlüsselverwendung „Encrypt and decrypt", einen Single-Region-Schlüssel und KMS als Ursprung des Schlüsselmaterials. Der Create-Key-Assistent legt im Schritt Review eine Key-Policy fest: Wenn du dort die Anthropic-Konto-ID 915198916910 unter den Key-Usage-Permissions hinzufügst, gewährt die generierte Policy dem gesamten Anthropic-Konto umfassendere Aktionen (wie kms:ReEncrypt* und kms:GenerateDataKey*) ohne EncryptionContext-Bedingung, und die Validierung würde trotzdem erfolgreich sein. Um keinen zu weit gefassten Schlüssel zu hinterlassen, schließe den Assistenten nur mit administrativen Berechtigungen ab, öffne dann den Tab Key policy des Schlüssels und ersetze das JSON durch die oben gezeigte rollenbezogene Policy (die drei Statements, die auf die Rolle anthropic-cmek-client-us beschränkt sind, mit der EncryptionContext-Bedingung).




Registriere den Schlüssel bei Anthropic
Erstelle eine externe Schlüsselkonfiguration über die 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-step-1>",
"role_arn": "arn:aws:iam::915198916910:role/anthropic-cmek-client-us"
}
}'Die Antwort enthält die externe Schlüssel-ID:
Validiere den Schlüssel
Löse einen Encrypt-und-Decrypt-Roundtrip gegen deinen Schlüssel aus.
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 '{}'Eine erfolgreiche Antwort sieht so aus:
{ "type": "external_key_validation", "status": "success", "error": null }Verknüpfe den Schlüssel mit einem Workspace
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>"
}'Für Infrastructure-as-Code-Deployments lassen sich dieselben Schritte mit dem aws-Provider und den Ressourcen aws_kms_key und aws_kms_alias abbilden.
Was this page helpful?
{
"type": "external_key",
"id": "ekey_<id>",
"display_name": "<friendly-name>"
}Wenn die Validierung fehlschlägt, sind häufige Ursachen:
EncryptionContext-Bedingung in der Key-Policy beibehalten hast, überprüfe, ob du <compartment-uuid> durch die tatsächliche Compartment-ID deines Workspaces ersetzt hast (siehe Schritt 1). Ein falscher oder nicht ersetzter Wert führt dazu, dass KMS eine nicht aussagekräftige AccessDeniedException zurückgibt. Um dies auszuschließen, entferne vorübergehend den Condition-Block aus dem AllowAnthropicCMEKCrypto-Statement und validiere erneut.aws:PrincipalOrgID nicht mit deiner Organisation übereinstimmt, blockiert sie die kontoübergreifende Rolle von Anthropic. Die RCP benötigt eine Ausnahme für diesen Schlüssel oder für den Rollen-ARN von Anthropic. Service Control Policies greifen hier nicht, da sie für externe Principals, die über ressourcenbasierte Policies zugreifen, nicht ausgewertet werden.aws kms get-key-policy --key-id <id> --policy-name default.