Amazon VPC를 사용하면 논리적으로 분리된 가상 네트워크인 Virtual Private Cloud(VPC)를 정의할 수 있다.
VPC에서 AWS 리소스를 시작할 수 있고 VPC의 리소스에서 외부의 리소스에 연결하도록 허용할 수 있다.
여기서는 Private Subnet의 ECS 인스턴스에서 ECR에 접근하여 이미지를 가져올 수 있도록 하는 것을 목표로 한다.
Security Group 단계를 수행하지 않았다면 보안 그룹 생성을 마치고 와주세요.
AWS PrivateLink 개념 - Amazon Virtual Private Cloud
Amazon ECR 인터페이스 VPC 엔드포인트(AWS PrivateLink) - Amazon ECR
Amazon ECS와 Amazon ECR의 AWS PrivateLink 설정 방법 | Amazon Web Services
문서에도 써있지만 Endpoint에 설정한 보안 그룹은 443 포트 인바운드를 열어주어야 한다.
dev-sg-ecs-nestjs-guide-api
의 443 포트 인바운드 규칙을 편집하자.
VPC 에서 dev-vpc
의 CIDR을 10.0.0.0/16
으로 하였으니 소스를 VPC로 한정해주자.
[VPC] - [Endpoint] 에서 [엔드포인트 생성] 버튼을 누른다.
[이름 태그] 는 dev-endpoint-head-ecr-api
로 정했다.
[서비스 범주] 는 [AWS 서비스] 로 한다.
[서비스] 에서 ecr
로 검색해서 아래 두 가지 서비스에 대해 엔드포인트를 만들어야 한다.
중복 선택이 되지 않으므로 엔드포인트 2개를 생성해야 한다.
[VPC] 는 앞서 만든 dev-vpc
를 선택했다.
[DNS 이름 활성화] 는 자동으로 선택되어 있어서 일단 켜두었다.
이미지의 설명대로 **[VPC]**에서 [DNS 호스트 이름 활성화] 및 [DNS 지원 활성화] 를 켜주어야 한다.
[서브넷] 은 각 AZ마다 Private Subnet을 선택해준다.
[보안 그룹] 은 dev-sg-ecs-nestjs-guide-api
를 선택했다.
[정책] 이 이미지 아래쪽에 또 있는데 여기서는 따로 설정하지 않는다.
아마 보안을 위해 나중에는 설정하면 좋을 것 같지만, 지금은 거기까지 안해도 될 듯 하다.
[엔드포인트 생성] 버튼을 눌러서 마무리하고, dkr
을 위해 하나 더 생성하자.
최종적으로는 다음과 같이 될 것이다.
처음에는 [상태] 가 [대기 중] 이니 잠시 활성화를 기다렸다가 사용하자.
Amazon ECR은 S3에 이미지 계층을 저장하기 때문에 게이트웨이 엔드포인트가 필요하다.
[이름 태그] 는 dev-endpoint-head-s3
로 정했다.
[서비스 범주] 는 [AWS 서비스] 로 한다.
[서비스] 에서 s3
로 검색하여 com.amazonaws.ap-northeast-2.s3
를 선택한다.
[유형] 이 [Gateway] 인 것을 선택하라.
[라우팅 테이블] 은 Private의 것을 선택했다.
[정책] 설정으로 보안을 높이는데, 문서를 따라 넣었다.
{
"Statement": [
{
"Sid": "Access-to-specific-bucket-only",
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::prod-region-starport-layer-bucket/*"
]
}
]
}