AWS S3 정책 권한 설정 시 403(Access Denied) 에러

503·2022년 9월 24일
2

⚠️ 403 Access Denied 오류

버킷을 만들 때 퍼블릭으로 설정하여 만들었지만 이미지 업로드 후 객체 URL로 브라우저에서 접속을 시도하면 객체 접근 403 Access Denied 오류를 만났습니다...

❓ 발생 이유?

403 Access Denied 오류는 아래와 같은 이유로 발생할 수 있습니다.

  • AWS Identity and Access Management(IAM) 사용자 또는 역할에는 s3:GetBucketPolicy 및 s3:PutBucketPolicy 모두에 대해 권한이 없을 때
  • 버킷 정책이 s3:GetBucketPolicy 또는 s3:PutBucketPolicy에 대한 IAM 자격 증명의 권한을 거부할 때
  • Amazon S3 퍼블릭 액세스 차단이 활성화되었을 때
  • AWS Organizations 서비스 제어 정책은 Amazon S3 액세스를 허용하지 않음

즉, 객체가 존재하지만 해당 객체에 대한 읽기 권한을 부여하지 않았다면 웹 사이트 엔드포인트는 HTTP 응답 코드 403 (Access Denied)을 반환합니다.


⭕ 그렇다면 해결 방법은?

s3:GetBucketPolicy 및 s3:PutBucketPolicy에 대한 권한을 확인해야 합니다.

버킷의 액세스를 보면 아직 객체를 퍼블릭으로 설정할 수 있음 이라고 뜨는데, 이는 아직 퍼블릭으로 설정되지 않았으며 외부에서 접근할 수 없는 상태입니다.

버킷 접근 제어방법

버킷 접근을 제어하는 방법에는 3가지가 존재하는데, 간단히 정리하면 하기와 같습니다.

  1. IAM 제어 : IAM 계정에 S3 접근 권한을 설정해 사용자 단위로 액세스를 제어.

  2. 버킷 정책 : 버킷 단위로 상세한 접근 제어를 확정.

  3. ACL : 객체 단위로 간단하게 접근 제어할 때 사용.

  • 장점 : 관리하기 쉽고, 객체마다 따로 권한 설정 가능
  • 단점 : 권한 유지 안됨.새로운 파일 등록되면 그 파일에 다시 권한을 설정해줘야함.
    (파일 업로드 할 때, ACL을 붙이면 정상적으로 퍼블릭 읽기가 된다고 하는데 아직 코드 안에서 추가해주는 방법이 있는지는 모르겠습니다.)

현재는 업로드 한 이미지에 모두 읽기 권한이 있어야하기 때문에 버킷 정책을 수정하도록 했습니다.

버킷 정책(BucketPolicy)이란?

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), 즉 읽을 수 있게 해주는 것입니다.

위처럼 정책을 수정하고 나서 다시 버킷의 액세스를 확인하면 퍼블릭 상태가 된 것을 확인할 수 있습니다.



🔗 참고

profile
얼레벌레 개발자로 살아가기. 개발하면서 만났던 이슈를 기록합니다.

0개의 댓글