Amazon ECS에서 Amazon ECR 이미지 사용하기
Amazon ECS에서 Amazon ECR 이미지 사용하기
Amazon ECS 태스크가 pull 해올 수 있도록 Amazon ECR 프라이빗 저장소에 컨테이너 이미지와 아티팩트를 호스팅할 수 있어요. 이를 위해서는 Amazon ECS 또는 Fargate 컨테이너 에이전트가 ecr:BatchGetImage, ecr:GetDownloadUrlForLayer, ecr:GetAuthorizationToken API를 호출할 권한을 가져야 해요.
출처: 문서
본문
필요한 IAM 권한
다음 표는 태스크가 Amazon ECR 프라이빗 저장소에서 pull 하기 위해 필요한 권한을 제공하는, 실행 유형별 IAM 역할을 보여줘요. Amazon ECS는 필요한 권한을 포함하는 관리형 IAM 정책을 제공해요.
| 실행 유형 | IAM 역할 | AWS 관리형 IAM 정책 |
|---|---|---|
| Amazon EC2 인스턴스의 Amazon ECS | Amazon ECS 클러스터에 등록된 Amazon EC2 인스턴스와 연결된 컨테이너 인스턴스 IAM 역할을 사용해요. 자세한 내용은 Amazon Elastic Container Service Developer Guide의 '컨테이너 인스턴스 IAM 역할'을 참고해요. | AmazonEC2ContainerServiceforEC2Role – 자세한 내용은 Amazon Elastic Container Service Developer Guide의 AmazonEC2ContainerServiceforEC2Role을 참고해요. |
| Fargate의 Amazon ECS | Amazon ECS 태스크 정의에서 참조하는 태스크 실행 IAM 역할을 사용해요. 자세한 내용은 Amazon Elastic Container Service Developer Guide의 '태스크 실행 IAM 역할'을 참고해요. | AmazonECSTaskExecutionRolePolicy – 자세한 내용은 Amazon Elastic Container Service Developer Guide의 AmazonECSTaskExecutionRolePolicy를 참고해요. |
| 외부 인스턴스의 Amazon ECS | Amazon ECS 클러스터에 등록된 온프레미스 서버 또는 가상 머신(VM)과 연결된 컨테이너 인스턴스 IAM 역할을 사용해요. 자세한 내용은 Amazon Elastic Container Service Developer Guide의 '컨테이너 인스턴스 Amazon ECS 역할'을 참고해요. | AmazonEC2ContainerServiceforEC2Role – 자세한 내용은 Amazon Elastic Container Service Developer Guide의 AmazonEC2ContainerServiceforEC2Role을 참고해요. |
중요: AWS 관리형 IAM 정책에는 사용 사례에서 필요하지 않은 추가 권한이 포함될 수 있어요. 이 경우, 위 권한들이 Amazon ECR 프라이빗 저장소에서 pull 하기 위한 최소 필수 권한이에요.
JSON:
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecr:BatchGetImage",
"ecr:GetDownloadUrlForLayer",
"ecr:GetAuthorizationToken"
],
"Resource": "*"
}
]
}
Amazon ECS 태스크 정의에서 Amazon ECR 이미지 지정하기
Amazon ECS 태스크 정의를 만들 때 Amazon ECR 프라이빗 저장소에 호스팅된 컨테이너 이미지를 지정할 수 있어요. 태스크 정의에서는 Amazon ECR 이미지에 대해 전체 registry/repository:tag 명명 규칙을 사용해야 해요. 예를 들어 aws_account_id.dkr.ecr.region.amazonaws.com/my-repository:latest처럼요.
다음 태스크 정의 스니펫은 Amazon ECS 태스크 정의에서 Amazon ECR에 호스팅된 컨테이너 이미지를 지정하는 구문을 보여줘요.
{
"family": "task-definition-name",
...
"containerDefinitions": [
{
"name": "container-name",
"image": "aws_account_id.dkr.ecr.region.amazonaws.com/my-repository:latest",
...
}
],
...
}