관리형 서명

관리형 서명

Amazon ECR 관리형 서명은 이미지가 Amazon ECR에 push 될 때 AWS Signer를 사용해 암호화 서명을 생성함으로써 컨테이너 이미지에 자동으로 서명해요. 이 방식은 클라이언트 측 도구를 설치하고 구성할 필요가 없으며, 레지스트리 구성으로 서명을 중앙에서 관리할 수 있게 해줘요.

출처: 문서

본문

관리형 서명을 구성하려면 하나 이상의 Signer 서명 프로필(signing profile)과, 선택적으로 어느 저장소의 이미지에 서명할지 제한하는 저장소 필터를 참조하는 서명 구성을 Amazon ECR로 만들어요. 구성이 완료되면 Amazon ECR 관리형 서명은 이미지가 push 될 때 이미지를 push 하는 엔터티의 자격 증명을 사용해 자동으로 서명해요.

사전 조건

관리형 서명을 구성하려면 먼저 다음이 있어야 해요.

  • Signer 서명 프로필 – 서명 프로필을 최소 하나 만들어요. 서명 프로필은 Amazon ECR에서 서명 작업을 수행하는 데 사용할 수 있는 고유한 AWS Signer 리소스예요. 서명 프로필을 사용하면 컨테이너 이미지, AWS Lambda 배포 번들 같은 코드 아티팩트에 서명하고 검증할 수 있어요. 각 서명 프로필은 서명할 서명 플랫폼, 플랫폼 ID, 그리고 기타 플랫폼별 정보를 지정해요. 예를 들어 서명 프로필 ARN은 다음과 같은 형태예요: arn:partition:signer:region:account-id:/signing-profiles/profile-name.

  • IAM 권한 – 이미지를 push 하는 IAM 프린시펄은 관련 Signer 서명 프로필과 관련 ECR 저장소에 접근할 수 있는 필요한 IAM 권한을 가져야 해요. IAM 프린시펄의 자격 증명 기반 정책에 ECR 저장소 작업과 Signer 서명 작업 양쪽의 권한을 포함하도록 수정해야 해요. 다음 예시 정책은 필요한 권한을 보여줘요.

{
   "Version": "2012-10-17",
   "Statement": [
   {
       "Sid":"UploadSignaturePermissions",
       "Effect":"Allow",
       "Action":[
           "ecr:CompleteLayerUpload",
           "ecr:UploadLayerPart",
           "ecr:InitiateLayerUpload",
           "ecr:BatchCheckLayerAvailability",
           "ecr:PutImage"
       ],
       "Resource":"arn:aws:ecr:region:account-id:repository/repository-name"
   },
   {
       "Sid": "SignPermissions",
       "Effect": "Allow",
       "Action": [
           "signer:SignPayload"
       ],
       "Resource": "arn:aws:signer:region:account-id:/signing-profiles/signing-profile-name"
   }
   ]
}

Amazon ECR 관리형 서명을 사용하면 여러 서명 규칙(레지스트리당 최대 10개)을 만들어 더 강력한 보안 경계를 구성할 수 있어요. 예를 들어 여러 빌드 파이프라인을 실행하면서 각 파이프라인이 서명할 수 있는 저장소를 제한하고 싶을 수 있어요. 각 규칙 내에서 서명 프로필을 구성하고 저장소 이름 필터를 지정해요. 새 이미지가 push 되면 Amazon ECR은 어떤 서명 규칙과 서명 프로필이 이미지에 서명할 수 있는지 매칭해요. 여러 개가 매칭되면 Amazon ECR은 여러 서명을 생성해요.

참고: 서명을 수동으로 검증한다면 여전히 Notation CLI를 설치해야 해요.

참고: Amazon ECR 관리형 서명은 AWS Signer로 컨테이너 이미지 서명을 사용할 수 있는 모든 AWS 리전에서 사용할 수 있어요.

시작하기

다음 단계에 따라 관리형 서명을 구성해요. Amazon ECR에 Signer 서명 프로필에 대한 참조와, 선택적으로 어느 저장소의 이미지에 서명할지 제한하는 필터를 제공해요.

