CloudFront에서 S3 Origin으로 콘텐츠를 제공할 경우, 해당 콘텐츠가 속한 Bucket 이 'Public' 이거나 제공할 콘텐츠의 권한이 'public-read' 이어야 한다. S3 입장에서 CloudFront는 외부 시스템 이기 때문에 public 권한을 부여해야만 CloudFront에서 콘텐츠를 가져갈 수가 있다.
https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html
이 경우 End-User 가 CloudFront를 통해 콘텐츠를 받을 수 있을 뿐만 아니라 'public' 권한이 있기 때문에 S3에서도 직접 콘텐츠를 가져갈 수가 있다. 의도치 않은 실수로 인하여 End-User 가 CloudFront 가 아닌 S3에서 가져가는 경우가 발생할 수 있어 이를 막기 위해 위 그림처럼 S3 에 있는 콘텐츠는 외부에서 접근이 불가능하고 오직 CloudFront에서만 제공할 수 있도록 설정이 필요하다.
간단히 요약하자면
- S3 의 Bucket 은 'Not public', Object는 'public-read' 권한이 없는 상태에서
- Origin Access Identity라고 불리는 특별한 CloudFront User를 생성하여
- S3 Bucket Policy에서 생성한 CloudFront User에 대해 'GetObject' 권한 부여
를 하기만 하면 된다. 그러나 이 과정을 직접 생성하고 설정하지 않고도 CloudFront 콘솔에서 몇 번의 클릭으로 쉽게 설정이 가능하다.
우선 설정할 CloudFront Distributions 의 Origins 탭으로 이동한다.
'Origin Access Identity' 가 아직 비어있다.
여기에 해당 Distribution 이 바라보는 Origin 설정이 있는데, 'Origin Access Identity' 항목이 아직 비어 있는 것을 확인할 수 있는다. 이를 생성하기 위해 Origin을 선택하고 Edit 버튼을 누른다.
Restrict Bucket Access 설정
처음에 'Restrict Bucket Access' 가 No로 되어 있을 것이다. 이를 Yes로 바꾸면 그 아래에 몇 가지 항목이 더 생기는데
- [Origin Access Identity] : Identity를 새로 생성할 건지, 기존 것을 선택할 건지의 여부. Create a New Identity를 선택하여 새로 만든다.
- [Comment] : Create a New Identity을 선택하면 자동으로 채워지고, 수정할 수도 있다.
- [Grant Read Permissions on Bucket] : S3 Bucket 에 권한 설정을 할 것인지, 추후에 직접 할 건지를 묻는데, Yes를 선택하면 자동을 권한 설정을 해준다.
그렇게 완료를 하면 아래와 같이 Origin Access Identity 가 생성됨을 확인할 수 있다.
Origin Access Identity 생성됨
그리고 해당 S3 Bucket 의 Bucket Policy를 보면 위에서 생성한 Origin Access Identity 에 대한 GetObject 권한이 추가됨을 확인할 수 있다.
Bucket Policy 에 권한 추가
설정은 이것으로 끝이며, 이제 S3 Bucket 의 콘텐츠를 S3 로부터 직접 가져가는 것은 제한이 되고 CloudFront를 통해서만 접근하여 가져갈 수 있게 된다.
Ref.
Congratulations @autumn.bom! You received a personal award!
You can view your badges on your Steem Board and compare to others on the Steem Ranking
Do not miss the last post from @steemitboard:
Vote for @Steemitboard as a witness to get one more award and increased upvotes!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Congratulations @autumn.bom! You received a personal award!
You can view your badges on your Steem Board and compare to others on the Steem Ranking
Do not miss the last post from @steemitboard:
Vote for @Steemitboard as a witness to get one more award and increased upvotes!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit