브로커 ECR 통합을 위한 컨테이너 레지스트리 에이전트 설정

중개 ECR 통합을 위한 용어 및 다이어그램

Elastic Container Registry(ECR)에서 중개 통신은 다른 컨테이너 레지스트리와 동일합니다. 그러나 ECR에는 에이전트에서 IAM(Identity and Access Management) 역할(Role) 또는 사용자를 설정해야 하는 특별한 인증 메커니즘이 있습니다.

컨테이너 레지스트리 에이전트 IAM 역할 또는 IAM 사용자는 컨테이너 레지스트리 에이전트가 ECR에 액세스할 수 있는 권한을 가진 역할을 가정(assume)하는 데 사용하는 IAM 역할 또는 IAM 사용자입니다.

Snyk ECR 서비스 역할(Service Role)은 ECR에 액세스할 수 있는 IAM 역할이며, 컨테이너 레지스트리 에이전트 IAM 역할 또는 IAM 사용자가 ECR에 대한 읽기 전용 액세스 권한을 얻기 위해 가정합니다. Snyk ECR 서비스 역할 ARN은 ECR이 실행되는 리전과 함께 Broker 클라이언트에 제공되며, 이를 가정할 컨테이너 레지스트리 에이전트에 전달됩니다.

여러 계정에 컨테이너 레지스트리 에이전트와 통신해야 하는 여러 ECR이 있는 경우, 각 ECR에 대해 Broker 클라이언트를 설정해야 합니다.

다음은 중개 ECR 통합을 위한 아키텍처를 보여줍니다. 다이어그램의 구성 요소 설정에 대한 정보는 다음 단계를 참조하십시오.

중개 ECR 통합 아키텍처
중개 ECR 통합 아키텍처

중개 ECR 통합 단계 요약

다음 단계에 따라 서로 다른 계정에 있는 ECR 리포지토리에 액세스할 수 있는 단일 컨테이너 레지스트리 에이전트 인스턴스를 설정하십시오.

  1. 이 단계는 한 번만 실행하십시오. 역할을 가정할 수 있는 권한이 있는 컨테이너 레지스트리 에이전트 IAM 역할 또는 IAM 사용자를 생성하십시오. IAM 역할 또는 IAM 사용자를 사용하여 컨테이너 레지스트리 에이전트를 실행하십시오. 각 ECR 계정에 대해 별도의 Broker 인스턴스를 사용하여 각 ECR 계정에 대해 다음 단계를 실행하십시오.

  2. ECR이 있는 AWS 계정에서 ECR에 대한 읽기 액세스 권한이 있는 Snyk ECR 서비스 역할을 생성하고, 이 역할을 이전 단계에서 생성한 특정 컨테이너 레지스트리 에이전트 IAM 역할 또는 IAM 사용자만 가정할 수 있도록 제한하십시오.

  3. 컨테이너 레지스트리 에이전트 IAM 역할 또는 IAM 사용자가 Snyk ECR 서비스 역할만 가정할 수 있도록 제한하십시오.

  4. Broker 클라이언트에 Snyk ECR 서비스 역할의 역할 Amazon 리소스 이름(ARN)을 제공하십시오. Broker 클라이언트는 이 역할 ARN을 컨테이너 레지스트리 에이전트에 전달하고, 컨테이너 레지스트리 에이전트는 이를 가정하여 ECR에 액세스합니다.

1단계: IAM 사용자 또는 IAM 역할로 컨테이너 레지스트리 에이전트 실행

이 단계에서는 컨테이너 레지스트리 에이전트에서 사용할 IAM 역할 또는 IAM 사용자를 생성합니다. IAM 역할 또는 IAM 사용자는 AWS 문서arrow-up-right에 설명된 방법을 통해 컨테이너 레지스트리 에이전트에 제공될 수 있습니다.

다음 예제는 다음 방법 중 하나를 사용하여 IAM 역할 또는 IAM 사용자를 제공하는 방법을 설명합니다. Amazon ECS 작업에서 전용 역할을 제공할 수도 있습니다. 자세한 내용은 AWS 문서arrow-up-right를 참조하십시오.

