Wie behebe ich den Fehler „The new key policy will not allow you to update the key policy in the future“, wenn ich versuche, mit AWS CloudFormation einen AWS-KMS-Schlüssel zu erstellen?

Lesedauer: 3 Minute
0

Wenn ich mithilfe von AWS CloudFormation einen AWS-KMS-Schlüssel erstellen und eine Schlüsselrichtlinie für AWS Key Management Service (AWS KMS) definieren will, schlägt die Erstellung des AWS-KMS-Schlüssels 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 eine Schlüsselrichtlinie erstellt wird. Eine Sicherheitsüberprüfung bestätigt, dass der Prinzipal in der Schlüsselrichtlinie über die nötigen Berechtigungen verfügt, um die Aufrufe CreateKey API und PutKeyPolicy API auszuführen. Diese Prüfung schließt die Möglichkeit aus, dass der AWS-KMS-Schlüssel unverwaltbar wird, was der Fall wäre, wenn Sie die Schlüsselrichtlinie nicht ändern und den Schlüssel nicht löschen könnten.

Wichtig: Stellen Sie sicher, dass die von Ihnen erstellte Schlüsselrichtlinie dem aktuellen Benutzer die Verwaltung des AWS-KMS-Schlüssels ermöglicht.

Lösung

Wenn Sie einen AWS-CloudFormation-Stack erstellen, wird ein Benutzer oder eine Rolle in AWS Identity and Access Management (IAM) verwendet, um den API-Aufruf CreateStack durchzuführen. Dieser Benutzer wird auch verwendet, um Ressourcen zu erstellen, die in der AWS-CloudFormation-Vorlage angegeben sind.

1.    Wenn Sie mit AWS CloudFormation einen AWS-KMS-Schlüssel erstellen, wählen Sie denselben IAM-Benutzer oder dieselbe IAM-Rolle aus, der oder die Schlüsseladministrator-Prinzipal für den AWS-KMS-Schlüssel ist.

Im folgenden Beispiel wird der AWS-CloudFormation-Stack vom IAM-Benutzer arn:aws:iam::123456789012:user/Alice erstellt. Das Prinzipal wird als Schlüsseladministrator benannt. Der IAM-Benutzer „Alice“ darf jetzt die Schlüsselrichtlinie ändern, nachdem sie erstellt wurde.

"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:user/Alice" },
                  "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:user/Bob" },
                  "Action": [
                      "kms:Encrypt",
                      "kms:Decrypt",
                      "kms:ReEncrypt*",
                      "kms:GenerateDataKey*",
                      "kms:DescribeKey"
                  ],
                  "Resource": "*"
              }
          ]
      }
    }
  }

2.    Legen Sie das Schlüsseladministrator-Prinzipal fest oder machen Sie den Stammbenutzer des AWS-Kontos zum Schlüsseladministrator-Prinzipal.

Um das Schlüsseladministrator-Prinzipal festzulegen, verwenden Sie den Amazon-Ressourcennamen (ARN):

Wenn Ihr AWS-CloudFormation-Stack von einem SAML- oder Web-Verbundbenutzer-Konto erstellt wurde, legen Sie das Prinzipal als die vom Benutzer übernommene Rolle für den ARN fest. Zum Beispiel:

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

Hinweis: Der Name der IAM-Rolle lautet FederatedAccess und der Name des Verbundbenutzers lautet FederatedUsername.

Wenn die AWS-CloudFormation-Servicerolle verwendet wird, um den Stack zu erstellen, legen Sie das Prinzipal als ARN der Servicerolle fest. Zum Beispiel:

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

Hinweis: Der Name der AWS-CloudFormation-Servicerolle lautet ServiceRoleName.

Um den Root-Benutzer des AWS-Kontos als Schlüsseladministrator-Prinzipal festzulegen, folgen Sie diesem Beispiel:

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

Hinweis: Wenn das Schlüsseladministrator-Prinzipal auf den Root-ARN festgelegt ist, stellen Sie sicher, dass Sie über die nötigen Berechtigungen verfügen. Der Benutzer, die Rolle oder die Servicerolle in IAM, die den AWS-CloudFormation-Stack erstellt, muss über die IAM-Berechtigungen verfügen, um die API-Aufrufe CreateKey und PutKeyPolicy durchzuführen.


Ähnliche Informationen

AWS Key Management Service

Authentication and access control for AWS KMS

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr