보조 계정이 내 Amazon ECR 이미지 리포지토리의 이미지를 푸시 또는 풀하도록 허용하려면 어떻게 해야 하나요?

3분 분량
0

보조 계정이 내 Amazon Elastic Container Registry(Amazon ECR) 이미지 리포지토리의 이미지를 푸시 또는 풀이 가능하도록 허용하려고 합니다.

해결 방법

다른 계정의 Amazon ECR 리포지토리에서 또는 Amazon ECR 리포지토리에서 이미지를 푸시하거나 가져올 수 있습니다. 먼저 보조 계정이 리포지토리에 대해 API 호출을 수행할 수 있도록 허용하는 정책을 생성해야 합니다. 그런 다음 보조 계정에서 생성된 Docker 인증 토큰을 사용하여 기본 계정의 리포지토리에 대해 푸시 및 풀 명령을 사용합니다.

보조 계정이 이미지 리포지토리에 대해 API 호출을 수행할 수 있도록 허용하는 정책을 생성합니다.

1.    기본 계정의 Amazon ECR 콘솔을 엽니다.

2.    수정하려는 리포지토리의 하이퍼링크된 리포지토리 이름을 선택합니다.

3.    왼쪽 탐색 창의 Amazon ECR - 리포지토리에서 권한을 선택합니다.

4.    기본 계정 내에서 보조 계정의 리포지토리 정책을 추가하려면 정책 JSON 편집을 선택합니다. 코드 편집기에 정책을 입력한 다음 저장을 선택합니다.

중요: 정책에는 보조 계정의 계정 번호와 해당 계정이 리포지토리에 대해 수행할 수 있는 작업을 포함시키세요. 특정 역할에 대한 액세스를 허용하려면 arn 역할을 주요로 제공하세요. 예: AWS: arn:aws:iam::account-id:role/ecsInstanceRole. 리포지토리 정책을 저장하기 전에 해당 역할이 보조 계정에 있어야 합니다. 만약 존재하지 않는 경우 다음과 비슷한 오류가 발생합니다. invalid repository policy provided.

다음 예제 리포지토리 정책은 특정 계정에서 이미지를 푸시하고 가져올 수 있도록 허용합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowPushPull",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::account-id:root"
      },
      "Action": [
        "ecr:GetDownloadUrlForLayer",
        "ecr:BatchGetImage",
        "ecr:BatchCheckLayerAvailability",
        "ecr:PutImage",
        "ecr:InitiateLayerUpload",
        "ecr:UploadLayerPart",
        "ecr:CompleteLayerUpload"
      ]
    }
  ]
}

5.    작업 정의에서 Amazon ECS와 함께 사용할 이미지를 설정합니다. 이미지는 기본 계정의 Amazon ECR 리포지토리에서 호스팅됩니다.
참고: 보조 계정에 “AmazonEC2ContainerRegistryPowerUser” 관리형 정책에 나열된 Amazon ECR 권한이 있는지 확인하세요. 이러한 권한은 기본 계정에서 가져오거나 푸시하는 데 필요합니다.

보조 계정에서 임시 Docker 인증 토큰을 생성하고 테스트 푸시 또는 풀을 수행합니다.

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하는 경우, 최신 버전의 AWS CLI를 사용하고 있는지 확인하세요.

보조 계정은 12시간 동안 유효한 임시 인증 토큰을 받을 때까지 리포지토리에서 정책 작업을 수행할 수 없습니다. 토큰을 사용하면 보조 계정이 기본 계정의 리포지토리에 대해 Docker 푸시 및 풀 명령을 사용할 수 있습니다. get-login-password 명령은 인증 토큰을 검색 및 디코딩한 다음 docker login 명령으로 파이핑하여 인증할 수 있습니다.

참고: 토큰을 받는 계정에는 리포지토리를 수정할 수 있는 관련 AWS Identify and Access Management(IAM) API 권한이 있어야 합니다. 예제는 Amazon Elastic Container Registry에 대한 AWS 관리형 정책을 참조하세요. Docker 관련 문제를 해결하려면 Docker 대몬(daemon)에서 디버그 모드를 켜세요. 이 명령은 최신 버전의 AWS CLI 버전 2를 사용하거나 v1.17.10 이상의 AWS CLI 버전 1을 사용하여 지원됩니다. 자세한 내용은 get-login-password를 참조하세요.

1.    Amazon ECS 외부로 이미지를 푸시하고 가져오는 계정에 대한 Docker 인증 토큰을 생성하려면 다음 명령을 실행합니다. aws\ _account\ _id를 기본 계정 ID로 바꾸고 regionID를 사용자의 리전 ID로 바꿉니다.

AWS CLI 사용:

aws ecr get-login-password --region regionID | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.regionID.amazonaws.com

AWS Tools for Windows PowerShell 사용:

(Get-ECRLoginCommand).Password | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.regionID.amazonaws.com

다음과 같은 출력이 표시됩니다.

aws ecr get-login-password --region ap-south-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.ap-south-1.amazonaws.com
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

2.    기본 계정에서 테스트 이미지를 가져오거나 기본 계정으로 푸시하세요.

docker pull AccountID.dkr.ecr.Region.amazonaws.com/ImageName::TagName

참고: AccountID 및 Region을 사용자의 계정 ID 및 리전으로 바꿉니다. ImageName 및 TagName을 사용자의 이미지 이름 및 태그의 이름으로 바꿉니다.

3.    이미지가 성공적으로 다운로드되었는지 확인합니다.

docker images | grep ImageName

참고: ImageName을 사용자의 이미지 이름으로 바꿉니다.

AWS 공식
AWS 공식업데이트됨 2년 전