찾아보니 이점들이 꽤나 많다.
하지만 이번 프로젝트에서 진행하는 목적은 콘텐츠 보안 유지이다.
S3 콘텐츠에 Public 액세스 접근을 차단하고 CloudFront를 거치도록 하여 CloudFront의 보호 기능들을 사용한다.
자세한 내용은 여기를 찾아보길 바란다.
- 원본 도메인: S3 도메인 선택
- 이름: 원본 도메인 선택 시 자동 입력
- 원본 액세스 제어 설정 선택
- 이름에는 S3 도메인이 입력되어 있다.
- 확인 후 "생성"
위 설정들을 마쳤으면 아래의 나머지 설정들은 기본으로 두고 "배포 생성"을 한다.
- 만약 다른 설정을 한다면 [AWS] CloudFront와 S3 연결하기 참고
- 해당 버킷 - 권한 - 객체 소유권
- CloudFront - 배포 - 해당 배포 클릭 후
- S3 버킷 정책에 CloudFront에 대한 액세스 허용하는 정책을 복사한다.
- 버킷의 권한에서 버킷 정책에 해당 정책을 복사한다.
{ "Version": "2008-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Sid": "AllowCloudFrontServicePrincipal", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::test-springboot-deploy/*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::468740963806:distribution/ED6BSKMEE9BKA" } } } ] }
- 모든 퍼블릭 액세스 차단(오류 발생)
- ❗ 삭제 오류
모든 퍼블릭 액세스를 차단하니 s3버킷으로 접근해서 파일 삭제가 안된다.- 해결
S3 버킷의 퍼블릭 액세스 차단의 경우, 활성화 시켜도 CloudFront와 연결하는데는 문제가 없지만 SpringBoot를 통해 S3에 파일 업로드/삭제를 진행하고 있어 새 ACL을 통해 부여된 버킷 및 객체에 대한 퍼블릭 액세스 차단은 비활성화해야 한다.
- AccessDenied가 된다.
- 정상적으로 파일을 불러온다.