본문 바로가기

Server Infra/Security

S3 Block all public access 상태에서 Object를 접근 해보자

728x90

보안 스터디를 하면서 사용 하는 계정이 회사의 정책으로 Public 하게 오픈하면 아주 혼나는 상황이기에 매우 당황스러웠다. 그래서 Block all public access가 활성화 되어 있는 상태에서 Object를 보다 안전하게 접근하는 방법을 간략하게 설명하려 한다.

 

참고로 이 방법은 CloudFront와 Route53을 이용한다. 또한 Public DNS가 필요하다. 보안을 위한 일이라 기존에 구매했던 Domain을 연장했다(참고로 나름 마음에 들어서 점유하고 있을 예정이다).

DNS는 위와 같이 구매해서 이미 Route53에 등록 해 놓았다. 이제 S3를 생성하고 CloudFront를 연결해보자.

S3또한 생성하였다. 여기서 Block Public Access settings for this bucket의 Block all public access는 활성화 하여 public access는 전부 제한하였다.

 

다음은 CloudFront 생성인데 사전에 Origin Access Control을 만들어 주어야 한다. OAI였는데 OAC로 변경 되었다.

다음은 CloudFront Distrubutions을 배포해야 한다. CloudFront 콘솔로가 distributions을 생성하자. 이때 origin을 S3로 설정하고 위에서 생성한 S3 Bucket을 지정해 주고 origin access control을 이전에 생성한 oac로 설정해 주면된다.

생성이 완료 되면 bucket에 oac를 활용해서 bucket에 접근할 수 있도록 bucket의 Policy를 설정해 주어야 한다. 이건 생성된 CloudFront Distrubutions의 origin으로 가서 보면 아래의 그림처럼 oac를 설정하며 bucket policy sample code를 제공한다. 활용하도록 하자.

복사를 하면 아래와 같은 policy가 만들어진다.

{
    "Version": "2008-10-17",
    "Id": "PolicyForCloudFrontPrivateContent",
    "Statement": [
        {
            "Sid": "AllowCloudFrontServicePrincipal",
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudfront.amazonaws.com"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::bucket name/*",
            "Condition": {
                "StringEquals": {
                  "AWS:SourceArn": "arn:aws:cloudfront::account number:distribution/oac id"
                }
            }
        }
    ]
}

자 그러면 test.txt를 만들어서 업로드 한뒤 호출해보자

잘 나온다. 이제 난 회사의 버킷 정책도 지키면서 파일을 업로드 하고 다운받을 수 있게 되었다.

 

Reference 

728x90