주니어 개발자 1호

S3 CloudFront에 의한 접근 정책 설정 본문

Server 관련

S3 CloudFront에 의한 접근 정책 설정

No_1 2023. 6. 21. 21:23

 

s3 url을 통해 접근을 못하게 함으로써 리소스비용, 위험부담을 줄이고

cloudfront를 통해서만 content가 보이게 하는 방법을 소개하고자 해요.
보안적인 면과 비용 문제를 잘 파악한 뒤에 구성하시면 좋겠어요.

주 순서는 아래와 같아요.

 

S3 생성

  • ACL 비활성화
  • 퍼블릭 액세스 차단

CloudFront 생성

  • 원본 액세스에 대해 "원본 액세스 제어 설정" 으로 설정
  • Origin access control 생성

S3 정책 업데이트

  • 버킷 정책을 JSON으로 업데이트

주 오류 사항

cloudfront로 접근 시 access denied 오류가 발생하는 사유는 아래와 같아요.

  • CloudFront에서 "원본 액세스 제어 설정" 설정 누락
  • S3 정책 업데이트 누락 ( CloudFront의 권한이 없음 )

 

S3 생성

S3를 만들 때 주요 설정 포인트들 공유할게요.

1. ACL 비활성화 

2. 퍼블릭 액세스 차단

 

이는, 버킷을 AWS 정책을 통해 권한 관리를 함으로써 AWS 정책에 따라 접근할 수 있도록 해요.

 

퍼블릭 액세스를 차단해요. public access를 허용해두면 설정에 따라 다른 계정의 사람도 bucket 이름 만 알면 들어와서 제어가 가능해요. 이는 알고싶지..않았지만. 경험을 통해 알게되었어요.

 

CloudFront 생성

cloudfront를 생성할 때 중요한 점을 안내할게요.

1. 원본 액세스 제어 설정

2. Origin access control 생성

 

원본 액세스에 대해 "원본 액세스 제어 설정"을 클릭해줘요

그리고 오른쪽의 제어 설정 생성을 통해 간단한 설명과 생성을 해줘요.

 

이후 필요한 설정을 마치고 CloudFront을 생성을 해주시면, 그때 S3 버킷에 대한 정책이 표시되어요. 

{
    "Version": "2008-10-17",
    "Id": "PolicyForCloudFrontPrivateContent",
    "Statement": [
        {
            "Sid": "AllowCloudFrontServicePrincipal",
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudfront.amazonaws.com"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::[버킷 주소]/*",
            "Condition": {
                "StringEquals": {
                    "AWS:SourceArn": "CloudFrontd의 ARN이에요. 배포된 CloudFront를 클릭 후 세부정보의 ARN을 복사해주시면 됩니다."
                }
            }
        }
    ]
}

이런 형식으로 구성이 되어 있어요. [버킷 주소]와 AWS:SourceArn 을 적절한 값으로 채워주시면 되지만. 

 

아래 사진의 보기를 통해 쉽게 복사할 수 있어요.

1. CloudFront 클릭 후, 위의 탭에서 원본에 들어가주어요.

2. 이후 원본 왼쪽 체크박스를 클릭해요.

3. "편집"을 클릭해주세요. 이는 오른쪽 "원본 생성"버튼의 제일 왼쪽에 있어요.

 

 

1. 제일 아래의 정책 복사를 클릭해서 클립보드에 복사해주세요.

2. 아래의 S3 버킷 권한으로 이동을 클랙해주세요.

 

1. 버킷 정책을 찾아 편집을 클릭해주세요.

2. 복사한 내용을 붙여넣기하고 저장해주세요.

 

 

모든 설정이 다 되었어요!

 

https://[내 CDN 주소]/[S3경로]/[파일명] 를 통해 CDN을 사용하실 수 있어요!

 

^__^ ( 대충, 클라우드 프론트 이용해서 이미지보기 성공했다는 사진. )