내용으로 건너뛰기

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

4분 분량
0

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

간략한 설명

보조 계정이 Amazon ECR 리포지토리에서 이미지를 푸시 또는 풀하도록 허용하려면 기본 계정에 레지스트리 또는 리포지토리 정책을 만드십시오. AWS 리전의 모든 리포지토리 또는 여러 다른 리포지토리에 대한 액세스를 제공하려면 레지스트리 수준 정책을 구성하십시오. 하나의 리포지토리에만 액세스를 제공하거나 단일 리포지토리 내의 여러 ID에 대한 액세스를 제한하려면 리포지토리 수준 정책을 구성하십시오. 보조 계정의 특정 API 호출을 허용하도록 정책을 구성합니다.

그런 다음 보조 계정에서 Docker 인증 토큰을 생성하여 기본 계정의 저장소에서 이미지를 푸시하고 풀합니다.

해결 방법

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

레지스트리 수준 권한 구성

사전 요구 사항: Amazon ECR 레지스트리는 V2 정책을 사용해야 합니다. V1 정책을 사용하는 경우 V2로 전환하십시오. V2 정책에 대한 자세한 내용은 Amazon ECR은 레지스트리 정책을 모든 ECR 작업으로 확장함을 참조하십시오.

다음 단계를 완료하십시오.

  1. 기본 계정의 Amazon ECR 콘솔을 엽니다.
  2. 탐색 창의 프라이빗 레지스트리에서 기능 및 설정을 선택합니다.
  3. 권한을 선택합니다.
  4. JSON 편집을 선택합니다.
  5. 편집기에 정책을 입력합니다. 보조 계정이 리전의 모든 리포지토리에서 이미지를 푸시 및 풀하도록 허용하는 정책의 예:
     {
      "Version": "2012-10-17",
      "Statement": [
        {
          "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"
          ],
          "Resource": "*"
        }
      ]
    }
    참고: account-id를 보조 계정 ID로 바꾸십시오. 작업에는 해당 계정이 리포지토리에서 수행할 수 있는 작업을 입력합니다. 특정 역할에 대한 액세스를 허용하려면 주체의 역할 Amazon 리소스 이름(예: AWS: arn:aws:iam::account-id:role/ecsInstanceRole)을 제공하십시오. 레지스트리 정책을 저장하기 전에 입력한 역할이 보조 계정에 존재하는지 확인하십시오. 역할이 존재하지 않는 경우 "invalid registry policy provided" 오류가 표시됩니다.
  6. 저장을 선택합니다.

리포지토리 수준 권한 구성

다음 단계를 완료하십시오.

  1. 기본 계정의 Amazon ECR 콘솔을 엽니다.
  2. 탐색 창의 프라이빗 레지스트리에서 리포지토리를 선택합니다.
  3. 수정하려는 리포지토리를 선택합니다.
  4. 탐색 창에서 권한을 선택합니다.
  5. 정책 JSON 편집을 선택합니다.
  6. 정책 편집기에서 정책 문을 입력합니다.
    계정에서 이미지를 푸시 및 풀하도록 허용하는 리포지토리 정책의 예:
    {  "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"
          ]
        }
      ]
    }
    참고: account-id를 보조 계정 ID로 바꾸십시오. 작업에는 해당 계정이 리포지토리에서 수행할 수 있는 작업을 입력합니다. 특정 역할에 대한 액세스를 허용하려면 주체의 역할 Amazon 리소스 이름(예: AWS: arn:aws:iam::account-id:role/ecsInstanceRole)을 제공하십시오. 레지스트리 정책을 저장하기 전에 입력한 역할이 보조 계정에 존재하는지 확인하십시오. 역할이 존재하지 않는 경우 "invalid registry policy provided" 오류가 표시됩니다.
  7. 저장을 선택합니다.
  8. Amazon ECS를 사용하여 보조 계정에서 컨테이너를 실행하는 경우 Amazon ECS에서 사용할 이미지를 설정하십시오. 기본 계정의 Amazon ECR 리포지토리가 이미지를 호스팅합니다.

참고: AmazonEC2ContainerRegistryPowerUser 관리형 정책에 보조 계정에 대한 Amazon ECR 권한이 포함되어 있는지 확인하십시오. 기본 계정에서 풀 또는 푸시하려면 이러한 권한이 있어야 합니다.

임시 Docker 인증 토큰 생성

참고: 토큰을 받는 계정에는 리포지토리를 수정하는 데 필요한 AWS Identify and Access Management(IAM) API 권한이 있어야 합니다. 예제는 Amazon ECR에 대한 AWS 관리형 정책을 참조하십시오. Docker 관련 문제를 해결하려면 Docker 대몬에서 디버그 모드를 활성화하십시오.

다음 단계를 완료하십시오.

  1. Amazon ECS 외부로 이미지를 푸시하고 가져오는 계정에 대한 Docker 인증 토큰을 생성하려면 다음과 같은 get-login-password AWS CLI 명령을 실행합니다.

    aws ecr get-login-password --region regionID | docker login --username AWS --password-stdin AWS_ACCOUNT_ID.dkr.ecr.REGION-ID.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-ACCOUNT-ID를 기본 계정 ID로 바꾸고 REGION-ID를 리전으로 바꾸십시오. 임시 인증 토큰은 12시간 동안 유효합니다.
    출력 예시:

    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
    
    or
    
    Login Succeeded
  2. 기본 계정에 대한 테스트 이미지 풀 또는 푸시를 수행하려면 다음 명령을 실행합니다.

    docker pull ACCOUNT-ID.dkr.ecr.REGION.amazonaws.com/REPOSITORY-NAME:TAG-NAME

    참고: ACCOUNT-ID를 기본 계정 ID로, REGION을 리전으로, REPOSITORY-NAME을 리포지토리 이름으로, TAG-NAME을 이미지의 태그 이름으로 바꾸십시오.

  3. 이미지를 성공적으로 다운로드했는지 확인하려면 다음 명령을 실행합니다.

    docker images | grep IMAGE-NAME

    참고: IMAGE-NAME을 이미지 이름으로 바꾸십시오.