본문으로 건너뛰기

S3 이미지 업로드 후 URL로 접근 시 Access Denied

2024년 12월 20일에 작성되었고, 블로그를 이전하며 옮겨온 포스트입니다.
여기에서 원본을 확인할 수 있습니다.

무슨 오류가 발생했을까?

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>M11MQ3732XTKGZ66</RequestId>
<HostId>Uxd4UBF7vXDz9KpS6HCofiDuD+Tqid3l0GVkHsfD+J5rSjmb4j35G5IsUOoiouWD3xM8UY0F1gw=</HostId>
</Error>

Amazon S3에 파일(이미지)을 업로드 후, URL로 파일에 접근하면 위와 같은 오류가 발생한다. S3 버킷을 처음에 생성할 때 권한을 public으로 설정했음에도 불구하고 이런 오류가 떠서 살짝 당황스러웠다.

해결하기

그래서 방법을 찾아보니, 퍼블릭 엑세스 차단을 비활성화하더라도, 버킷 정책을 설정해 주어야 URL로 이미지 파일에 접근할 수 있다는 것을 알게되었다. 설정할 버킷 정책은 아래와 같다. Resource 부분에는 자신이 설정한 버킷 이름을 설정해 주면 된다.

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "PublicReadGetObject",
			"Effect": "Allow",
			"Principal": "*",
			"Action": "s3:GetObject",
			"Resource": "arn:aws:s3:::<버킷이름>/*"
		}
	]
}

그리고 Amazon S3 버킷 콘솔에 접속하고, 권한 탭을 클릭한다. 그러면 3번째 섹션에 버킷 정책 이라는 섹션이 보인다. 우측 상단에 있는 편집 버튼을 눌러준다.

그리고 위에서 복사한 버킷 정책을 아래와 같이 붙여넣어 주고, 변경 사항 저장 버튼을 클릭하고 다시 URL에 접근하면 이미지가 정상적으로 로딩되는 것을 확인할 수 있다.