Direkt zum Inhalt

Wie behebe ich den Fehler, den ich erhalte, wenn ich AWS CloudFormation verwende, um einen AWS-KMS-Schlüssel zu erstellen?

Lesedauer: 4 Minute
0

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.

Kurzbeschreibung

Wenn du versuchst, einen Schlüssel zu erstellen und zu definieren, wird möglicherweise die folgende Fehlermeldung angezeigt:

„The new key policy will not allow you to update the key policy in the future.“

Der Prinzipal, den du in der Schlüsselrichtlinie angegeben hast, muss über die erforderlichen Berechtigungen verfügen, um die API-Operationen CreateKey und PutKeyPolicy auszuführen.

Wichtig: Stelle sicher, dass die von dir erstellte Schlüsselrichtlinie einem geeigneten AWS Identity and Access Management (IAM)-Prinzipal die Verwaltung des AWS-KMS-Schlüssels ermöglicht.

Lösung

Hinweis: Wenn du einen CloudFormation-Stack erstellst, übernimmt CloudFormation eine IAM-Rolle, um den CreateStack-API-Vorgang auszuführen. CloudFormation verwendet die Rolle auch, um die Ressourcen zu erstellen, die du in der CloudFormation-Vorlage angegeben hast.

Einen AWS-KMS-Schlüssel erstellen

Gehe wie folgt vor:

  1. Öffne die CloudFormation-Konsole.
  2. Verwende die Ressource AWS::KMS::Key resource, um den AWS-KMS-Schlüssel zu erstellen.
  3. Wähle eine(n) IAM-Benutzer:in oder eine IAM-Rolle, mit dem/der du den Schlüssel verwalten kannst.
  4. Füge mit der Aktion kms:PutKeyPolicy einen administrativen Prinzipal in die Allow-Anweisungen ein.
  5. Verwende den Ressourcenparameter BypassPolicyLockoutSafetyCheck.

Im folgenden Beispiel kann die KeyAdmin-Rolle die Schlüsselrichtlinie ändern, wenn die Richtlinie das folgende Format hat:

{    "Type": "AWS::KMS::Key",
    "Properties": {
        "Description": "A sample key",
        "KeyPolicy": {
            "Version": "2012-10-17",
            "Id": "key-default-1",
            "Statement": [
                {
                    "Sid": "Allow access for Key Administrators",
                    "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-Ressourcennamen (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 für eine Richtlinienanweisung:

"Principal": { "AWS": "arn:aws:sts::123456789012:assumed-role/FederatedAccess/FederatedUsername" }

Hinweis: Ersetze FederatedAccess durch deine IAM-Rolle und FederatedUsername durch deinen Benutzernamen.

Wenn du die CloudFormation-Servicerolle verwendest, um den Stack zu erstellen, lege den Prinzipal als Servicerollen-ARN fest.

Beispiel für eine Richtlinienanweisung:

"Principal": { "AWS": "arn:aws:iam::123456789012:role/ServiceRoleName" }

Hinweis: Ersetze ServiceRoleName durch deine Servicerolle.

Nimm die folgende Anweisung in deine Richtlinie auf, um den/die Root-Benutzer:in des AWS-Kontos als Prinzipalschlüsseladministrator:in festzulegen:

"Principal": { "AWS": "arn:aws:iam::123456789012:root" }

Hinweis: Wenn du den/die Prinzipalschlüsseladministrator:in auf den Root-ARN setzt, kann jeder Prinzipal im Konto mit ausreichenden IAM-Berechtigungen den Schlüssel ändern.

Wenn es einen Prinzipal mit der Berechtigung kms:PutKeyPolicy in der Schlüsselrichtlinie gibt, kannst du CloudFormation verwenden, um den AWS-KMS-Schlüssel zu erstellen. Setze die Eigenschaft BypassPolicyLockoutSafetyCheck in der CloudFormation-Vorlage auf true (wahr).

Beispielvorlage:

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 access for Key Administrators
          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

AWS Key Management Service

KMS-Schlüsselzugriff und -berechtigungen

AWS OFFICIALAktualisiert vor 9 Monaten