특정 IP 에서만 S3 접근 허가하기
이 글에서는 특정 IP에서만 AWS S3 버킷에 접근하도록 설정하는 방법, 버킷 정책 및 CORS 구성 예시를 통해 자세히 안내합니다.
피스오브무드 프로젝트에서, static file 들은 S3 에서 관리하고 있다.
(WEB/WAS 서버에서 AWS S3 파일들로 요청을 날리는 형식)
S3 를 CDN 서버로 사용할 경우, AWS Cloudfront 를 이용하여 보안을 설정해야 하는 것이 best practice 라고 알려져 있다.
개발 단계에서는 S3 의 static file 접근 권한을 public 으로 설정해 두었지만,
운영 단계에 들어감에 따라, WEB/WAS 서버에서만 접근을 허용하게 설정을 변경하였다.
AWS 공식 문서를 찾아보니, S3 bucket 에서 JSON 형식으로 권한을 설정할 수 있다고 나온다.
https://aws.amazon.com/ko/premiumsupport/knowledge-center/s3-aws-ip-addresses-access/
버킷 설정 화면 > 권한 > 버킷 정책
버킷 설정 화면 > 권한 > CORS 구성
위의 두 메뉴에서 접근 권한을 설정해 주면 된다.
1. 버킷 정책 예시
{
"Version": "2012-10-17",
"Id": "S3PolicyId1",
"Statement": [
{
"Sid": "IPAllow",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::pieceofmoodpdf/*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": "0.0.0.0/32"
},
"IpAddress": {
"aws:SourceIp": "*.*.*.*/24"
}
}
}
]
}
2. CORS 구성 예시
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
위의 예시에서는 GET, POST, PUT, HEAD 모두 허용해 주었지만,
용도에 맞게 설정해서 사용하면 될 듯 하다.
AWS Cloudfront 를 활용한 방법도 알아보면 좋을 것 같다.
이것도 읽어보세요