개발 학습일지(TIL)

AWS S3 - CloudFront 빠른 설정 방법 (+access denied 해결)

Veams 2024. 2. 13.

현재 개발중인 토이프로젝트에 파일 관리(업로드 및 다운로드) 기능을 개발하는 상황이다.

파일 저장소로는 S3 버킷을 사용하려고 한다. 추가로, CloudFront의 CDN을 통해 컨텐츠를 효율적으로 전달할 수 있게 한다.

 

즉, CloudFront의 CDN은 컨텐츠를 원본 서버에 받아와서 캐싱을 해두고, 해당 자원에 대한 요청이 들어오면 캐싱된 컨텐츠를 제공하여 좀 더 빠른 컨텐츠를 제공할 수 있게 돕는다.

 

 

목차

1. S3 버킷 생성

2. CloudFront 배포 생성

3. S3 버킷 정책 설정 (access denied) 

4. 파일 업로드 후 접근 테스트

 

 

1. S3 버킷 생성

 

개발용이기 때문에 기본 설정을 바꾸진 않았다.

프로덕션용 앱 개발과정에서 필요한 경우 옵션을 변경하면 된다.

 

'이 버킷의 퍼블릭 액세스 차단' 설정은 중요한데,

CloudFront를 사용할 것이라면 모든 퍼블릭 액세스 차단으로 유지해야한다.

액세스를 허용한다면 허가된 사용자 이외에 다른 사용자도 S3 버킷에 접근이 가능할 수 있다. 

 

 

 

 

2. CloudFront 연동하기

AWS CloudFront  > 배포 생성

 

1) 원본

Origin domain

S3 생성 후 부여된 해당 원본 도메인을 선택

 

Origin path

CloudFront 배포후 부여되는 '배포 도메인 이름' 접근시 기본 폴더를 설정할 수 있다.

 

예를 들어

S3 버킷에 'devImg'라는 폴더를 생성하고 '2021-08-13-235407.jpg' 라는 파일을 업로드했을 때 부여되는 주소는 다음과 같다고 하자.

https://mys3bucket.s3.ap-northeast-1.amazonaws.com/devImg/2021-08-13-235407.jpg

그리고 CloudFront 배포 주소가 다음과 같다고 하자

https://d1234frl56cyw.cloudfront.net

 

 

--> 이때 2021-08-13-235407.jpg 파일에 접근하고 싶을 때는 

https://d1234frl56cyw.cloudfront.net/2021-08-13-235407.jpg를 입력하면 해당 파일에 접근할 수 있게 된다.

 

 

원본 액세스

CloudFront에 대한 액세스만 설정할 것이므로 '원본 액세스 제어 설정(권장)'을 선택한다.

초기 설정이 없다면 'Create New OAC(origin access control)'로 설정하여 S3 원본을 보호한다.

-> 후술할, 'S3 버킷 정책'을 통해 버킷에 대한 접근을 제어를 할 수 있게 돕는 설정이다.

 

 

2) 기본 캐시 동작

 

기본 설정을 변경하지 않았다.

- 추후 옵션을 변경할 수도 있다.

- 추후 SSL 인증을 완료하면 Redirect HTTP to HTTPS 로 변경할 예정이다. 현재는 개발중이기 HTTP도 같이 사용하기로 했다.

 

3) 함수 연결 - 설정 x

 

 

4) WAF

Web Application Firewall으로 웹 애플리케이션을 위한 방화벽이다. CloudFront에 전달되는 HTTP, HTTPS 요청을 모니터링하면서 애플리케이션에 대한 액세스를 제어할 수 있게 돕는다.

- 특정 대상에게만 제공할 예정이라면 IP 기반의 접근 통제도 가능하다. 

 

 

 

5) 설정

 

'가격 분류'

- 나는 도쿄 리전을 선택했기 때문에 가격 분류에서 아시아를 포함하는 옵션을 선택했다.

 