AWS Management Console

다음 단계로 AWS Management Console을 사용해 관리형 서명을 구성해요.

  1. Amazon ECR 콘솔을 열어요. 왼쪽 탐색 창에서 프라이빗 레지스트리(Private registry), 기능 및 설정(Features & settings), 관리형 서명(Managed signing)을 선택해요.
  2. 서명 규칙(Signing rules) 페이지에서 규칙 만들기(Create rule)를 선택해요.
  3. 서명 프로필(Signing profile) 페이지의 AWS signer 프로필 선택(Select a AWS signer profile)에서 새 AWS signer 프로필 만들기(Create new AWS signer profile)를 선택하고, 프로필 이름(Profile name)을 입력하며, 선택적으로 서명 유효 기간(Signature validity period)을 변경한 뒤 다음(Next)을 선택해요.
  4. 필터(Filters) 페이지의 저장소 선택(Select repositories)에서 저장소 이름 필터(Repository name filter)를 입력한 뒤 다음(Next)을 선택해요.
  5. 검토 및 만들기(Review and create) 페이지에서 입력한 AWS Signer 프로필과 저장소 이름 필터를 확인해요. 모두 정확하면 저장(Save)을 선택해요.

AWS CLI

다음 AWS CLI 명령으로 관리형 서명을 구성해요.

서명 규칙 만들기 – 서명 프로필 ARN으로 서명 구성을 만들어요. 다음 내용의 JSON 파일을 만들어요.

{
    "rules": [ 
        { 
            "signingProfileArn": "arn:aws:signer:region:account-id:/signing-profiles/profile-name",
            "repositoryFilters": [ 
                { 
                    "filter": "test*",
                    "filterType": "WILDCARD_MATCH"
                }
            ]
        }
    ]
}

그런 다음 다음 명령을 실행해요.

aws ecr --region region \
    put-signing-configuration \
    --signing-configuration file://signing-config.json

서명 구성을 포함한 API 응답이 표시될 거예요.

서명 구성 보기 – 서명 구성을 검색해요.

aws ecr --region region \
    get-signing-configuration

서명 구성을 포함한 API 응답이 표시될 거예요.

이미지 서명 상태 확인하기 – 저장소에 이미지를 push 해요. 예를 들어:

docker pull ubuntu

IMAGE_NAME="account-id.dkr.ecr.region.amazonaws.com/repository-name"
IMAGE_TAG="${IMAGE_NAME}:test-1"

docker tag ubuntu $IMAGE_TAG
docker push $IMAGE_TAG

push 후 이미지 태그를 사용해 서명 상태를 확인해요.

aws ecr --region region \
    describe-image-signing-status \
    --repository-name repository-name \
    --image-id imageTag=test-1

저장소 이름이 서명 구성에서 정의한 저장소 필터와 일치하면 API 응답에서 서명 상태를 볼 수 있어요. 상태가 성공이면 서명이 저장소에 push 된 것을 확인할 수 있어요.

서명 구성 삭제하기 – 서명 구성을 삭제해요.

aws ecr --region region \
    delete-signing-configuration

삭제된 서명 구성을 포함한 API 응답이 표시될 거예요.

고려 사항

관리형 서명에는 다음 제한 사항과 기능이 적용돼요.

  • 교차 리전 서명은 지원되지 않아요 – 서명 프로필은 Amazon ECR 레지스트리와 같은 리전에 있어야 해요. 한 리전의 서명 프로필로 다른 리전에 있는 레지스트리의 이미지에 서명할 수 없어요.
  • 교차 계정 서명은 지원돼요 – 서명 프로필은 Amazon ECR 레지스트리와 다른 계정에 있을 수 있어요. 이렇게 하면 조직이 서명 프로필을 중앙에서 관리하면서 다른 계정의 개발자가 이를 사용할 수 있어요. 자세한 내용은 AWS Signer Developer Guide의 'Signer용 교차 계정 서명 설정'을 참고해요.
  • 서명은 서명할 수 없어요 – 서명 자체에는 서명할 수 없어요. 오직 컨테이너 이미지만 서명할 수 있어요.

더 알아보기 (Learn more)