Wie behebe ich den Fehler, den ich erhalte, wenn ich AWS CloudFormation verwende, um einen AWS-KMS-Schlüssel zu erstellen?
Wenn ich einen AWS Key Management Service (AWS KMS)-Schlüssel erstelle und eine AWS-KMS-Schlüsselrichtlinie über AWS CloudFormation definiere, schlägt die Schlüsselerstellung fehl. Ich erhalte die folgende Fehlermeldung: „The new key policy will not allow you to update the key policy in the future.“
Kurzbeschreibung
AWS KMS führt Sicherheitsprüfungen durch, wenn du eine Schlüsselrichtlinie auf deinen Schlüssel anwendest. Eine Sicherheitsüberprüfung bestätigt, dass der Prinzipal in der Schlüsselrichtlinie über die erforderlichen Berechtigungen verfügt, um die API-Operationen CreateKey und PutKeyPolicy auszuführen. Diese Prüfung stellt sicher, dass der AWS-KMS-Schlüssel verwaltbar bleibt.
Wichtig: Stelle sicher, dass die von dir erstellte Schlüsselrichtlinie einem geeigneten AWS Identity and Access Management (IAM, Identitäts- und Zugriffsmanagement)-Prinzipal die Verwaltung des AWS-KMS-Schlüssels ermöglicht.
Lösung
Hinweis: Wenn du einen AWS CloudFormation-Stack erstellst, wird ein IAM-Benutzer oder eine IAM-Rolle verwendet, um die API-Operation CreateStack durchzuführen. Dieser Benutzer wird auch verwendet, um Ressourcen zu erstellen, die in der AWS CloudFormation-Vorlage angegeben sind.
Einen AWS-KMS-Schlüssel erstellen
Führe die folgenden Schritte aus:
- Verwende AWS CloudFormation, um einen AWS-KMS-Schlüssel zu erstellen.
- Wähle einen geeigneten IAM-Benutzer oder eine entsprechende IAM-Rolle, mit der du den Schlüssel in Zukunft verwalten kannst.
- Verwende den Ressourcenparameter BypassPolicyLockoutSafetyCheck, nachdem du mit der Aktion kms:PutKeyPolicy einen gültigen Administratorprinzipal in die Zulassen-Anweisungen aufgenommen hast.
Im folgenden Beispiel wird der AWS CloudFormation-Stack vom IAM-Benutzer arn:aws:iam::123456789012:user/Alice erstellt. Die KeyAdmin-Rolle wird als Schlüsseladministrator bezeichnet. Die IAM-Rolle KeyAdmin darf die Schlüsselrichtlinie ändern, wenn der Schlüssel mit einer Schlüsselrichtlinie im folgenden Format erstellt wird:
{ "Type": "AWS::KMS::Key", "Properties": { "Description": "A sample key", "KeyPolicy": { "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Allow administration of the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/KeyAdmin" }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }, { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/KeyUser" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" } ] } } }
Wichtig: Wenn in der Richtlinie kein gültiger Prinzipal angegeben ist, führt der BypassPolicyLockoutSafetyCheck möglicherweise zu einem nicht verwaltbaren Schlüssel. Stelle sicher, dass du in den Richtlinien einen gültigen Prinzipal verwendest.
Den Prinzipalschlüsseladministrator einstellen
Verwende den Amazon Resource Name (ARN) der Rollensitzung, um den Prinzipalschlüsseladministrator deines Verbundidentitätsanbieters festzulegen. Du kannst auch die Sitzung der übernommenen Rolle eines bestimmten Administratorbenutzers von deinem externen Identitätsanbieter als Prinzipal für die Schlüsselverwaltung verwenden.
Beispiel:
"Principal": { "AWS": "arn:aws:sts::123456789012:assumed-role/FederatedAccess/FederatedUsername" }
Im vorherigen Beispiel lautet der Name der IAM-Rolle FederatedAccess, und der Name des Verbundbenutzers ist FederatedUsername. Dadurch können mehrere Benutzer dieselbe Rolle verwenden, während nur vertrauenswürdige Benutzer die Schlüsselrichtlinie ändern können.
Wenn du die AWS CloudFormation-Servicerolle verwendest, um den Stack zu erstellen, kannst du den Prinzipal als Servicerollen-ARN festlegen, um den Fehler zu vermeiden.
Beispiel:
"Principal": { "AWS": "arn:aws:iam::123456789012:role/ServiceRoleName" }
Im vorherigen Beispiel lautet der Name der AWS CloudFormation-Servicerolle ServiceRoleName.
Um den Root-Benutzer des AWS-Kontos als Prinzipalschlüsseladministrator festzulegen, folge diesem Beispiel:
"Principal": { "AWS": "arn:aws:iam::123456789012:root" }
Hinweis: Wenn der Prinzipalschlüsseladministrator auf den Root-ARN gesetzt ist, stelle sicher, dass du über die richtigen Berechtigungen verfügst. Der IAM-Benutzer, die Rolle oder die Servicerolle, die den AWS CloudFormation-Stack erstellt, muss über die IAM-Berechtigungen verfügen, um die API-Operationen CreateKey und PutKeyPolicy durchführen zu können.
Wichtig: Wenn du den Prinzipalschlüsseladministrator auf den Root-ARN setzt, kann jeder Prinzipal im Konto mit ausreichenden IAM-Berechtigungen den Schlüssel ändern, nicht nur der Root-Benutzer.
Wenn du einen Prinzipal mit der Berechtigung kms:PutKeyPolicy in der Schlüsselrichtlinie hast, kannst du AWS CloudFormation verwenden, um den AWS-KMS-Schlüssel zu erstellen. Verwende die Eigenschaft BypassPolicyLockoutSafetyCheck in der AWS CloudFormation-Vorlage.
Beispiel:
myKMSKey: Type: 'AWS::KMS::Key' Properties: Description: This key is managed by the KeyAdmin role BypassPolicyLockoutSafetyCheck: true KeyPolicy: Version: 2012-10-17 Id: key-policy-1 Statement: - Sid: Allow administration of the key Effect: Allow Principal: AWS: 'arn:aws:iam::123456789012:role/KeyAdmin' Action: - 'kms:Create*' - 'kms:Describe*' - 'kms:Enable*' - 'kms:List*' - 'kms:Put*' - 'kms:Update*' - 'kms:Revoke*' - 'kms:Disable*' - 'kms:Get*' - 'kms:Delete*' - 'kms:ScheduleKeyDeletion' - 'kms:CancelKeyDeletion' Resource: '*' - Sid: Allow use of the key Effect: Allow Principal: AWS: 'arn:aws:iam::123456789012:role/KeyUser' Action: - 'kms:DescribeKey' - 'kms:Encrypt' - 'kms:Decrypt' - 'kms:ReEncrypt*' - 'kms:GenerateDataKey' - 'kms:GenerateDataKeyWithoutPlaintext' Resource: '*' EnableKeyRotation: true PendingWindowInDays: 30
Ähnliche Informationen
Ähnliche Videos
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 10 Monaten
- AWS OFFICIALAktualisiert vor 4 Jahren
- AWS OFFICIALAktualisiert vor 4 Jahren
- AWS OFFICIALAktualisiert vor 9 Monaten