Come posso risolvere gli errori di distribuzione relativi alle AMI crittografate in Image Builder?

Ultimo aggiornamento: 26/08/2022

Ricevo errori quando tento di distribuire AMI crittografate su un altro account in EC2 Image Builder. In che modo posso risolvere il problema?

Breve descrizione

I seguenti scenari possono causare errori di distribuzione in EC2 Image Builder quando si distribuisce un'Amazon Machine Image (AMI) crittografata a un altro account:

Risoluzione

L'AMI distribuita viene crittografata utilizzando la chiave gestita da AWS predefinita per Amazon EBS

Viene visualizzato il seguente errore:

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

Non puoi condividere le AMI crittografate con la chiave AWS KMS predefinita. Per ulteriori informazioni, consulta Condivisione di un'AMI con account AWS specifici.

Gli scenari da verificare includono:

  • La chiave KMS gestita da AWS è specificata nella configurazione di storage della ricetta.
  • La chiave KMS gestita da AWS è specificata nella configurazione di distribuzione insieme a uno o più account di destinazione.
  • L'AMI padre viene crittografata utilizzando la chiave KMS gestita da AWS.
  • L'AMI padre possiede più snapshot e almeno uno è crittografato con la chiave KMS gestita da AWS.
  • La crittografia di default è attivata nella tua regione AWS e utilizza la chiave KMS gestita da AWS.

Per risolvere questo problema, crea una nuova versione della ricetta dell'immagine e specifica una chiave KMS gestita dal cliente per la crittografia nella configurazione di storage della ricetta. Per le chiavi KMS nella configurazione di distribuzione, specificare una chiave KMS gestita dal cliente per la crittografia quando si distribuiscono le AMI ad altri account.

L'entità AWS KMS o IAM non dispone delle autorizzazioni necessarie

Puoi distribuire le AMI in Image Builder utilizzando le configurazioni LaunchPermissions o TargetAccountIds.

launchPermissions

Quando si distribuisce un'AMI utilizzando LaunchPermissions, Image Builder utilizza il ruolo IAM AWSServiceRoleForImageBuilder nell'account di origine. Per impostazione predefinita, AWSServiceRoleForImageBuilder dispone dell'autorizzazione AWS KMS richiesta per le risorse nell'account di origine.

Il criterio chiave KMS ha un'istruzione che consente l'azione "kms:*" per l'utente root. Se questa dichiarazione non è inclusa nel criterio chiave, il ruolo collegato al servizio non può accedere alla chiave nell'account di origine. Se l'azione “kms:*” non è consentita per l'utente root, modificare il criterio per consentire al ruolo collegato al servizio di utilizzare la chiave.

Ad esempio:

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

Nota: sostituisci source_account_id con l'ID del tuo account di origine.

targetAccountIds

Se l'account di destinazione non ha il ruolo IAM EC2ImageBuilderDistributionCrossAccountRole o l'account di origine non è elencato nel criterio di attendibilità, viene visualizzato il seguente errore:

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.

Per risolvere questo problema, crea il ruolo EC2ImageBuilderDistributionCrossAccountRole. Quindi, allega la policy Ec2ImageBuilderCrossAccountDistributionAccess per consentire la distribuzione tra più account. Quindi, elenca AWSServiceRoleForImageBuilder nella policy di attendibilità di EC2ImageBuilderDistributionCrossAccountRole:

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

Potresti ricevere il seguente errore a causa di problemi con le autorizzazioni AWS KMS tra più account:

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

Quando distribuisci un'AMI utilizzando targetAccountIds, Image Builder utilizza il ruolo AWSServiceRoleForImageBuilder nell'account di origine. Nell'account di destinazione, utilizza il ruolo EC2ImageBuilderDistributionCrossAccountrole. Assicurati di autorizzare EC2ImageBuilderDistributionCrossAccountrole per utilizzare le chiavi AWS KMS nella configurazione di distribuzione e nella configurazione di archiviazione della ricetta.

Ad esempio:

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

Nota: puoi anche limitare la sezione Risorse specificando l'ARN della chiave AWS KMS.

Se le chiavi KMS gestite dal cliente appartengono all'account di destinazione, è necessario condividere la chiave AWS KMS con l'account di origine. Se le chiavi KMS gestite dal cliente appartengono all'account di origine, è necessario condividere le chiavi di AWS KMS con l'account di destinazione.

Completa i seguenti passaggi per condividere le chiavi AWS KMS:

1.    Accedi all'account in cui si trova la chiave KMS.

2.    Apri la console AWS KMS nella stessa regione AWS.

3.    Nel pannello di navigazione a sinistra, scegli Customer managed keys (Chiavi gestite dal cliente).

4.    Seleziona l'ID chiave KMS.

5.    Scegli la scheda Key Policy (Policy chiave).

6.    Nella sezione Other AWS accounts (Altri account AWS), scegli Add other AWS accounts (Aggiungi altri account AWS).

7.    Specifica l'ID dell'account con cui desideri condividere la chiave KMS.

8.    Scegli Save Changes (Salva modifiche).