버킷을 만들 때 퍼블릭으로 설정하여 만들었지만 이미지 업로드 후 객체 URL로 브라우저에서 접속을 시도하면 객체 접근 403 Access Denied
오류를 만났습니다...
403 Access Denied
오류는 아래와 같은 이유로 발생할 수 있습니다.
즉, 객체가 존재하지만 해당 객체에 대한 읽기 권한을 부여하지 않았다면 웹 사이트 엔드포인트는 HTTP 응답 코드 403 (Access Denied)을 반환합니다.
s3:GetBucketPolicy 및 s3:PutBucketPolicy에 대한 권한을 확인해야 합니다.
버킷의 액세스를 보면 아직 객체를 퍼블릭으로 설정할 수 있음
이라고 뜨는데, 이는 아직 퍼블릭으로 설정되지 않았으며 외부에서 접근할 수 없는 상태입니다.
버킷 접근을 제어하는 방법에는 3가지가 존재하는데, 간단히 정리하면 하기와 같습니다.
IAM 제어 : IAM 계정에 S3 접근 권한을 설정해 사용자 단위로 액세스를 제어.
버킷 정책 : 버킷 단위로 상세한 접근 제어를 확정.
ACL : 객체 단위로 간단하게 접근 제어할 때 사용.
현재는 업로드 한 이미지에 모두 읽기 권한이 있어야하기 때문에 버킷 정책을 수정하도록 했습니다.
JSON 형식으로 이루어진 데이터로 버킷을 사용할 권한을 가진 여러 명의 사용자 별로 각각의 행위에 대한 권한 범위를 설정할 수 있습니다.
누군가는 읽기만 가능하고 누군가는 읽기와 쓰기가 가능한 상태를 설정한다던가...
버킷에 대한 전반적인 권한 설정은 버킷 정책을 통해 설정되는데, 버킷 안의 파일 하나하나의 권한 설정은 불가능합니다.
직접 정책을 수정하려면 어려운데, 버킷 정책을 손쉽게 생성할 수 있는 사이트를 통해 정책 생성할 수 있습니다.
만든 정책은 아래와 같습니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::tenshopbucket/*"
}
]
}
간단히 설명하자면, 모두 대상(principal : *) 에 대해서 해당 버킷에 있는 모든 파일에 대한 객체 읽기 행동(action : s3 : GetObject)을 허용(Effect : Allow), 즉 읽을 수 있게 해주는 것입니다.
위처럼 정책을 수정하고 나서 다시 버킷의 액세스를 확인하면 퍼블릭
상태가 된 것을 확인할 수 있습니다.