보조 계정이 Amazon ECR 이미지 리포지토리에서 이미지를 푸시하거나 가져올 수 있도록 하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 9월 28일

보조 계정이 Amazon Elastic Container Registry(Amazon ECR) 이미지 리포지토리에서 이미지를 푸시하거나 가져오도록 허용하려고 합니다.

간략한 설명

다른 계정의 Amazon ECR 리포지토리로 이미지를 푸시하거나 가져오려면 보조 계정이 리포지토리에 대해 API 호출을 수행하도록 허용하는 정책을 생성해야 합니다. 권한을 구성하고 리포지토리에 대한 토큰을 얻은 후에는 허용된 작업에 따라 이미지를 푸시하거나 가져올 수 있습니다. 토큰을 획득한 사용자는 리포지토리를 수정하려면 관련 AWS Identity and Access Management(IAM)API 권한도 필요합니다.

해결 방법

옵션 A와 B 중 하나를 선택합니다.

(옵션 A) 보조 계정이 이미지 리포지토리에 대해 API 호출을 수행하도록 허용하는 정책 생성

1.    기본 계정에 대한 Amazon ECR 콘솔을 엽니다.

2.    수정할 리포지토리의 이름을 선택합니다.

3.    탐색 메뉴에서 [Permissions]를 선택합니다.

4.    기본 계정 내에서 보조 계정에 대한 리포지토리 정책을 추가하려면 [Edit policy JSON]을 선택하고 코드 편집기에 정책을 입력한 다음 [Save]를 선택합니다.

중요: 정책에 보조 계정의 계정 번호와 해당 계정이 리포지토리에 대해 수행할 수 있는 작업을 포함합니다.

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

{
    "Version": "2008-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에 사용할 이미지를 설정합니다. 이미지는 기본 계정의 ECR 리포지토리에서 호스팅됩니다.

(옵션 B) 보조 계정의 임시 Docker 인증 토큰을 사용하여 기본 계정에서 이미지의 테스트 가져오기 수행

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

보조 계정은 12시간 동안 유효한 필수 임시 인증 토큰을 받기 전에는 리포지토리에서 정책 작업을 수행할 수 없습니다. 이 토큰을 사용하면 보조 계정에서 생성된 토큰을 사용하여 기본 계정 리포지토리에 대해 Docker push 및 pull 명령을 사용할 수 있습니다. AWS CLI get-login-password 명령은 인증 토큰을 검색하고 디코딩한 후 docker login 명령으로 파이핑하여 인증할 수 있도록 함으로써 이 작업을 간소화합니다.

1.    Amazon ECS 외부에서 이미지를 푸시하고 가져오는 계정에 대한 Docker 인증 토큰을 얻으려면 regionaws_account_id를 기본 계정의 ID 및 리전으로 바꾸어 다음 명령을 실행합니다.

AWS CLI 사용:

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

AWS Tools for Windows PowerShell 사용:

(Get-ECRLoginCommand).Password | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.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.    기본 계정으로의 테스트 이미지 끌어오기 또는 푸시를 수행합니다.

참고: 토큰을 가져오는 계정에는 리포지토리 계정에서 필요한 API 호출에 대한 권한이 필요합니다. 예제는 Amazon ECR 관리형 정책을 참조하십시오. Docker 관련 문제를 해결하려면 Docker 데몬에서 디버그 모드를 활성화하십시오. 이 명령은 AWS CLI 버전 2의 최신 버전을 사용하여 지원되거나 AWS CLI 버전 1의 v1.17.10 이상에서 지원됩니다. 자세한 내용은 get-login-password를 참조하십시오.


이 문서가 도움이 되었습니까?


결제 또는 기술 지원이 필요합니까?