업스트림 레지스트리를 Amazon ECR 프라이빗 레지스트리와 동기화하기
업스트림 레지스트리를 Amazon ECR 프라이빗 레지스트리와 동기화하기 (Sync an upstream registry with an Amazon ECR private registry)
풀 스루 캐시 규칙(pull through cache rules)을 사용하면 업스트림 레지스트리의 콘텐츠를 Amazon ECR 프라이빗 레지스트리와 동기화할 수 있어요. 인증이 필요한 업스트림 레지스트리는 AWS Secrets Manager 시크릿이나 IAM 역할을 사용해 자격 증명을 관리해요.
출처: 문서
본문
풀 스루 캐시 규칙을 사용해 업스트림 레지스트리의 콘텐츠를 Amazon ECR 프라이빗 레지스트리와 동기화할 수 있어요. Amazon ECR은 현재 다음 업스트림 레지스트리에 대한 풀 스루 캐시 규칙 생성을 지원해요.
- Amazon ECR Public, Kubernetes 컨테이너 이미지 레지스트리, Quay (인증 불필요)
- Docker Hub, Microsoft Azure Container Registry, GitHub Container Registry, GitLab Container Registry, Chainguard Registry (AWS Secrets Manager 시크릿으로 인증 필요)
- Amazon ECR (AWS IAM 역할로 인증 필요)
GitLab Container Registry의 경우 Amazon ECR은 GitLab의 Software as a Service(SaaS) 제공 형태로만 풀 스루 캐시를 지원해요. GitLab.com 사용에 대한 자세한 내용은 GitLab.com 문서를 참고하세요. Docker Hub처럼 시크릿 인증이 필요한 업스트림 레지스트리는 자격 증명을 AWS Secrets Manager 시크릿에 저장해야 해요. Amazon ECR 콘솔을 사용해 각 인증 업스트림 레지스트리용 Secrets Manager 시크릿을 만들 수 있어요. 업스트림 레지스트리 자격 증명을 Secrets Manager 시크릿에 저장하는 방법은 "Storing your upstream repository credentials in an AWS Secrets Manager secret"을 참고하세요. Amazon ECR의 경우 업스트림과 다운스트림 Amazon ECR 레지스트리가 서로 다른 AWS 계정에 속해 있으면 IAM 역할을 만들어야 해요. IAM 역할 생성에 대한 자세한 내용은 "IAM policies required for cross-account ECR to ECR pull through cache"를 참고하세요.
업스트림 레지스트리에 대한 풀 스루 캐시 규칙을 만든 후에는 Amazon ECR 프라이빗 레지스트리 URI를 사용해 해당 업스트림 레지스트리에서 이미지를 풀해요. 그러면 Amazon ECR이 레포지토리를 만들고 그 이미지를 프라이빗 레지스트리에 캐시해요. 특정 태그가 있는 캐시된 이미지에 대한 이후 풀 요청이 있을 때 Amazon ECR은 업스트림 레지스트리에서 해당 태그를 가진 이미지의 새 버전이 있는지 확인하고, 적어도 24시간마다 한 번은 프라이빗 레지스트리의 이미지를 업데이트하려고 시도해요.
레포지토리 생성 템플릿 (Repository creation templates)
Amazon ECR은 레포지토리 생성 템플릿을 지원해요. 이를 통해 풀 스루 캐시 규칙을 사용해 Amazon ECR이 대신 새 레포지토리를 만들 때 적용할 초기 구성을 지정할 수 있어요. 각 템플릿에는 새 레포지토리를 특정 템플릿에 매칭하는 데 사용되는 레포지토리 네임스페이스 접두사가 포함돼요. 템플릿은 리소스 기반 액세스 정책, 태그 불변성, 암호화, 수명 주기 정책을 포함한 모든 레포지토리 설정의 구성을 지정할 수 있어요. 레포지토리 생성 템플릿의 설정은 레포지토리 생성 중에만 적용되며 기존 레포지토리나 다른 방법으로 만든 레포지토리에는 영향을 주지 않아요. 자세한 내용은 "Templates to control repositories created during a pull through cache, create on push, or replication action"을 참고하세요.
풀 스루 캐시 규칙 사용 시 고려 사항 (Considerations for using pull through cache rules)
Amazon ECR 풀 스루 캐시 규칙을 사용할 때 다음 사항을 고려하세요.
- AWS Lambda는 풀 스루 캐시 규칙을 사용해 Amazon ECR에서 컨테이너 이미지를 가져오는 것을 지원하지 않아요.
- 풀 스루 캐시를 사용해 이미지를 풀할 때 Amazon ECR FIPS 서비스 엔드포인트는 이미지가 처음 풀될 때는 지원되지 않아요. 이후 풀에서는 Amazon ECR FIPS 서비스 엔드포인트를 사용할 수 있어요.
- 인증이 필요한 업스트림 레포지토리의 경우, 이미지가 Amazon ECR 프라이빗 레지스트리 URI를 통해 처음 풀되거나 캐시를 업데이트할 때 이미지 풀은 풀 스루 캐시 규칙에 구성된 자격 증명과 연결된 사용자에 의해 시작돼요. 이후 풀은 고객 프라이빗 레지스트리의 캐시에서 직접 이미지를 반환해요.
- 인증이 필요하지 않은 업스트림 레포지토리의 경우, Amazon ECR 프라이빗 레지스트리 URI를 통해 이미지를 풀할 때 이미지 풀은 AWS IP 주소에 의해 시작돼요.
- 고객이 Amazon ECR 프라이빗 레지스트리 URI를 통해 캐시된 이미지를 풀할 때 Amazon ECR은 최근 24시간 이내에 해당 이미지를 업스트림 레지스트리와 검증했는지 확인해요. 24시간 창이 만료되면 Amazon ECR은 더 새로운 버전이 있는지 확인하기 위해 업스트림에 요청을 보내고 존재하면 캐시를 업데이트해요. 창이 만료되지 않았다면 Amazon ECR은 업스트림에 접촉하지 않고 캐시된 이미지를 제공해요.
- 풀 스루 캐시로 생성된 레포지토리에 ListImageReferrers API를 호출하면 프라이빗 캐시에 OCI 규격의 referrer 아티팩트를 반환해요.
- Amazon ECR은 referrer 아티팩트가 최근 6시간 이내에 업데이트되었는지 확인해요. 6시간 창이 만료되면 Amazon ECR은 더 새로운 버전이 있는지 확인하기 위해 업스트림에 요청을 보내고 존재하면 캐시를 업데이트해요.
- Amazon ECR이 어떤 이유로든 업스트림 레지스트리에서 이미지를 업데이트하지 못하고 이미지가 풀되면 마지막 캐시 이미지가 여전히 풀돼요.
- 업스트림 레지스트리 자격 증명이 포함된 Secrets Manager 시크릿을 만들 때 시크릿 이름은 ecr-pullthroughcache/ 접두사를 사용해야 해요. 또한 시크릿은 풀 스루 캐시 규칙이 생성된 것과 동일한 계정과 리전에 있어야 해요.
- 멀티 아키텍처 이미지가 풀 스루 캐시 규칙을 사용해 풀되면 매니페스트 목록과 매니페스트 목록에 참조된 각 이미지가 Amazon ECR 레포지토리로 풀돼요. 특정 아키텍처만 풀고 싶다면 매니페스트 목록과 연관된 태그 대신 해당 아키텍처와 연관된 이미지 다이제스트나 태그로 이미지를 풀 수 있어요.
- Amazon ECR은 서비스 연결 IAM 역할(service-linked IAM role)을 사용해요. 이 역할은 Amazon ECR이 레포지토리를 만들고, 인증을 위해 Secrets Manager 시크릿 값을 검색하며, 캐시된 이미지를 대신 푸시하는 데 필요한 권한을 제공해요. 서비스 연결 IAM 역할은 풀 스루 캐시 규칙이 생성될 때 자동으로 생성돼요. 자세한 내용은 "Amazon ECR service-linked role for pull through cache"를 참고하세요.
- 기본적으로 캐시된 이미지를 풀하는 IAM 프린시펄은 IAM 정책을 통해 부여된 권한을 가져요. Amazon ECR 프라이빗 레지스트리 권한 정책을 사용해 IAM 엔터티의 권한을 더 세분화할 수 있어요. 자세한 내용은 "Using registry permissions"을 참고하세요.
- 풀 스루 캐시 워크플로우를 사용해 생성된 Amazon ECR 레포지토리는 다른 Amazon ECR 레포지토리처럼 취급돼요. 복제, 이미지 스캔 같은 모든 레포지토리 기능이 지원돼요.
- Amazon ECR이 풀 스루 캐시 액션으로 대신 새 레포지토리를 만들 때, 매칭되는 레포지토리 생성 템플릿이 없으면 다음 기본 설정이 레포지토리에 적용돼요. 레포지토리 생성 템플릿을 사용해 Amazon ECR이 대신 만드는 레포지토리에 적용할 설정을 정의할 수 있어요.
- 태그 불변성(Tag immutability) – 이미지 태그를 덮어쓸 수 있는지 여부를 지정해요. 기본적으로 이미지 태그는 변경 가능(mutable, 덮어쓸 수 있음)해요. Mutable이 선택된 경우 Mutable tag exclusion 텍스트 상자에서, Immutable이 선택된 경우 Immutable tag exclusion 텍스트 상자에서 태그 제외 필터를 구성해 태그 동작을 수정할 수 있어요.
- 암호화(Encryption) – 기본 AES256 암호화가 사용돼요.
- 레포지토리 권한(Repository permissions) – 생략됨, 레포지토리 권한 정책이 적용되지 않아요.
- 수명 주기 정책(Lifecycle policy) – 생략됨, 수명 주기 정책이 적용되지 않아요.
- 리소스 태그(Resource tags) – 생략됨, 리소스 태그가 적용되지 않아요.
- 풀 스루 캐시 규칙을 사용하는 레포지토리에 이미지 태그 불변성을 켜면 Amazon ECR이 동일한 태그로 이미지를 업데이트하지 못하게 돼요.
- 풀 스루 캐시 규칙을 사용해 이미지가 처음 풀될 때 인터넷 경로가 필요할 수 있어요. 인터넷 경로가 필요한 특정 상황이 있으므로 실패를 피하려면 경로를 설정하는 것이 좋아요. 따라서 AWS PrivateLink를 사용해 Amazon ECR을 인터페이스 VPC 엔드포인트로 구성했다면 첫 번째 풀이 인터넷 경로를 가지도록 해야 해요. 이를 위해 같은 VPC에 인터넷 게이트웨이가 있는 퍼블릭 서브넷을 만들고 프라이빗 서브넷의 모든 아웃바운드 트래픽을 퍼블릭 서브넷으로 라우팅할 수 있어요. 이후 풀 스루 캐시 규칙을 사용한 이미지 풀에는 이렇게 할 필요가 없어요. 자세한 내용은 Amazon Virtual Private Cloud 사용 설명서의 "Example routing options"을 참고하세요.
- 풀 스루 캐시 레포지토리에 이미지를 직접 푸시하는 것은 지원되지 않아요. 이렇게 하면 이후 이미지 풀이 새로 푸시된 이미지 대신 이전에 캐시된 버전을 계속 반환하는 일시적 불일치가 발생할 수 있어요. 이 불일치를 해결하려면 이미지를 삭제한 다음 다시 풀어 캐시된 복사본을 새로 고쳐야 해요. 또는 캐시가 새로 고쳐질 때까지 최대 24시간 기다린 다음 이미지를 다시 풀수 있어요.