예: 전용 EC2 서비스 역할 생성 및 Amazon EC2용 AWS IAM(Identity and Access Management) 역할에서 자격 증명 로드

역할 생성

  1. AWSarrow-up-right로 이동하여 IAM 서비스로 AWS 관리 콘솔에 로그인하고 역할(Roles) 페이지로 이동합니다.

  2. **역할 생성(create a role)**을 선택합니다.

  3. **신뢰할 수 있는 엔터티 유형(type of trusted entity)**으로 **AWS 서비스(AWS service)**를 선택합니다.

  4. **사용 사례(use case)**로 EC2를 선택합니다.

  5. 다음으로 권한 및 태그 설정으로 이동합니다.

  6. 검토하고 역할 이름을 제공합니다: SnykCraEc2Role.

  7. 역할을 생성합니다.

  8. 나중에 사용하기 위해 역할의 요약(Summary) 페이지에서 **인스턴스 프로파일 ARN(Instance Profile ARN)**을 복사합니다.\ 예: arn:aws:iam::aws-account:instance-profile 또는 SnykCraEc2Role\ 또한 **역할 ARN(Role ARN)**을 복사합니다.

    예: arn:aws:iam::aws-account:role 또는 SnykCraEc2Role

EC2 역할이 다른 역할을 가정하도록 허용하는 정책 생성

  1. 새로 생성된 역할 페이지의 권한(Permissions) 탭에서 **인라인 정책(Inline policy)**을 생성합니다.

  2. **서비스(Service)**에서 STS를 선택합니다.

  3. **작업(Actions)**에서 쓰기(Write) > AssumeRole을 선택합니다.

  4. **리소스(Resources)**에서 **모든 리소스(All resources)**를 선택합니다(나중 단계에서 리소스를 강화할 것입니다).

  5. JSON 탭에서 정책에 다음 내용이 포함되어 있는지 확인합니다:

  6. 정책을 검토하고 정책 이름을 제공합니다: SnykCraAssumeRolePolicy.

  7. 정책 생성을 선택합니다.

컨테이너 레지스트리 에이전트를 실행하는 EC2 머신에 역할 연결

  1. EC2 관리 콘솔로 이동하여 컨테이너 레지스트리 에이전트 컨테이너를 실행하는 인스턴스를 선택합니다.

  2. 작업(Actions) > 보안(Security) > **IAM 역할 수정(Modify IAM Role)**을 선택합니다.

  3. IAM 역할(IAM role) 드롭다운 목록에서 첫 번째 단계에서 생성한 IAM 역할의 인스턴스 프로필을 선택합니다.\ 예: arn:aws:iam::aws-accoun:instance-profile 또는 SnykCraEc2Role

  4. **저장(Save)**합니다.

EC2 머신에서 컨테이너 레지스트리 에이전트 이미지를 실행할 때 연결된 역할의 자격 증명이 실행 중인 컨테이너 레지스트리 에이전트에 의해 자동으로 선택됩니다. 따라서 추가 단계가 필요하지 않습니다. 자세한 내용은 Amazon 문서arrow-up-right를 참조하십시오.

예: 전용 사용자 생성 및 환경 변수를 통한 자격 증명 제공

사용자 생성

  1. AWSarrow-up-right로 이동하여 IAM 서비스로 AWS 관리 콘솔에 로그인하고 사용자(Users) 페이지로 이동합니다.

  2. **사용자 추가(Add users)**를 선택합니다.

  3. 사용자 이름을 입력합니다: SnykCraUser.

  4. **액세스 유형(Access type)**으로 **프로그래밍 방식 액세스(Programmatic access)**를 선택합니다.

  5. 다음으로 권한 및 태그 설정으로 이동합니다.

  6. 검토하고 사용자를 생성합니다.

  7. 사용자가 생성되면 나중에 사용하기 위해 자격 증명(액세스 키 ID 및 비밀 액세스 키)을 저장합니다.

  8. 사용자의 요약(Summary) 페이지에서 나중에 사용하기 위해 **사용자 ARN(User ARN)**을 복사합니다.\ 예: arn:aws:iam::aws-account:user 또는 SnykCraUser

