Amazon S3 콘솔을 사용하여 파일을 업로드하려고 할 때 HTTP 403 사용 권한 없음 오류가 발생하는 이유는 무엇입니까?

최종 업데이트 날짜: 2020년 6월 29일

Amazon S3 콘솔을 사용하여 Amazon Simple Storage Service(Amazon S3) 버킷에 파일을 업로드하려고 합니다. 하지만 파일이 업로드되지 않고 HTTP 403 사용 권한 없음 오류가 발생합니다. 이 문제를 해결하려면 어떻게 해야 합니까?

간략한 설명

Amazon S3 콘솔에서 HTTP 403 사용 권한 없음 오류를 해결하려면 다음을 확인하십시오.

  • s3:PutObject 또는 s3:PutObjectAcl에 대한 권한 누락
  • AWS Key Management Service(AWS KMS) 키를 사용할 수 있는 권한 누락
  • 버킷 정책의 명시적 거부 문
  • 버킷 ACL(액세스 제어 목록)에서 AWS 계정 루트 사용자가 객체를 쓰도록 허용하지 않음
  • AWS Organizations 서비스 제어 정책에서 Amazon S3에 대한 액세스를 허용하지 않음

해결 방법

s3:PutObject 또는 s3:PutObjectAcl에 대한 권한 누락

사용 중인 AWS Identity and Access Management(IAM) 사용자 또는 역할에 버킷에 대한 s3:PutObject 작업 권한이 있는지 확인합니다. 이 권한이 없으면 HTTP 403 사용 권한 없음 오류가 발생합니다.

업로드 중에 객체의 ACL을 수정하려는 경우 IAM 사용자 또는 역할에도 s3:PutObjectAcl 작업 권한이 있어야 합니다.

AWS KMS 키를 사용할 수 있는 권한 누락

S3 버킷에 사용자 지정 AWS KMS 키를 사용한 기본 암호화를 적용하는 경우 해당 키를 사용하여 버킷에 액세스할 수 있는 권한이 있어야 합니다.

키 사용 권한을 부여받으려면, 키 관리자가 귀하를 사용자 지정 AWS KMS 키의 사용자로 추가해야 합니다. 키 관리자가 다음 단계에 따라 귀하를 키 사용자로 추가해야 합니다.

  1. AWS KMS 콘솔을 엽니다.
  2. 탐색 창에서 [고객 관리형 키]를 선택합니다.
  3. 키 목록에서 버킷과 연결된 키를 엽니다.
  4. [키 사용자]에서 [추가]를 선택합니다.
  5. [키 사용자 추가] 대화 상자에서 IAM 사용자를 선택한 다음 [추가]를 선택합니다.

버킷 정책의 명시적 거부 문

버킷 정책을 검토하여 특정 조건이 충족되지 않는 한 s3:PutObject에 대한 권한을 명시적으로 거부("Effect": "Deny")하는 문이 있는지 확인합니다. 업로드가 s3:PutObject 작업에 액세스하기 위한 버킷 정책 요구 사항을 충족하는지 확인합니다.

예를 들어 요청에 AWS KMS 또는 Amazon S3 관리형 암호화 키를 사용하는 서버 측 암호화가 포함되어 있지 않으면 버킷 정책이 s3:PutObject를 명시적으로 거부하는 경우, 올바른 암호화 헤더를 사용하여 객체를 업로드하고 있는지 확인합니다.

버킷 정책의 다음 예제 문은 업로드 요청에 AWS KMS 키 arn:aws:kms:us-east-1:111122223333:key를 사용한 암호화가 포함되어 있지 않는 한 awsdoc-example-bucket 버킷의 s3:PutObject에 대한 액세스를 명시적으로 거부합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt",
      "Action": [
        "s3:PutObject"
      ],
      "Effect": "Deny",
      "Resource": "arn:aws:s3:::awsdoc-example-bucket/*",
      "Condition": {
        "StringNotLikeIfExists": {
          "s3:x-amz-server-side-encryption-aws-kms-key-id": "arn:aws:kms:us-east-1:111122223333:key/*"
        }
      },
      "Principal": "*"
    }
  ]
}

경고: 명시적 거부 문이 포함된 버킷 정책을 저장하기 전에 명시적 액세스 거부에 대한 파라미터를 주의 깊게 검토해야 합니다. 실수로 잠근 경우 실수로 모든 사용자의 Amazon S3 버킷 액세스를 거부했습니다. 액세스 권한을 다시 얻으려면 어떻게 해야 합니까?를 참조하십시오.

버킷 ACL이 루트 사용자의 객체 쓰기를 허용하지 않음

루트 사용자 계정을 사용하여 S3 버킷에 객체를 업로드하는 경우 버킷의 ACL이 루트 사용자에게 객체 쓰기에 대한 액세스 권한을 부여하는지 확인합니다. 자세한 내용은 ACL 버킷 권한을 설정하려면 어떻게 해야 합니까?를 참조하십시오.

AWS Organizations 서비스 제어 정책에서 Amazon S3에 대한 액세스를 허용하지 않음

AWS Organizations를 사용하는 경우 서비스 제어 정책에서 Amazon S3에 대한 액세스를 허용하는지 확인합니다.

예를 들어 다음 정책은 명시적으로 액세스를 거부하므로 Amazon S3를 액세스하려고 할 때 HTTP 403 사용 권한 없음 오류가 발생합니다.

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Deny",
    "Action": "S3:*",
    "Resource": "*"
  }]
}

AWS Organizations의 기능에 대한 자세한 내용은 조직 내 모든 기능 활성화를 참조하십시오.