본문 바로가기

프로젝트

TIL-- AWS S3 AccessDenined 해결법

오늘은 AWS S3 스토리지에서 이미지를 불러오기 위한 작업을 했다. 관리자 페이지에서의 이미지 업로드는 가장 마지막에 할 것 같으니 그때 다시 한번 이미지 업로드에 대해서 정리할 예정

S3 스토리지에 아무런 이미지를 하나 저장을 하고 해당 이미지의 URL이다. 프론트엔드에서는 URL을 통해 이 이미지를 불러 오는 작업만 하면 되기 때문에 간단할 줄 알았는데..

이런 에러가 발생했다. AccessDenined 즉 접근이 거부되었다는 것인데 S3버킷을 생성할 때 객체의 엑세스 권한을 다 허용을 했는데 안 됬다면 이 글을 보면 해결을 할 수 있을 것이다.

첫 번 째

퍼블릭 엑서스 차단 비활성화

위에 빨간 줄에 있는 새 ACL(엑서스 제어 목록)을 통해 부여된 버킷 및 객체에 대한 퍼블릭 엑세스 차단을 비활성화 시키면

S3에 업로드 된 객체를 어디서든 접근가능 하게 설정할 수 있다. 즉 업로드 된 객체의 URL을 통해서 어디서든 접근할 수 있도록 설정하는 것이다.

하지만 아직 까지 해결이 되지는 않을 것이다. 그러면 버킷 정책 탭으로 이동하여 버킷 정책 설정을 클릭

그리고 나서 버킷 ARN을 복사 해두고 잘 기억해 두자

버킷 정책 편집기 하단에 있는 정책 생성기를 클릭

정책 설정


1. Select Type of policy 는 S3 Bucket Policy를 선택
2. Effect는 Allow를 선택
3. Principal은 외부에 퍼블릭으로 공개할 예정이니 *을 입력./
4. AWS Service는 당연히 Amazon S3를 선택
5. Actions는 종류가 많지만 객체를 조회하는 형태이니 일단은 GetObject만 선택

이후에 Add Statement를 클릭하고

Generate Policy를 클릭하면 JSON형태로 정책이 생성된다.
이를 복사하여  위에 버킷 정책 편집기에 붙여넣고 저장을 합시다.

저장이 정상적으로 완료되면 권한버킷 정책에 퍼블릭이라는 표시가 생긴다


이제 최초 업로드 한 파일의 URL을 다시 접속하면 정상적으로 웹에서 접근이 가능하다.