Comment éliminer l'erreur « The new key policy will not allow you to update the key policy in the future » (La nouvelle stratégie de clé ne vous permettra pas de mettre à jour la stratégie de clé CMK à l'avenir) à l'aide d'AWS CloudFormation ?

Dernière mise à jour : 20/08/2020

Lorsque je crée une clé CMK (Customer Master Key) et que je définis une stratégie de clé AWS Key Management Service (AWS KMS) à l'aide d'AWS CloudFormation, la création de la clé CMK échoue, puis j'obtiens le message d'erreur « The new key policy will not allow you to update the key policy in the future » (La nouvelle stratégie de clé ne vous permettra pas de mettre à jour la stratégie de clé à l'avenir).

Brève description

AWS KMS effectue des vérifications de sécurité lorsqu'une stratégie de clé est créée. Une vérification de sécurité confirme que le mandataire dans la stratégie de clé dispose des autorisations requises pour effectuer l'appel d'API CreateKey et l'appel d'API PutKeyPolicy. Cette vérification élimine la possibilité que la clé CMK devienne ingérable, ce qui signifie que vous ne pouvez pas modifier la stratégie de clé ni supprimer la clé.

Important : assurez-vous que la stratégie de clé que vous créez permet à l'utilisateur actuel à administrer la clé CMK.

Solution

Lors de la création d'une pile CloudFormation, l'utilisateur ou le rôle IAM (AWS Identity and Access Management) utilisé pour effectuer l'appel d'API CreateStack est également utilisé pour créer les ressources dans la pile définir dans le modèle AWS CloudFormation.

1.    Lorsque vous créez une clé CMK à l'aide d'AWS CloudFormation, choisissez le même utilisateur ou rôle IAM que celui utilisé pour le mandataire administrateur de la clé CMK.

Dans l'exemple suivant, la pile AWS CloudFormation est créée par l'utilisateur IAM arn:aws:iam::123456789012:user/Alice. Le mandataire est désigné comme l'administrateur de clé. L'utilisateur IAM « Alice » est désormais autorisé à modifier la stratégie de clé une fois la stratégie de clé créée.

"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.    Définissez l'administrateur de clé principal ou l'utilisateur racine du compte AWS en tant qu'administrateur de clé principal.

Pour définir l'administrateur de clé principal :

Si votre pile AWS CloudFormation est créée par un compte d'utilisateur fédéré, définissez le mandataire en tant que rôle assuré par l'utilisateur fédéré pour l'Amazon Resource Name (ARN). Par exemple :

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

Remarque : le nom du rôle IAM est FederatedAccess, et le nom de l'utilisateur fédéré est FederatedUsername.

Si le rôle de service AWS CloudFormation est utilisé pour créer la pile, définissez le mandataire comme ARN du rôle de service. Par exemple :

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

Remarque : le nom du rôle de service AWS CloudFormation est ServiceRoleName.

Pour définir l'utilisateur racine du compte AWS en tant qu'administrateur de clé principal, reportez-vous à l'exemple suivant :

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

Remarque : si l'administrateur de clé principal est défini sur l'ARN racine, l'utilisateur, le rôle ou le rôle de service IAM qui crée la pile AWS CloudFormation doit disposer des autorisations IAM pour effectuer les appels d'API CreateKey et PutKeyPolicy.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?