특정 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 를 활용한 방법도 알아보면 좋을 것 같다.

 


이것도 읽어보세요