Amazon ECR에서 이미지 태그 덮어쓰기 방지하기

Amazon ECR에서 이미지 태그 덮어쓰기 방지하기

Amazon ECR 저장소에서 이미지 태그가 실수로 덮어써지는 것을 막고 싶다면 태그 불변성(tag immutability)을 켜면 돼요. 태그 불변성을 켜면, 이미 저장소에 있는 태그로 이미지를 다시 push 하려고 할 때 ImageTagAlreadyExistsException 오류가 반환돼요. 태그 불변성은 모든 태그에 적용되기 때문에, 일부 태그만 불변으로 두고 나머지는 가변으로 둘 수는 없어요.

출처: 문서

본문

Amazon ECR은 AWS Management Console과 AWS CLI 도구를 사용해서 새 저장소나 기존 저장소의 이미지 태그 불변성을 설정할 수 있게 해줘요. 콘솔 단계로 저장소를 만드는 방법은 'Amazon ECR 프라이빗 저장소를 만들어 이미지 저장하기' 문서를 참고하면 돼요.

이미지 태그 불변성 설정 (AWS Management Console)

이미지 태그 불변성을 설정하려면 Amazon ECR 콘솔을 https://console.aws.amazon.com/ecr/repositories 에서 열어요.

  1. 탐색 모음에서 편집할 저장소가 있는 리전을 선택해요.
  2. 탐색 창의 프라이빗 레지스트리(Private registry) 아래에서 저장소(Repositories)를 선택해요. 저장소(Repositories)가 보이지 않으면 프라이빗 레지스트리(Private registry)를 선택해 메뉴를 펼친 뒤 저장소(Repositories)를 선택해요.
  3. 프라이빗 저장소(Private repositories) 페이지에서 이미지 태그 불변성 설정을 적용할 저장소 이름 앞의 라디오 버튼을 선택해요.
  4. 작업(Actions)을 선택한 다음 편집(Edit) 아래의 저장소(Repository)를 선택해요.
  5. 이미지 태그 불변성(Image tag immutability)에서 저장소에 적용할 다음 태그 불변성 설정 중 하나를 선택해요.
  • 가변(Mutable) – 이미지 태그가 덮어써지는 것을 허용하고 싶을 때 선택해요. 풀 스루 캐시(pull through cache) 작업을 사용하는 저장소라면 Amazon ECR이 캐시된 이미지를 갱신할 수 있도록 이 옵션을 권장해요. 추가로, 몇몇 가변 태그의 태그 갱신을 비활성화하고 싶다면 가변 태그 제외(Mutable tag exclusion) 텍스트 상자에 태그 이름을 입력하거나 와일드카드(*)를 사용해 비슷한 태그 여러 개를 매칭할 수 있어요.
  • 불변(Immutable) – 이미지 태그가 덮어써지는 것을 막고 싶을 때 선택해요. 이 설정은 이미지 push 시 저장소의 모든 태그와 제외 항목에 적용돼요. 기존에 있는 태그로 이미지를 push 하려고 하면 Amazon ECR은 ImageTagAlreadyExistsException을 반환해요. 추가로, 몇몇 불변 태그의 태그 갱신을 허용하고 싶다면 불변 태그 제외(Immutable tag exclusion) 텍스트 상자에 태그 이름을 입력하거나 와일드카드(*)를 사용해 비슷한 태그 여러 개를 매칭할 수 있어요.
  1. 이미지 스캔 설정(Image scan settings)에서는 기본 스캐닝에 대해 저장소 수준에서 스캔 설정을 지정할 수는 있지만, 스캔 구성은 프라이빗 레지스트리 수준에서 지정하는 것이 모범 사례예요. 프라이빗 레지스트리 수준에서 스캔 설정을 지정하면 향상된 스캐닝(enhanced scanning)이나 기본 스캐닝(basic scanning)을 활성화하고, 어떤 저장소를 스캔할지 지정하는 필터를 정의할 수 있어요. 자세한 내용은 'Amazon ECR에서 소프트웨어 취약점을 위해 이미지 스캔하기' 문서를 참고해요.
  2. 암호화 설정(Encryption settings)은 저장소 생성 후에는 변경할 수 없기 때문에 보기 전용 필드예요.
  3. 저장(Save)을 선택해 저장소 설정을 갱신해요.

이미지 태그 불변성 설정 (AWS CLI)

불변 태그가 구성된 저장소 만들기

다음 명령 중 하나를 사용해서 불변 태그가 구성된 새 이미지 저장소를 만들어요.

create-repository (AWS CLI) – 이미지 태그 불변성 포함:

aws ecr create-repository --repository-name name --image-tag-mutability IMMUTABLE --region us-east-2

create-repository (AWS CLI) – 이미지 태그 불변성 제외 필터 포함:

aws ecr create-repository --repository-name name --image-tag-mutability IMMUTABLE_WITH_EXCLUSION --image-tag-mutability-exclusion-filters filterType=WILDCARD,filter=filter-text --region us-east-2

New-ECRRepository (AWS Tools for Windows PowerShell) – 이미지 태그 불변성 포함:

New-ECRRepository -RepositoryName name -ImageTagMutability IMMUTABLE -Region us-east-2 -Force

New-ECRRepository (AWS Tools for Windows PowerShell) – 이미지 태그 불변성 제외 필터 포함:

New-ECRRepository -RepositoryName name -ImageTagMutability IMMUTABLE_WITH_EXCLUSION -ImageTagMutabilityExclusionFilter @{FilterType=WILDCARD Filter=filter-text} -Region us-east-2 -Force

저장소의 이미지 태그 불변성 설정 갱신하기

다음 명령 중 하나를 사용해서 기존 저장소의 이미지 태그 불변성 설정을 갱신해요.

put-image-tag-mutability (AWS CLI) – 이미지 태그 불변성 포함:

aws ecr put-image-tag-mutability --repository-name name --image-tag-mutability IMMUTABLE --region us-east-2

put-image-tag-mutability (AWS CLI) – 이미지 태그 불변성 제외 필터 포함:

aws ecr put-image-tag-mutability --repository-name name --image-tag-mutability IMMUTABLE_WITH_EXCLUSION --image-tag-mutability-exclusion-filters filterType=WILDCARD,filter=latest --region us-east-2

Write-ECRImageTagMutability (AWS Tools for Windows PowerShell) – 이미지 태그 불변성 포함:

Write-ECRImageTagMutability -RepositoryName name -ImageTagMutability IMMUTABLE -Region us-east-2 -Force

Write-ECRImageTagMutability (AWS Tools for Windows PowerShell) – 이미지 태그 불변성 제외 필터 포함:

Write-ECRImageTagMutability -RepositoryName name -ImageTagMutability IMMUTABLE_WITH_EXCLUSION -ImageTagMutabilityExclusionFilter @{FilterType=WILDCARD Filter=latest}

더 알아보기 (Learn more)