Comment résoudre les erreurs de distribution pour les AMI cryptées dans Image Builder ?

Dernière mise à jour : 26/08/2022

Je reçois des erreurs lorsque j'essaie de distribuer des AMI cryptées vers un autre compte dans EC2 Image Builder. Comment puis-je résoudre ce problème ?

Brève description

Les scénarios suivants peuvent entraîner des erreurs de distribution dans EC2 Image Builder lorsque vous distribuez une Amazon Machine Image (AMI) cryptée vers un autre compte :

Solution

L'AMI distribuée est cryptée à l'aide de la clé gérée par AWS par défaut pour Amazon EBS

Vous recevez l'erreur suivante :

Distribution failed with JobId 'XXXXXXXXXXXXXX', status = 'Failed' for ARN 'arn:aws:imagebuilder:us-east-1:xxxxxxxxxxxx:image/test-recipe/0.0.1/1'. 'Not all distribution jobs are completed. 1) EC2 Client Error: 'Snapshots encrypted with the AWS Managed CMK can’t be shared. Specify another snapshot.' when distributing the image from the source account (ID: xxxxxxxxxxxx) to the destination account (ID: xxxxxxxxxxxx) in Region us-east-1.'

Vous ne pouvez pas partager des AMI chiffrées avec la clé AWS KMS par défaut. Pour plus d'informations, consultez Partager une AMI avec des comptes AWS spécifiques.

Les scénarios à vérifier incluent :

  • La clé KMS gérée par AWS est spécifiée dans la configuration de stockage de la recette.
  • La clé KMS gérée par AWS est spécifiée dans la configuration de distribution avec un ou plusieurs comptes cibles.
  • L'AMI parent est cryptée à l'aide de la clé KMS gérée par AWS.
  • L'AMI parent possède plusieurs instantanés, dont au moins un est chiffré avec la clé KMS gérée par AWS.
  • Le chiffrement par défaut est activé dans votre région AWS et utilise la clé KMS gérée par AWS.

Pour résoudre ce problème, créez une nouvelle version de la recette d'image et spécifiez une clé KMS gérée par le client pour le chiffrement dans la configuration de stockage de la recette. Pour les clés KMS dans la configuration de distribution, spécifiez une clé KMS gérée par le client pour le chiffrement lorsque vous distribuez des AMI à d'autres comptes.

L'entité AWS KMS ou IAM ne dispose pas des autorisations requises

Vous pouvez distribuer des AMI dans Image Builder à l'aide des configurations LaunchPermissions ou targetAccountIds.

launchPermissions

Lorsque vous distribuez une AMI à l'aide de LaunchPermissions, Image Builder utilise le rôle IAM AWSServiceRoleForImageBuilder dans le compte source. Par défaut, AWSServiceRoleForImageBuilder dispose de l'autorisation AWS KMS requise pour les ressources du compte source.

La stratégie de clé KMS comporte une instruction qui autorise l'action « kms : * » pour l'utilisateur root. Si cette instruction ne figure pas dans la stratégie de clé, le rôle lié au service ne peut pas accéder à la clé du compte source. Si l'action « kms : * » n'est pas autorisée pour l'utilisateur root, modifiez la stratégie pour permettre au rôle lié au service d'utiliser la clé.

Par exemple :

{
  "Sid": "Enable IAM User Permissions",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::source_account_id:role/aws-service-role/imagebuilder.amazonaws.com/AWSServiceRoleForImageBuilder"
  },
  "Action": [
    "kms:Decrypt",
    "kms:Encrypt",
    "kms:GenerateDataKeyWithoutPlaintext",
    "kms:DescribeKey",
    "kms:CreateGrant",
    "kms:ReEncryptFrom",
    "kms:ReEncryptTo"
  ],
  "Resource": "*"
}

Remarque : remplacez source_account_id par l'ID de votre compte source.

targetAccountIds

Si le compte de destination ne possède pas le rôle IAM EC2ImageBuilderDistributionCrossAccountRole, ou si le compte source n'est pas répertorié dans la stratégie d'approbation, l'erreur suivante s'affiche :

