AWS KMS für CMEK konfigurieren
Verwende AWS KMS, um einen Verschlüsselungsschlüssel für deine Organisation bereitzustellen.
claude "/claude-api help me configure a customer-managed encryption key with AWS KMS"Dieser Leitfaden 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.
Voraussetzungen
- Ein AWS-Konto mit Berechtigungen zum Erstellen von KMS-Schlüsseln und zum Festlegen von Schlüsselrichtlinien (
kms:CreateKeyundkms:PutKeyPolicy). - Ein Anthropic Admin API-Key für deine Organisation.
- Die AWS CLI, installiert und authentifiziert.
Amazon Resource Name (ARN) für Anthropic
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-usEinrichtung des Verschlüsselungsschlüssels
Den KMS-Schlüssel mit einer kontoübergreifenden Schlüsselrichtlinie erstellen
Die Schlüsselrichtlinie gewährt der IAM-Rolle von Anthropic kontoübergreifenden Zugriff. Drei Anweisungen sind erforderlich:
- Root-Admin des Kontos: das Standard-KMS-Muster. Dein Konto behält die volle administrative Kontrolle.
- Anthropic verschlüsseln und entschlüsseln: die Aktionen
kms:Encryptundkms:Decrypt, die Anthropic verwendet, um die Datenschlüssel zu verschlüsseln und zu entschlüsseln, die deine Workspace-Daten schützen („envelope encryption“ (Umschlagverschlüsselung)). - Anthropic beschreiben: das Lesen der Metadaten, das Anthropic beim Start durchführt. Es wird separat gewährt, weil
DescribeKeykeinenEncryptionContext-Parameter hat, sodass eineEncryptionContext-Bedingung für diese Aktion immer ablehnen würde.
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\": \"*\" } ] }"Notiere
KeyMetadata.Arnaus der Ausgabe. Du benötigst ihn, wenn du den Schlüssel im nächsten Schritt registrierst.Die
EncryptionContext-Bedingung ist empfohlen, aber optional. Anthropic fügt die Compartment-ID deines Workspace immer in den Verschlüsselungskontext ein, sodass der Chiffretext ohnehin kryptografisch an dieses Compartment gebunden ist. Das Hinzufügen der Bedingung bietet „defense-in-depth“ (gestaffelte Verteidigung) auf der IAM-Ebene. Um ohne sie zu beginnen, lass denCondition-Block in der AnweisungAllowAnthropicCMEKCryptoweg und füge ihn später mitkms:PutKeyPolicyhinzu.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 in seinem Schritt Review eine Schlüsselrichtlinie fest: Wenn du dort unter den Schlüsselverwendungsberechtigungen die Konto-ID von Anthropic
915198916910hinzufügst, gewährt die generierte Richtlinie dem gesamten Anthropic-Konto weitreichendere Aktionen (wiekms:ReEncrypt*undkms:GenerateDataKey*) ohneEncryptionContext-Bedingung, und die Validierung würde damit trotzdem erfolgreich sein. Um keinen übermäßig freizügigen 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 zuvor gezeigte rollenbezogene Richtlinie (die drei Anweisungen, die auf die Rolleanthropic-cmek-client-usbeschränkt sind, mit derEncryptionContext-Bedingung).
Configure key (Schlüssel konfigurieren): Symmetric (symmetrisch), Encrypt and decrypt (verschlüsseln und entschlüsseln), Single-Region key (Single-Region-Schlüssel). 
Add labels (Bezeichnungen hinzufügen): Füge einen Alias und eine Beschreibung für den Schlüssel hinzu. 
Define key administrative permissions (administrative Schlüsselberechtigungen festlegen, optional). Dein Konto behält die volle administrative Kontrolle. 
Define key usage permissions (Schlüsselverwendungsberechtigungen festlegen): Füge hier nicht die Konto-ID von Anthropic hinzu. Dieser Assistentenschritt erzeugt eine übermäßig freizügige Richtlinie. Lass die Verwendungsberechtigungen leer und bearbeite das Key-policy-JSON nach der Erstellung (siehe die vorangehende Schlüsselrichtlinie).
Den Schlüssel bei Anthropic registrieren
Wie du den Schlüssel registrierst, hängt davon ab, welches Produkt du verwendest.
Den Schlüssel bei Anthropic registrieren
Erstelle eine externe Schlüsselkonfiguration über die 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}")Die Antwort enthält die ID des externen Schlüssels:
{ "type": "external_key", "id": "ekey_<id>", "display_name": "<friendly-name>" }Den Schlüssel validieren
Löse einen Verschlüsselungs- und Entschlüsselungs-Roundtrip gegen deinen Schlüssel aus.
client = anthropic.Anthropic() validation = client.beta.organization.external_keys.validate("ekey_<id>") print(f"status: {validation.status}") print(f"error: {validation.error}")Eine erfolgreiche Antwort sieht so aus:
{ "type": "external_key_validation", "status": "success", "error": null }Wenn die Validierung fehlschlägt, sind häufige Ursachen:
- Nicht übereinstimmender Verschlüsselungskontext: Die Validierung schlägt fehl, während der Datenverkehr funktioniert (oder umgekehrt), mit einer undurchsichtigen
AccessDeniedException, wenn einekms:EncryptionContext:anthropic:compartment_uuid-Bedingung nur einen der beiden Werte zulässt, die Anthropic sendet. Die Validierung sendet die UUID aus lauter Nullen (00000000-0000-0000-0000-000000000000); Live-Traffic sendet die Compartment-ID des verknüpften Workspace. Stelle sicher, dass die Bedingung beide auflistet. Um die Bedingung vollständig auszuschließen, entferne vorübergehend denCondition-Block aus der AnweisungAllowAnthropicCMEKCryptound validiere erneut. - Resource Control Policies (RCPs): Wenn deine AWS-Organisation eine RCP hat, die KMS-Operationen ablehnt, wenn
aws:PrincipalOrgIDnicht 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 gelten hier nicht, da sie für externe Principals, die über ressourcenbasierte Richtlinien aufrufen, nicht ausgewertet werden. - Zugriff über IAM statt über die Schlüsselrichtlinie gewährt: Kontoübergreifender KMS-Zugriff muss in der Schlüsselrichtlinie selbst gewährt werden, nicht über eine IAM-Richtlinie in deinem Konto. Prüfe dies mit
aws kms get-key-policy --key-id <id> --policy-name default. - Nicht übereinstimmende Region: Stelle sicher, dass die Region des Schlüssels eine ist, in der Anthropic für die von dir konfigurierte Geo-Stufe tätig ist.
- Nicht übereinstimmender Verschlüsselungskontext: Die Validierung schlägt fehl, während der Datenverkehr funktioniert (oder umgekehrt), mit einer undurchsichtigen
Den Schlüssel mit einem Workspace verknüpfen
Sobald der Schlüssel validiert ist, verknüpfe ihn mit einem neuen Workspace, bevor du Anfragen an diesen Workspace sendest. Bei einem Workspace, der bereits Anfragen empfängt, kann es bis zu einem Tag dauern, bis der Schlüssel wirksam wird.
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 auf Claude Platform on AWS einrichten
Auf Claude Platform on AWS verwendet CMEK ausschließlich AWS KMS-Schlüssel, und die Einrichtung unterscheidet sich in folgenden Punkten von den vorangehenden Abschnitten:
- Principal: Deine Schlüsselrichtlinie gewährt dem AWS-Service-Principal
aws-external-anthropic.amazonaws.comZugriff. Die IAM-Rolle und die Konto-ID von Anthropic werden nicht verwendet, daher gilt der ARN für Anthropic nicht. - Schlüsselanforderungen: Der Schlüssel muss ein symmetrischer KMS-Schlüssel mit der Verwendung „Encrypt and decrypt“ sein, Single-Region, und sich im selben AWS-Konto und in derselben Region befinden wie der Workspace, mit dem du ihn verknüpfst. Kontoübergreifende Schlüssel werden nicht unterstützt: Der Schlüssel muss sich in dem AWS-Konto befinden, das deine Organisation hostet. Multi-Region-Schlüssel (Schlüssel-IDs, die mit
mrk-beginnen) und Alias-ARNs werden bei der Registrierung des Schlüssels abgelehnt; verwende den Schlüssel-ARN. - Kein separater Validierungsschritt: Abgesehen von diesen Prüfungen des Schlüssel-ARN bei der Registrierung wird der Schlüssel validiert, wenn du ihn mit einem Workspace verknüpfst. Der Verknüpfungsaufruf führt eine Verschlüsselungs-/Entschlüsselungsrunde gegen den Schlüssel mit der Compartment-ID dieses Workspace als Verschlüsselungskontext durch, sodass ein Problem mit der Schlüsselrichtlinie beim Verknüpfen statt bei der Registrierung sichtbar wird. Anders als bei der Claude Platform-Richtlinie weiter oben auf dieser Seite benötigt eine
EncryptionContext-Bedingung daher keinen Eintrag aus lauter Nullen. - Wo du Schlüssel verwaltest: Registriere und verknüpfe Schlüssel in der Claude Console, angemeldet über AWS mit der Admin-Rolle. Die Endpunkte für externe Schlüssel sind auch auf Claude Platform on AWS verfügbar, autorisiert über IAM-Aktionen; dort wird ein Schlüssel durch seinen KMS-Schlüssel-ARN statt durch eine
ekey_-ID identifiziert.
Voraussetzungen
- Das AWS-Konto, das deine Claude Platform on AWS-Organisation hostet, mit Berechtigungen zum Erstellen von KMS-Schlüsseln und zum Festlegen von Schlüsselrichtlinien (
kms:CreateKeyundkms:PutKeyPolicy). - Die Rolle Admin in der Claude Console für Claude Platform on AWS. Siehe Die Claude Console verwenden.
- Für den IAM-Principal, mit dem du dich bei der Claude Console anmeldest: neben
aws-external-anthropic:AssumeConsoledie IAM-Aktionen für die Operationen, die du dort durchführst, da die Seite Encryption keys und die Schlüsselverknüpfung über das AWS-Gateway laufen. Das Registrieren eines Schlüssels istRegisterKey(mitListKeysundGetKeyzum Anzeigen von Registrierungen), und das Verknüpfen istUpdateWorkspaceoderCreateWorkspace. Die Aktionen für externe Schlüssel (undCreateWorkspace) sind kontobezogen, gewähre sie also aufResource: "*"; eine auf Workspace-ARNs beschränkte Richtlinie schließt sie nicht ein. - Für den IAM-Principal, der den Schlüssel mit einem Workspace verknüpft (die Identität, mit der du dich bei der Claude Console angemeldet hast):
kms:DescribeKey,kms:Encryptundkms:Decryptfür den Schlüssel. Der Zugriff deines Principals auf den Schlüssel wird beim Verknüpfen geprüft, zusätzlich zu dem des Service-Principals. - Optional, für die Schlüsselauswahl in der Claude Console:
kms:ListKeysundkms:DescribeKeyfür den Principal, mit dem du dich anmeldest. Ohne diese füge stattdessen den Schlüssel-ARN ein.
Den KMS-Schlüssel erstellen
Die Schlüsselrichtlinie hat drei Anweisungen: die Root-Admin-Anweisung deines Kontos; eine Anweisung, die dem Service-Principal von Claude Platform on AWS das Verschlüsseln, Entschlüsseln und Generieren von Datenschlüsseln erlaubt; und eine separate Anweisung für kms:DescribeKey. Beide Service-Principal-Anweisungen tragen eine empfohlene aws:SourceArn-Bedingung: Der Dienst ruft deinen Schlüssel im Namen eines bestimmten Workspace auf und übergibt den ARN dieses Workspace als Source-ARN, sodass das gezeigte Muster die Gewährung auf Workspaces in deinem eigenen AWS-Konto beschränkt. DescribeKey wird separat gewährt, weil es keinen EncryptionContext-Parameter hat, sodass eine EncryptionContext-Bedingung für diese Aktion immer ablehnen würde.
Wenn du die hier gezeigte optionale EncryptionContext-Bedingung verwenden möchtest, erstelle zuerst den Workspace (ohne Schlüssel) und kopiere seine Compartment-ID aus der Claude Console unter Workspace > Security, unter Encryption key (das Feld Compartment ID), oder aus dem Feld compartment_id, das vom Endpunkt Get Workspace zurückgegeben wird. Setze sie für <compartment-uuid> ein. Andernfalls lösche den StringEquals-Eintrag aus dem Condition-Block dieser Anweisung und behalte den ArnLike-Eintrag bei.
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/*\"
}
}
}
]
}"Notiere KeyMetadata.Arn aus der Ausgabe. Du benötigst ihn, wenn du den Schlüssel registrierst.
Beide Bedingungen sind optionale Härtungsmaßnahmen und lassen sich kombinieren. Die aws:SourceArn-Bedingung kann geschrieben werden, bevor ein Workspace existiert; um den Schlüssel an bestimmte Workspaces statt an dein gesamtes Konto zu binden, liste deren vollständige Workspace-ARNs anstelle des Wildcard-Musters auf, und um ohne sie zu beginnen, lösche den ArnLike-Eintrag aus beiden Service-Principal-Anweisungen (und entferne einen Condition-Block, der dadurch leer wird). Die EncryptionContext-Bedingung ist ebenfalls optional. Jeder Verschlüsselungs-, Entschlüsselungs- und Datenschlüsselaufruf, der für einen Workspace erfolgt, einschließlich der Prüfung beim Verknüpfen, trägt die Compartment-ID dieses Workspace als anthropic:compartment_uuid, sodass die Bedingung die Compartment-ID jedes Workspace auflistet, mit dem du den Schlüssel verknüpfst, und keinen Eintrag aus lauter Nullen benötigt. Das Hinzufügen bindet den Schlüssel auch auf der IAM-Ebene an die von dir aufgelisteten Workspaces. Da eine Compartment-ID erst existiert, wenn ihr Workspace existiert, ist die Reihenfolge: Erstelle den Workspace, trage seine Compartment-ID in die Bedingung ein (bei der Schlüsselerstellung oder später mit kms:PutKeyPolicy), verknüpfe dann den Schlüssel. Bevor du den Schlüssel mit jedem weiteren Workspace verknüpfst, füge die Compartment-ID dieses Workspace auf dieselbe Weise hinzu. Um ohne sie zu beginnen, lösche den StringEquals-Eintrag aus dem Condition-Block der Anweisung AllowClaudePlatformOnAWSCrypto; wenn du sie später hinzufügst, schließe die Compartment-ID jedes Workspace ein, mit dem der Schlüssel bereits verknüpft 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, in der Region des Workspace. Lass die Schlüsselverwendungsberechtigungen im Create-key-Assistenten leer, öffne dann den Tab Key policy des Schlüssels und ersetze das JSON durch die hier gezeigte Richtlinie.
Den Schlüssel registrieren und verknüpfen
Den Schlüssel registrieren
Öffne in der Claude Console Settings > Encryption keys und klicke auf Add key. Gib einen Anzeigenamen ein, wähle dann den Schlüssel in der Schlüsselauswahl aus oder wähle Enter ARN manually und füge den Schlüssel-ARN ein, und klicke auf Add. Der Schlüssel muss sich in dem AWS-Konto befinden, das deine Organisation hostet; kontoübergreifende Schlüssel werden nicht unterstützt. Die Auswahl listet die aktivierten, kundenverwalteten, symmetrischen Single-Region-Schlüssel in deinem Konto in einer der Regionen deiner Organisation auf; für einen Schlüssel, den die Auswahl nicht auflistet, gib den ARN ein. Sie listet Schlüssel nur auf, wenn der Principal, mit dem du dich angemeldet hast,
kms:ListKeysundkms:DescribeKeyaufrufen kann.Den Schlüssel mit einem Workspace verknüpfen
Verknüpfe den Schlüssel mit einem neuen Workspace, bevor du Anfragen an diesen Workspace sendest. Bei einem Workspace, der bereits Anfragen empfängt, kann es bis zu einem Tag dauern, bis der Schlüssel wirksam wird. Öffne in der Claude Console den Workspace und wähle unter Security den Schlüssel in Encryption key aus, speichere und bestätige. Du kannst auch beim Erstellen eines Workspace in der Claude Console einen Schlüssel auswählen, aber nur, wenn deine Schlüsselrichtlinie noch keine bestimmten Workspaces benennt (keine
EncryptionContext-Bedingung und das kontoweiteaws:SourceArn-Muster statt einzelner Workspace-ARNs), da die ID und die Compartment-ID des Workspace bei der Erstellung zugewiesen werden. Einmal verknüpft, kann der Schlüssel eines Workspace nicht mehr geändert werden.Zu diesem Zeitpunkt wird der Schlüssel validiert: Der Verknüpfungsaufruf prüft den Zugriff deines Principals auf den Schlüssel und führt eine Verschlüsselungs-/Entschlüsselungsrunde gegen ihn mit der Compartment-ID des Workspace als Verschlüsselungskontext durch, sodass ein Problem mit der Schlüsselrichtlinie oder den Berechtigungen deines Principals als Fehler bei diesem Aufruf sichtbar wird. Wenn das Verknüpfen mit einem KMS-Zugriffsfehler fehlschlägt, prüfe Folgendes:
- Die Schlüsselrichtlinie benennt den Service-Principal
aws-external-anthropic.amazonaws.comund gewährtkms:Encrypt,kms:Decryptundkms:GenerateDataKeysowiekms:DescribeKeyin einer separaten Anweisung, die keineEncryptionContext-Bedingung hat. - Die
aws:SourceArn-Bedingung stimmt mit dem ARN dieses Workspace überein (deine Konto-ID und der Workspace, falls du bestimmte ARNs aufgelistet hast), und jedeEncryptionContext-Bedingung enthält die Compartment-ID dieses Workspace. - Der Schlüssel ist aktiviert, Single-Region und befindet sich im selben AWS-Konto und in derselben Region wie der Workspace.
- Der Principal, als der du angemeldet bist, hat
kms:DescribeKey,kms:Encryptundkms:Decryptfür den Schlüssel. - Keine Service Control Policy oder Resource Control Policy in deiner AWS-Organisation hindert den Service-Principal oder deinen Principal daran, den Schlüssel zu verwenden.
- Wenn die Richtlinie korrekt aussieht und das Verknüpfen trotzdem fehlschlägt, suche das abgelehnte
kms:-Ereignis in CloudTrail im Konto des Schlüssels (es zeigt den aufrufenden Principal und bei kryptografischen Aufrufen den Verschlüsselungskontext), und versuche es dann erneut mit vorübergehend entfernteraws:SourceArn-Bedingung, um eine Source-ARN-Abweichung von einer Abweichung des Verschlüsselungskontexts zu unterscheiden.
- Die Schlüsselrichtlinie benennt den Service-Principal
Terraform
Für Infrastructure-as-Code-Bereitstellungen lassen sich dieselben Schritte auf den aws-Provider mit den Ressourcen aws_kms_key und aws_kms_alias abbilden.
Was this page helpful?