사용자가 역할을 가정하도록 허용하는 정책 생성

  1. 새로 생성된 사용자 페이지의 권한(Permissions) 탭에서 **인라인 정책(Inline policy)**을 생성합니다.

  2. **서비스(Service)**에서 STS를 선택합니다.

  3. **작업(Actions)**에서 쓰기(Write) > AssumeRole을 선택합니다.

  4. **리소스(Resources)**에서 **모든 리소스(All resources)**를 선택합니다(나중 단계에서 리소스를 강화할 것입니다).

  5. JSON 탭에서 정책에 다음 문이 포함되어 있는지 확인합니다:

  6. 정책을 검토하고 정책 이름을 제공합니다: SnykCraAssumeRolePolicy.

  7. 정책 생성을 선택합니다.

컨테이너 레지스트리 에이전트 실행 시 자격 증명 사용

컨테이너 레지스트리 에이전트 이미지를 실행할 때 다음 환경 변수를 설정하여 자격 증명을 제공할 수 있습니다:

  • AWS_ACCESS_KEY_ID=User access key ID

  • AWS_SECRET_ACCESS_KEY=User secret access key

2단계: Snyk ECR 서비스 역할 생성 및 ECR에 대한 교차 계정 액세스 활성화

이 단계에서는 ECR 리포지토리가 있는 계정에 역할을 생성합니다. 이 역할은 리포지토리에 대한 읽기 전용 액세스를 허용하며 이전 단계에서 생성된 역할이 가정할 수 있습니다.

1. Snyk ECR 서비스 역할에서 사용할 읽기 전용 ECR 정책 생성

  1. AWSarrow-up-right로 이동하여 IAM 서비스로 AWS 관리 콘솔에 로그인하고 정책(Policies) 페이지로 이동합니다.

  2. 새 정책을 생성합니다.

  3. JSON 데이터 편집을 선택합니다.

  4. 기본 데이터를 삭제하고 그 자리에 다음을 복사하여 붙여넣습니다:

  5. 정책 검토를 선택합니다.

  6. **이름(Name)**으로 AmazonEC2ContainerRegistryReadOnlyForSnyk을 설정합니다.

  7. **설명(description)**으로 Provides Container Registry Agent with read-only access to Amazon EC2 Container Registry repositories를 설정합니다.

  8. 정책 생성을 선택합니다.

2. 정책을 구현할 Snyk ECR 서비스 역할 생성

  1. AWS 관리 콘솔에서 다시 역할(Roles) 페이지로 이동합니다. 필요한 경우 로그인arrow-up-right하여 AWS 관리 콘솔로 이동합니다.

  2. 새 역할을 생성합니다.

  3. 신뢰할 수 있는 엔터티로 **AWS 서비스(AWS service)**를 선택하고 이 역할의 서비스로 EC2를 선택합니다.

  4. 다음으로 권한 설정으로 이동합니다.

  5. 목록에서 AmazonEC2ContainerRegistryReadOnlyForSnyk 정책을 선택합니다.

  6. 다음으로 태그 및 검토로 이동합니다.

  7. 이름(Name)으로 SnykEcrServiceRole을 설정합니다.

  8. 설명(description)으로 Allows EC2 instances to call ECR AWS services on your behalf를 설정합니다.

3. Snyk ECR 서비스 역할의 사용 범위 강화