Distribution failed with JobId 'xxxxxxxxxxxxxx', status = 'Failed' for ARN 'arn:aws:imagebuilder:us-east-1:XXXXXXXXXX:image/testdistribution/2.0.0/3'. 'Not all distribution jobs are completed. 1) STS Client Error: 'User: arn:aws:sts::XXXXXXXXXXXX:assumed-role/AWSServiceRoleForImageBuilder/Ec2ImageBuilderIntegrationService is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::xxxxxxxxx:role/EC2ImageBuilderDistributionCrossAccountRole'. Please make sure your 'EC2ImageBuilderDistributionCrossAccountRole' is setup with correct permission policies. If you are copying AMI to opt-in regions, please make sure the region is enabled in the account when distributing the image from the source account (ID: XXXXXXXXXXXX) to the destination account (ID: XXXXXXXXXXXX) in Region us-east-1.'STS Client Error User is not authorized to perform: sts:AssumeRole on resource.

Pour résoudre ce problème, créez le rôle EC2ImageBuilderDistributionCrossAccountRole. Ensuite, attachez la stratégie Ec2ImageBuilderCrossAccountDistributionAccess pour autoriser la distribution entre comptes. Ensuite, répertoriez AWSServiceRoleForImageBuilder dans la stratégie d'approbation EC2ImageBuilderDistributionCrossAccountRole :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com",
        "AWS": "arn:aws:iam::XXXXXXXXXX:root"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

L'erreur suivante peut s'afficher en raison de problèmes liés aux autorisations KMS entre comptes :

Distribution failed with JobId 'xxxxxxxxxxxxxx', status = 'Failed' for ARN 'arn:aws:imagebuilder:ap-southeast-2:11111111111:image/test/1.0.0/1'. 'Not all distribution jobs are completed. 1) AMI Copy Reported Failure For 'ami-0047623fbcxxxxx' when distributing the image from the source account (ID: 11111111111) to the destination account (ID: 222222222222) in Region ap-southeast-2.'

Lorsque vous distribuez une AMI à l'aide de targetAccountIds, Image Builder utilise le rôle AWSServiceRoleForImageBuilder dans le compte source. Dans le compte de destination, il utilise le rôle EC2ImageBuilderDistributionCrossAccountRole. Assurez-vous d'autoriser EC2ImageBuilderDistributionCrossAccountRole à utiliser les clés AWS KMS dans la configuration de la distribution et la configuration du stockage de la recette.

Par exemple :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt",
        "kms:Encrypt",
        "kms:GenerateDataKeyWithoutPlaintext",
        "kms:DescribeKey",
        "kms:CreateGrant",
        "kms:ReEncryptFrom",
        "kms:ReEncryptTo"
      ],
      "Resource": "*"
    }
  ]
}

Remarque : vous pouvez également restreindre la section Resource en spécifiant l'ARN de la clé AWS KMS.

Si les clés KMS gérées par le client appartiennent au compte de destination, vous devez partager la clé AWS KMS avec le compte source. Si les clés KMS gérées par le client appartiennent au compte source, vous devez partager les clés AWS KMS avec le compte de destination.

Effectuez les étapes suivantes pour partager les clés AWS KMS :

1.    Connectez-vous au compte où se trouve la clé KMS.

2.    Ouvrez la AWS KMS console (Console AWS KMS) dans la même Région AWS.

3.    Dans le panneau de navigation de gauche, choisissez Customer managed keys (Clés gérées par le client).

4.    Sélectionnez la clé KMS.

5.    Choisissez l'onglet Key Policy.

6.    Dans Other AWS accounts (Autres comptes AWS), choisissez Add another AWS account (Ajouter un autre compte AWS).

7.    Spécifiez l'ID du compte avec lequel vous souhaitez partager la clé KMS.

8.    Choisissez Save Changes (Enregistrer les modifications).


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


Avez-vous besoin d'aide pour une question technique ou de facturation ?