지난 글에서 S3 버킷을 만들었는데, 모든 public 접근을 막아 두었기 때문에 DNS를 발급받지 못한 상황이다. 따라서 브라우져에서 직접 접근은 불가한 상황이다.
따라서 우선 EC2 인스턴스에서 S3 버킷에 접속하기 위해서 Endpoint를 생성하려고 한다.
[VPC 콘솔] > [Endpoints] > [Create endpoint]
Service category는 AWS services를 선택하고, 서비스는 S3로 검색을 해서 "Gateway" type을 선택해준다.
VPC는 접근하려는 EC2의 VPC ID로 선택해준 후, Route table을 선택한다.
정책을 설정하지 않으면 기본으로는 fullAccess이므로, 원하는 버킷에 대해 필요한 권한만을 열어둔다.
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "AccessToS3Bucket",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::BUCKET_NAME",
"arn:aws:s3:::BUCKET_NAME/*"
]
}
]
}
이제 버킷에서도 해당 엔드포인트에 대해 정책을 설정해줘야 한다.
[S3 console] > [Bucket 선택] > [Permission] > [Bucket policy]에서 방금 만든 엔드포인트에 대한 정책을 생성한다.
EC2에서는 https 요청으로 get요청만 보낼 예정이므로 아래와 같이 설정해주었다.
{
"Version": "2012-10-17",
"Id": "Access-to-bucket-using-specific-endpoint",
"Statement": [
{
"Sid": "Access-to-specific-VPCE-only",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": ["arn:aws:s3:::BUCKET_NAME",
"arn:aws:s3:::BUCKET_NAME/*"],
"Condition": {
"StringNotEquals": {
"aws:sourceVpce": "vpce-ID"
}
}
}
]
}
여기까지 해주면 설정이 완료된다!
이제 S3 콘솔에서 직접 업로드 한 뒤에, EC2 인스턴스에 접속해서 해당 객체를 요청해서 연결이 제대로 되었는지 확인해보겠다.
wget 요청 결과 성공!