이 단계에서는 Snyk ECR 서비스 역할의 사용 범위를 강화하여 컨테이너 레지스트리 에이전트 IAM 역할 또는 IAM 역할만 가정할 수 있도록 합니다.

  1. 역할(Roles) 페이지에서 SnykEcrServiceRolearrow-up-right을 찾아 선택하여 역할 구성으로 들어갑니다.

  2. 신뢰 관계(Trust relationships) 탭을 선택합니다.

  3. 신뢰 관계를 편집합니다.

  4. 모든 데이터를 삭제하고 다음 JSON으로 바꿉니다:

    • Statement.Principal.AWS에 1단계에서 생성한 IAM 역할 또는 IAM 사용자를 입력합니다.\ 예: 각각 arn:aws:iam::aws-account:user 또는 SnykCraEc2Role\ 또는 arn:aws:iam::aws-account:role 또는 SnykCraUser

    • Condition.StringEquals.sts:ExternalId에 선택한 외부 ID를 사용할 수 있으며, 이 ID는 자격 증명 객체가 Broker 클라이언트에 제공될 때 사용됩니다.

    • 여러 외부 ID를 지원하려면 대괄호 안에 ID 목록을 입력하십시오.\ 예: sts:ExternalId: [ 11111111-1111-1111-1111-111111111111, 22222222-2222-2222-2222-222222222222 ]

  5. 신뢰 정책을 업데이트합니다.

3단계: 컨테이너 레지스트리 에이전트가 사용하는 IAM 역할 또는 IAM 사용자의 사용 범위 강화

이 단계에서는 컨테이너 레지스트리 에이전트가 사용하는 IAM 역할 또는 IAM 사용자의 사용 범위를 강화하여 SnykEcrServiceRolearrow-up-right만 가정할 수 있도록 합니다.

  1. SnykEcrServiceRolearrow-up-right요약(Summary) 섹션 상단에 나타나는 역할 ARN 키를 복사합니다.

  2. 컨테이너 레지스트리 에이전트를 실행하기 위해 IAM 역할 또는 IAM 사용자가 생성된 AWS 계정에서 SnykCraAssumeRolePolicy를 편집합니다:

    1. IAM 역할이 생성된 경우 **역할(Roles)**로 이동하여 SnykCraEc2Role 역할을 선택합니다.

      1. SnykCraAssumeRolePolicy에서 JSON 편집을 선택합니다.

      2. SnykEcrServiceRolearrow-up-right의 역할 ARN을 리소스로 추가합니다:\ Resource: Role ARN of SnykEcrServiceRole

    2. IAM 사용자가 생성된 경우 **사용자(Users)**로 이동하여 SnykCraUser 사용자를 선택합니다.

      1. SnykCraAssumeRolePolicy에서 JSON 편집을 선택합니다.

      2. SnykEcrServiceRolearrow-up-right의 역할 ARN을 리소스로 추가합니다:\ Resource: Role ARN of SnykEcrServiceRole

컨테이너 레지스트리 에이전트가 다른 계정에 있는 여러 ECR 레지스트리에 액세스해야 하는 경우 각 ECR 계정에 별도의 문이 있도록 Statement 목록에 별도의 항목을 추가해야 합니다. 예:

4단계: Broker 클라이언트에 Snyk ECR 서비스 역할 ARN 및 외부 ID 제공

이 단계에서는 SnykEcrServiceRole의 역할 ARN을 Broker 클라이언트에 제공하여 사용합니다. Broker 클라이언트는 이를 컨테이너 레지스트리 에이전트에 전달하고, 컨테이너 레지스트리 에이전트는 이를 가정하여 ECR에 연결합니다.

  1. SnykEcrServiceRolearrow-up-right요약(Summary) 섹션 상단에 나타나는 역할 ARN(Role ARN) 키를 복사합니다.

  2. Broker 클라이언트를 실행할 때 컨테이너 레지스트리 에이전트가 ECR 계정에 액세스할 수 있도록 다음 환경 변수를 제공하십시오. 사용자 이름과 비밀번호는 필요하지 않습니다.

    • CR_TYPE=ecr

    • CR_ROLE_ARN=the role ARN of SnykEcrServiceRole

    • CR_REGION=AWS Region of ECR

    • CR_EXTERNAL_ID=Optional. The external ID found in the trust relationship condition

Last updated