s3 주소로는 접속을 못하게 막고, cloudfront 혹은 할당한 주소만 접근을 하게 했으면 좋겠다.
우선 퍼블릭으로 설정된 s3 보안 설정을 막고, origin access identity(OAI)를 설정해서 오리진 접속을 차단하도록하자.
OAI는 또 무엇인가? CloudFront가 제한된 S3 객체에 액세스 할 수 있도록 허용하는 CloudFront 관련 설정이다.
이는 인증된 사용자만 S3의 프라이빗 콘텐츠에 액세스 할 수 있도록 서명된 URL 또는 서명된 쿠키를 사용할 때 유용하다.
일반적으로 배포를 만들거나 오리진 내부를 수정할 때 OAI를 만듭니다.
1. S3 퍼블릭 우선 열기
정책 수정도 해야하고 일단 퍼블릭 액세스 모두 열어둡시다. 마지막 단계에서 확인 후 다시 닫을 겁니다.
OAI 생성 후 CloudFront Distribution 정책 수정하기
세팅하려는 CloudFront 좌측의 Origin access identity를 눌러 OAI를 설정해봅시다.
좀 허무하게 OAI가 생성되었습니다. 여기에 제공된 ID와 Canonical User ID 둘 다 필요합니다.
이 녀석을 기존의 CloudFront 설정은 Origin and Origin Group에서 설정해줄 수 있고, 새로 생성한다면 생성하면서 설정해줄 수 있습니다.
기본적으로 Origin Domain Name을 주면, Origin ID가 자동으로 주어지는데, 이 값을 지우고 생성한 OAI의 ID 를 넣어주어야 합니다.
S3 버킷 정책 수정하기
이제 s3 에 자체 정책을 설정을 해야 합니다.
Public 만 사용했다면 일단 기본 정책 먼저 만들도록 합시다.
ARN은 대상 버킷/[keyname] 꼴로 입력하여 어떤 버킷의 어떤 객체에 해당 정책을 적용할 것인지를 명시해주고
어차피 S3 웹에 들어오는 동작만 할 것이므로 action은 일단 "Action": "s3:GetObject",만 허용해주도록하겠다.
아래와 같은 결과물을 받을 수 있다
{
"Version": "2012-10-17",
"Id": "Policy1618219234446",
"Statement": [
{
"Sid": "Stmt1618219230742",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::[bucket]/*"
}
]
}
자, 여기서 principal을 수정해봅시다.
"Principal": {"CanonicalUser":"Amazon S3 Canonical User ID"} 로 수정합니다.
{
"Version": "2012-10-17",
"Id": "Policy1618226172547",
"Statement": [
{
"Sid": "Stmt1618226168042",
"Effect": "Allow",
"Principal": {"CanonicalUser":"89d515b19beec07bc5220b2aa27717b5c2ffe8a7e7ed8e07eaafa74543ac277d838b939037ec75c57134c5b347df1d0f"},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::serverless-kanban/*"
}
]
}
등로하면 아래와 같은 정책으로 변경됩니다.
{
"Version": "2012-10-17",
"Id": "Policy1618219234446",
"Statement": [
{
"Sid": "Stmt1618219230742",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E1WQAH3X6CKE22"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::[bucket]/*"
}
]
}
이제 S3 public 설정을 모두 닫습니다.
아래와 같이 S3의 퍼블릭 액세스를 모두 차단했다.
s3 정적 웹 호스팅 주소로 들어가면 이제 403 코드를 받을 것이다.
반면 cloudfront로 접근하면 정상적인 접근이 된다!
reference)
cli로만 진행하고 싶다면 아래 글을 참고해보자.
dev.classmethod.jp/articles/aws-cli-cloudfront-oai-kr/
'AWS > ☁️ AWS' 카테고리의 다른 글
cloudwatch를 활용한 대시보드 만들기 (0) | 2021.04.14 |
---|---|
DynamoDB 간단히 사용해보기 (0) | 2021.04.09 |
AWS EC2 .pem key 없이 유저-암호 방식 접근 허용 (2) | 2020.11.09 |
React 앱을 S3로 배포 + CloudFront + Route 53 + ACM SSL 인증 (0) | 2020.09.08 |
eb-cli을 이용한 EB 배포하기 (0) | 2020.08.15 |