예전에 s3에 이미지를 올려놓고, 퍼블릭에서 엑세스 가능하도록 개발을 하는 경우가 많았는데 그럴 때마다 모든 퍼블릭 엑세스 차단을 풀고, ACL(엑세스 제어 목록)에 모든 유저를 열어서 개발한 적이 있었는데 생각해보면 보안상 문제가 있을 것 같으므로 이번에 사이드 프로젝트를 하면서 어떻게 하면 퍼블릭 유저가 할 수 있는 걸 최소화할 수 있을까 고민해 봤다.

일단 ACL에서는 모든 유저에게 어떤 권한도 주지 않았다. 버킷에 유저가 접근 가능해야하는 파일과 접근 불가능해야하는 파일이 같이 있을 수도 있기 때문에 그렇게 하였고, 오직 버킷 소유자만 객체, 객체 ACL에 읽기,쓰기가 가능하도록 해놓았다. 그리고 퍼블릭 액세스를 가능하게 해야하는 파일들은 파일을 업로드 하는 어플리케이션 서버에서 지정하도록 해놓았다. (Spring 서버에서 putObject할 때 PublicRead로 객체 읽기를 열어두도록 지정해줄 수 있다.)

새 ACL, 임의의 ACL을 통해 부여된 버킷 및 객체에 대한 퍼블릭 액세스 차단은 풀어놔야 publicRead로 객체를 만들 수 있었다. 액세스 지점 정책은 따로 endpoint를 두어서 S3에 대한 접근을 관리할 수 있는 기능 같은데 사용하고 있지는 않기 때문에 그냥 차단해 놓았다.

영어를 번역해 놓아서 그런지 ACL(엑세스 제어 목록), 객체, 객체 ACL 등등 말이 되게 어렵게 되어있는 것 같다.


참고글
S3 개념 및 용어 관련 정리
https://inpa.tistory.com/entry/AWS-%F0%9F%93%9A-S3-%EB%B2%84%ED%82%B7-%EC%83%9D%EC%84%B1-%EC%82%AC%EC%9A%A9%EB%B2%95-%EC%8B%A4%EC%A0%84-%EA%B5%AC%EC%B6%95#ACL_(Access_Control_List)

spring에서 s3에 이미지 업로드
https://www.sunny-son.space/spring/Springboot%EB%A1%9C%20S3%20%ED%8C%8C%EC%9D%BC%20%EC%97%85%EB%A1%9C%EB%93%9C/

 

+ Recent posts