Wie behebe ich Verteilungsfehler für verschlüsselte AMIs in Image Builder?

Letzte Aktualisierung: 26.08.2022

Ich erhalte Fehler, wenn ich versuche, verschlüsselte AMIs an ein anderes Konto in EC2 Image Builder zu verteilen. Wie kann ich dies beheben?

Kurzbeschreibung

Die folgenden Szenarien können zu Verteilungsfehlern in EC2 Image Builder führen, wenn du ein verschlüsseltes Amazon Machine Image (AMI) an ein anderes Konto verteilst:

Lösung

Das verteilte AMI wird mit dem standardmäßigen von AWS verwalteten Schlüssel für Amazon EBS verschlüsselt

Du erhältst folgende Fehlermeldung:

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.'

Du kannst keine AMIs freigeben, die mit dem standardmäßigen AWS KMS-Schlüssel verschlüsselt sind. Weitere Informationen findest du unter Freigeben eines AMI für bestimmte AWS-Konten.

Zu den zu überprüfenden Szenarien gehören:

  • Der von AWS verwaltete KMS-Schlüssel ist in der Speicherkonfiguration des Rezepts angegeben.
  • Der von AWS verwaltete KMS-Schlüssel wird in der Verteilungskonfiguration zusammen mit einem oder mehreren Zielkonten angegeben.
  • Das übergeordnete AMI wird mit dem von AWS verwalteten KMS-Schlüssel verschlüsselt.
  • Das übergeordnete AMI verfügt über mehrere Snapshots, und mindestens einer ist mit dem von AWS verwalteten KMS-Schlüssel verschlüsselt.
  • Die Verschlüsselung ist in deiner AWS-Region standardmäßig aktiviert und verwendet den von AWS verwalteten KMS-Schlüssel.

Um dieses Problem zu beheben, erstelle eine neue Version des Image-Rezepts und gib einen vom Kunden verwalteten KMS-Schlüssel für die Verschlüsselung in der Speicherkonfiguration des Rezepts an. Gib für KMS-Schlüssel in der Verteilungskonfiguration einen vom Kunden verwalteten KMS-Schlüssel für die Verschlüsselung an, wenn du AMIs an andere Konten verteilst.

Die AWS-KMS- oder IAM-Entität verfügt nicht über die erforderlichen Berechtigungen

Du kannst AMIs in Image Builder entweder mit der Konfiguration LaunchPermissions oder TargetAccountIds verteilen.

Startberechtigungen

Wenn du ein AMI mithilfe von LaunchPermissions verteilst, verwendet Image Builder die IAM-Rolle awsServiceRoleForImageBuilder im Quellkonto. AWSServiceRoleForImageBuilder verfügt standardmäßig über die erforderliche AWS-KMS-Berechtigung für die Ressourcen im Quellkonto.

Die KMS-Schlüsselrichtlinie enthält eine Anweisung, die die Aktion „kms:*“ für den Root-Benutzer zulässt. Wenn diese Anweisung nicht in der Schlüsselrichtlinie enthalten ist, kann die mit dem Service verknüpfte Rolle nicht auf den Schlüssel im Quellkonto zugreifen. Wenn die Aktion „kms:*“ für den Root-Benutzer nicht zulässig ist, änder die Richtlinie, damit die mit dem Service verknüpfte Rolle den Schlüssel verwenden kann.

Beispiel:

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

Hinweis: Ersetze die Zielkonto-ID durch die ID deines Quellkontos.

Zielkonto-IDs

Wenn das Zielkonto nicht über die IAM-Rolle ec2ImageBuilderDistributionCrossAccountRole verfügt oder das Quellkonto nicht in der Vertrauensrichtlinie aufgeführt ist, wird die folgende Fehlermeldung angezeigt:

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.

Um dieses Problem zu beheben, erstelle die Rolle ec2ImageBuilderDistributionCrossAccountRole. Fügen Sie dann die Richtlinie ec2ImageBuilderCrossAccountDistributionAccess an, um eine kontoübergreifende Verteilung zu ermöglichen. Listen Sie dann AWSServiceRoleForImageBuilder in der Vertrauensrichtlinie EC2ImageBuilderDistributionCrossAccountRole auf:

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

Aufgrund von Problemen mit kontoübergreifenden AWS-KMS-Berechtigungen wird möglicherweise der folgende Fehler angezeigt:

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.'

Wenn du ein AMI mithilfe von targetAccountIds verteilst, verwendet Image Builder die Rolle AWSServiceRoleForImageBuilder im Quellkonto. Im Zielkonto verwendet es die Rolle ec2ImageBuilderDistributionCrossAccountRole. Stelle sicher, dass du an ec2ImageBuilderDistributionCrossAccountRole die Berechtigung erteilst, die AWS-KMS-Schlüssel in der Verteilungskonfiguration und in der Speicherkonfiguration des Rezepts zu verwenden.

Beispiel:

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

Hinweis: Du kannst den Abschnitt Ressource auch einschränken, indem du den ARN des AWS-KMS-Schlüssels angibst.

Wenn die vom Kunden verwalteten KMS-Schlüssel zum Zielkonto gehören, musst du den AWS-KMS-Schlüssel für das Quellkonto freigeben. Wenn die vom Kunden verwalteten KMS-Schlüssel zum Quellkonto gehören, musst du die AWS-KMS-Schlüssel für das Zielkonto freigeben.

Führe die folgenden Schritte aus, um die AWS-KMS-Schlüssel freizugeben:

1.    Melde dich bei dem Konto an, in dem der KMS-Schlüssel befindet.

2.    Öffne die AWS-KMS-Konsole in dergleichen AWS-Region.

3.    Wähle im linken Navigationsbereich Vom Kunden verwaltete Schlüssel aus.

4.    Wähle die KMS-Schlüssel-ID aus.

5.    Wähle die Registerkarte Schlüsselrichtlinie aus.

6.    Wähle im Abschnitt Andere AWS-Konten die Option Weitere AWS-Konten hinzufügen aus.

7.    Gib die ID des Kontos an, für das du den KMS-Schlüssel freigeben möchtest.

8.    Wähle Änderungen speichern.