'대체 도메인 이름(CNAME)'

'사용자 정의 SSL 인증서'

- 개발 중이기 때문에, 이에 대한 설정은 추후 배포 과정에서 하기로 한다.

개발 및 테스트 용이라면 현재 설정하지 않아도 무방하다

 

나머지 설정은 그대로 둔다..

이제, 배포 생성을 하면 CloudFront 의 '배포 도메인 이름'을 획득할 수 있다.

 

 

 

3. S3 버킷 정책 설정

 

원본 탭으로 이동하고, 해당 원본 이름을 선택하고, 편집을 누른다

 

 

위 사진과 같이 '정책 복사' 클릭 후 -> 'S3 버킷 권한으로 이동'을 클릭한다

 

 

(CloudFront와 연결된 )S3 버킷 '권한 탭'

 

 

초기 설정시, 버킷 정책에 공란이 되어있을 수 있다.

버킷 정책에서 '편집'을 통해서 복사한 '정책'을 붙여넣기 한다. 

변경 사항을 저장한뒤 테스트한다.

 

만약,

버킷 정책을 제대로 설정하지 않으면 다음과 같이 access denied 오류가 뜰 수 있다.

 

 

 

4. 파일 업로드 후, 접근 테스트

 

 

S3 버킷에서 파일 업로드를 선택하고, 파일을 업로드 한다.

나는 CloudFront 배포 생성시 기본 설정했던 폴더를 따로 생성하고,

그 안에 TIL.jpg라는 파일을 업로드하기로 했다.

 

이제 성공적으로 업로드 되었는지 확인한다.

 

 

업로드가 잘 됐다.

 

이제,  '배포 도메인 이름' 뒤에 업로드한 파일 TIL.jpg를 입력하면

파일이 열리는 것을 확인할 수 있다.

 

만약 열리지 않는다면, 

 

S3 버킷 정책을 잘 살펴보길 바라며,

CloudFront 배포 생성시 설정했던 기본 루트를 잘 확인한다.

(기본 루트 폴더는 생략되어 접근하게 된다)

 

 

 

 

 

 

 

 

 

 

 

 

 

https://techblog.woowahan.com/6217/

 

사례별로 알아본 안전한 S3 사용 가이드 | 우아한형제들 기술블로그

우아한형제들 인프라보안팀에서 근무하고 있는 이주호입니다. ‘S3를 왜 안전하게 사용해야 하는지 이해’하고 몇 가지 사례를 예시로 들어 ‘더욱 안전하게 사용하기 위해 설정해야 하는 기능

techblog.woowahan.com

https://victorydntmd.tistory.com/335

 

[AWS] S3와 CloudFront 연동하기

1. 서비스 소개AWS S3는 이미 널리 알려진 Storage 서비스입니다.모든 종류의 데이터를 원하는 형식으로 저장저장할 수 있는 데이터의 전체 볼륨과 객체 수에는 제한이 없음Amazon S3는 간단한 key 기반

victorydntmd.tistory.com

https://earth-95.tistory.com/128

 

[AWS] CloudFront와 S3 연결하기

들어가기 전에 기존에 SpringBoot를 이용한 S3에 이미지 업로드 및 삭제에 대해 포스팅한 적이 있습니다. [SpringBoot] SpringBoot를 이용한 AWS S3에 여러 파일 업로드 및 삭제 구현하기 해당 포스팅을 할

earth-95.tistory.com

https://hyeon9mak.github.io/access-s3-through-cloudfront/

 

CloudFront를 통해 S3 액세스 하기

☁️ Summary Amazon S3(Simple Storage Service)는 간편한 데이터 관리 및 액세스 제어를 제공해주는 저장소다. ‘무한대로 늘어나는 외부 저장소 + 간편한 액세스 제어’ 정도로 생각하면 편할 것 같다.

hyeon9mak.github.io

 

댓글