Como solucionar problemas de erros de distribuição para AMIs criptografadas no Image Builder?

6 minuto de leitura
0

Recebo erros quando tento distribuir AMIs criptografadas para outra conta no EC2 Image Builder. Como corrigir isso?

Breve descrição

Os cenários a seguir podem causar erros de distribuição no EC2 Image Builder quando uma imagem de máquina da Amazon (AMI) criptografada é distribuída para outra conta:

Resolução

A AMI distribuída é criptografada usando a chave gerenciada padrão pela AWS para o Amazon EBS

Você receberá o seguinte erro:

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

Não é possível compartilhar AMIs criptografadas com a chave padrão do AWS KMS. Para obter mais informações, consulte Compartilhamento de uma AMI com contas específicas da AWS.

Os cenários que devem ser verificados incluem:

  • A chave do KMS gerenciada pela AWS é especificada na configuração de armazenamento da fórmula.
  • A chave do KMS gerenciada pela AWS é especificada na configuração de distribuição junto com uma ou mais contas de destino.
  • A AMI pai é criptografada usando a chave do KMS gerenciada pela AWS.
  • A AMI pai possui vários snapshots e pelo menos um é criptografado com a chave do KMS gerenciada pela AWS.
  • A criptografia por padrão está ativada na sua região da AWS e está usando a chave do KMS gerenciada pela AWS.

Para resolver esse problema, crie uma nova versão da fórmula de imagem e especifique uma chave KMS gerenciada pelo cliente para criptografia na configuração de armazenamento da fórmula. Para chaves KMS na configuração de distribuição, especifique uma chave KMS gerenciada pelo cliente para criptografia ao distribuir AMIs para outras contas.

A entidade do AWS KMS ou do IAM não tem as permissões necessárias

É possível distribuir AMIs no Image Builder usando as configurações launchPermissions ou targetAccountIds.

launchPermissions

Quando uma AMI é distribuída usando o launchPermissions, o Image Builder usa o perfil do IAM AWSServiceRoleForImageBuilder na conta de origem. Por padrão, o AWSServiceRoleForImageBuilder possui a permissão necessária do AWS KMS para os recursos na conta de origem.

A política de chaves do KMS possui uma instrução que permite a ação “kms: *” para o usuário raiz. Caso essa declaração não esteja na política de chaves, a função vinculada ao serviço não poderá acessar a chave na conta de origem. Se a ação “kms: *” não for permitida para o usuário raiz, modifique a política para permitir que a função vinculada ao serviço use a chave.

Por exemplo:

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

Observação: substitua source_account_id pelo ID da conta de origem.

targetAccountIds

Caso a conta de destino não tenha o perfil do IAM EC2ImageBuilderDistributionCrossAccountRole ou se a conta de origem não estiver listada na política de confiança, o seguinte erro aparecerá:

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.

Para resolver esse problema, crie a função EC2ImageBuilderDistributionCrossAccountRole. Em seguida, anexe a política Ec2ImageBuilderCrossAccountDistributionAccess para permitir a distribuição entre contas. Em seguida, liste o AWSServiceRoleForImageBuilder na política de confiança EC2ImageBuilderDistributionCrossAccountRole:

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

É possível receber o seguinte erro devido a problemas com permissões do AWS KMS entre contas:

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 uma AMI é distribuída usando targetAccountIds, o Image Builder usa a função AWSServiceRoleForImageBuilder na conta de origem. Na conta de destino, ele usa a função EC2ImageBuilderDistributionCrossAccountRole. Verifique e confirme se a concessão da permissão ao EC2ImageBuilderDistributionCrossAccountRole para usar as chaves do AWS KMS na configuração de distribuição e na configuração de armazenamento da fórmula.

Por exemplo:

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

Observação: também é possível restringir a seção Resource especificando o ARN da chave do AWS KMS.

Caso as chaves do KMS gerenciadas pelo cliente pertençam à conta de destino, será preciso compartilhar a chave do AWS KMS com a conta de origem. Caso as chaves do KMS gerenciadas pelo cliente pertençam à conta de origem, será preciso compartilhar as chaves do AWS KMS com a conta de destino.

Conclua as seguintes etapas para compartilhar as chaves do AWS KMS:

1.    Faça login na conta em que a chave do KMS está presente.

2.    Abra o console do AWS KMS na mesma região da AWS.

3.    No painel de navegação esquerdo, escolha Customer managed keys.

4.    Selecione KMS key ID (ID da chave KMS).

5.    Escolha a guia Key Policy (Política de chaves).

6.    Na seção Other AWS accounts (Outras contas da AWS), escolha Add other AWS accounts (Adicionar outras contas da AWS).

7.    Especifique o ID da conta com a qual deseja compartilhar a chave KMS.

8.    Escolha Save changes (Salvar alterações).


Informações relacionadas

Configuração da distribuição de AMI entre contas com o Image Builder

Como compartilhar minhas chaves do AWS KMS através de várias contas AWS?

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos