Passer au contenu

Comment puis-je résoudre l'erreur qui s’affiche lorsque j'utilise AWS CloudFormation pour créer une clé AWS KMS ?

Lecture de 4 minute(s)
0

Lorsque je crée une clé AWS Key Management Service (AWS KMS) et que je définis une stratégie de clé AWS KMS via AWS CloudFormation, la création de la clé échoue.

Brève description

Lorsque vous essayez de créer et de définir une clé, le message d'erreur suivant peut s'afficher :

« The new key policy will not allow you to update the key policy in the future. »

Le principal que vous avez spécifié dans la stratégie de clé doit disposer des autorisations nécessaires pour effectuer les opérations d'API CreateKey et PutKeyPolicy.

Important : assurez-vous que la stratégie de clé que vous créez permet à un principal Gestion des identités et des accès AWS (AWS IAM) approprié d'administrer la clé AWS KMS.

Résolution

Remarque : lorsque vous créez une pile CloudFormation, CloudFormation assume un rôle IAM pour effectuer l'opération d'API CreateStack. CloudFormation utilise également ce rôle pour créer les ressources que vous avez spécifiées dans le modèle CloudFormation.

Créer une clé AWS KMS

Procédez comme suit :

  1. Ouvrez la console CloudFormation.
  2. Utilisez la ressource AWS::KMS::Key pour créer la clé AWS KMS.
  3. Choisissez un utilisateur ou un rôle IAM que vous pouvez utiliser pour gérer votre clé.
  4. Incluez un principal administratif dans les instructions Allow avec l'action kms:PutKeyPolicy.
  5. Utilisez le paramètre de ressource BypassPolicyLockoutSafetyCheck.

Dans l'exemple suivant, le rôle KeyAdmin peut modifier la stratégie de clé lorsque celle-ci est au format suivant :

{    "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": "*"
                }
            ]
        }
    }
}

Important : si aucun principal valide n'est spécifié dans votre stratégie, le contrôle BypassPolicyLockoutSafetyCheck peut générer une clé ingérable. Assurez-vous d'utiliser un principal valide dans vos stratégies.

Définir l'administrateur de clés principal

Pour définir l'administrateur de clés principal à partir de votre fournisseur d'identité fédéré, utilisez l’Amazon Resource Name (ARN) de la session de rôle. Vous pouvez également utiliser une session de rôle endossé par un utilisateur administratif spécifique de votre fournisseur d'identité externe en tant que principal de gestion des clés.

Exemple d’instruction de politique :

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

Remarque : remplacez FederatedAccess par votre rôle IAM et FederatedUsername par votre nom d'utilisateur.

Lorsque vous utilisez le rôle de service CloudFormation pour créer la pile, définissez le principal comme ARN du rôle de service.

Exemple d’instruction de politique :

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

Remarque : remplacez ServiceRoleName par votre rôle de service.

Pour définir l'utilisateur racine du compte AWS comme administrateur de clés du principal, incluez l’instruction suivante dans votre stratégie :

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

Remarque : lorsque vous définissez l'administrateur de clés du principal sur l'ARN racine, tout responsable du compte disposant d'autorisations IAM suffisantes peut modifier la clé.

Une fois que vous avez défini un principal avec l'autorisation kms:PutKeyPolicy dans la stratégie de clé, vous pouvez utiliser AWS CloudFormation pour créer votre clé AWS KMS. Définissez la propriété BypassPolicyLockoutSafetyCheck sur vrai dans votre modèle AWS CloudFormation.

Exemple de modèle :

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

Informations connexes

AWS Key Management Service

Accès aux clés KMS et autorisations

AWS OFFICIELA mis à jour il y a 8 mois