Image Builder에서 암호화된 AMI의 배포 오류를 해결하려면 어떻게 해야 하나요?

4분 분량
0

EC2 Image Builder의 다른 계정에 암호화된 AMI를 배포하려고 할 때 오류가 발생합니다. 이 문제를 해결하려면 어떻게 해야 합니까?

간략한 설명

다음 시나리오에서는 암호화된 Amazon Machine Image(AMI)를 다른 계정에 배포할 때 EC2 Image Builder에서 배포 오류가 발생할 수 있습니다.

해결 방법

배포되는 AMI가 Amazon EBS용 기본 AWS 관리형 키를 사용하여 암호화된 경우

다음과 같은 오류가 발생합니다.

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

기본 AWS KMS 키로 암호화된 AMI는 공유할 수 없습니다. 자세한 내용은 특정 AWS 계정과 AMI 공유를 참조하세요.

확인해야 할 시나리오는 다음과 같습니다.

  • AWS 관리형 KMS 키는 레시피의 스토리지 구성에 지정됩니다.
  • AWS 관리형 KMS 키는 하나 이상의 대상 계정과 함께 배포 구성에서 지정됩니다.
  • 상위 AMI는 AWS 관리형 KMS 키를 사용하여 암호화됩니다.
  • 상위 AMI에는 여러 스냅샷이 있으며 하나 이상의 스냅샷이 AWS 관리형 KMS 키로 암호화됩니다.
  • 암호화는 기본적으로 AWS 리전에서 활성화되어 있으며 AWS 관리형 KMS 키를 사용합니다.

이 문제를 해결하려면 이미지 레시피의 새 버전을 생성하고 레시피의 스토리지 구성에서 암호화를 위한 고객 관리형 KMS 키를 지정합니다. 배포 구성의 KMS 키에 대해 AMI를 다른 계정에 배포할 때 암호화용 고객 관리형 KMS 키를 지정합니다.

AWS KMS 또는 IAM 엔터티에 필요한 권한이 없는 경우

launchPermissions 또는 targetAccountIds 구성을 사용하여 Image Builder에서 AMI를 배포할 수 있습니다.

launchPermissions

launchPermissions을 사용하여 AMI를 배포하는 경우 Image Builder는 소스 계정에서 IAM 역할 AWSServiceRoleForImageBuilder를 사용합니다. 기본적으로 AWSServiceRoleForImageBuilder에는 소스 계정의 리소스에 대해 필요한 AWS KMS 권한이 있습니다.

KMS 키 정책에는 루트 사용자에 대해 "kms:*" 작업을 허용하는 문이 있습니다. 이 문이 키 정책에 없으면 서비스 연결 역할이 소스 계정의 키에 액세스할 수 없습니다. 루트 사용자에게 "kms:*" 작업이 허용되지 않는 경우 서비스 연결 역할이 키를 사용할 수 있도록 정책을 수정합니다.

예를 들면 다음과 같습니다.

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

참고: source_account_id를 소스 계정의 ID로 바꿉니다.

targetAccountIds

대상 계정에 IAM 역할 EC2ImageBuilderDistributionCrossAccountRole이 없거나 소스 계정이 신뢰 정책에 나열되지 않은 경우 다음 오류가 발생합니다.

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.

이 문제를 해결하려면 EC2ImageBuilderDistributionCrossAccountRole 역할을 생성합니다. 그리고 교차 계정 배포를 허용하도록**Ec2ImageBuilderCrossAccountDistributionAccess** 정책을 연결합니다. 그런 다음 EC2ImageBuilderDistributionCrossAccountRole 신뢰 정책에 AWSServiceRoleForImageBuilder를 나열합니다.

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

교차 계정 AWS KMS 권한 문제로 인해 다음 오류가 표시될 수 있습니다.

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

targetAccountIds를 사용하여 AMI를 배포하는 경우 Image Builder는 소스 계정에서 AWSServiceRoleForImageBuilder 역할을 사용합니다. 대상 계정에서는 EC2ImageBuilderDistributionCrossAccountRole 역할을 사용합니다. 배포 구성 및 레시피의 스토리지 구성에서 AWS KMS 키를 사용할 수 있는 EC2ImageBuilderDistributionCrossAccountRole 권한을 부여해야 합니다.

예를 들면 다음과 같습니다.

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

참고: AWS KMS 키의 ARN을 지정하여 리소스 섹션을 제한할 수도 있습니다.

고객 관리형 KMS 키가 대상 계정에 속해 있는 경우 AWS KMS 키를 소스 계정과 공유해야 합니다. 고객 관리형 KMS 키가 소스 계정에 속해 있는 경우 대상 계정과 AWS KMS 키를 공유해야 합니다.

AWS KMS 키를 공유하려면 다음 단계를 완료합니다.

1.    KMS 키가 있는 계정에 로그인합니다.

2.    동일한 AWS 리전에서 AWS KMS 콘솔을 엽니다.

3.    좌측의 탐색 창에서 **고객 관리형 키(Customer managed keys)**를 선택합니다.

4.    **KMS 키 ID(KMS key ID)**를 선택합니다.

5.    키 정책(Key Policy) 탭을 선택합니다.

6.    다른 AWS 계정(Other AWS accounts) 섹션에서 **다른 AWS 계정 추가(Add other AWS accounts)**를 선택합니다.

7.    KMS 키를 공유할 계정의 ID를 지정합니다.

8.    **변경 사항 저장(Save Changes)**을 선택합니다.


관련 정보

Image Builder로 교차 계정 AMI 배포 설정

여러 AWS 계정에서 AWS KMS 키를 공유하려면 어떻게 해야 합니까?

AWS 공식
AWS 공식업데이트됨 2년 전
댓글 없음