AWS Identity and Access Management(IAM) 사용자는 Amazon Simple Storage Service(Amazon S3) 버킷에 대해 s3:PutObject 작업을 수행할 권한이 있습니다. 하지만 객체를 업로드하려고 하면 HTTP 403: 액세스 거부 오류가 발생합니다. 어떻게 해결해야 합니까?

IAM 사용자에게 버킷에 업로드할 수 있는 사용자 권한이 올바르게 부여되어 있다면, 업로드를 못하게 하는 설정이 다음 정책에 포함되어 있지 않은지 확인합니다.

  • s3:PutObjectAcl에 대한 IAM 사용자 권한
  • 버킷 정책의 조건
  • Amazon Virtual Private Cloud(Amazon VPC) 엔드포인트 정책에서 허용되는 액세스

s3:PutObjectAcl에 대한 IAM 사용자 권한

IAM 사용자가 업로드 중에 객체의 ACL(액세스 제어 목록)을 업데이트해야 하는 경우 해당 사용자에게는 IAM 정책에서 부여되는 s3:PutObjectAcl 작업 권한도 필요합니다. 사용자의 IAM 정책을 업데이트하는 방법은 IAM 사용자의 권한 변경을 참조하십시오.

버킷 정책의 조건

버킷으로의 업로드를 제한하는 다음 예와 같은 조건이 버킷 정책에 없는지 검토합니다. 버킷 정책에 조건이 있고 해당 조건이 유효한 경우 IAM 사용자가 조건을 충족해야 업로드가 작동합니다.

중요: 조건을 검토할 때 조건에 Allow 문("Effect": "Allow") 또는 Deny 문("Effect": "Deny")이 연결되어 있는지 확인하십시오. 업로드가 작동하려면 사용자가 Allow 문의 조건을 충족하거나 Deny 문의 조건에 해당하지 않아야 합니다.

특정 IP 주소로부터의 업로드만 허용하는 다음과 유사한 조건이 없는지 확인합니다.

"Condition": {
  "IpAddress": {
    "aws:SourceIp": "54.240.143.0/24"
  }
}

버킷 정책에 이 조건이 있는 경우 IAM 사용자가 허용되는 IP 주소에서 버킷에 액세스해야 합니다.

객체가 특정 스토리지 클래스인 경우에만 업로드를 허용하는 다음과 유사한 조건이 없는지 확인합니다.

"Condition": {
  "StringEquals": {
    "s3:x-amz-storage-class": [
      "STANDARD_IA"
    ]
  }

정책에 이 조건이 있는 경우 사용자가 허용되는 스토리지 클래스의 객체를 업로드해야 합니다. 예를 들어 위의 조건 문에서는 STANDARD_IA 스토리지 클래스를 요구하므로 사용자는 다음과 유사한 AWS CLI(AWS 명령줄 인터페이스) 명령을 사용하여 객체를 업로드해야 합니다.

aws s3api put-object --bucket my_bucket --key examplefile.jpg --body c:\examplefile.jpg --storage-class STANDARD_IA

객체에 특정 ACL(액세스 제어 목록)이 할당된 경우에만 업로드를 허용하는 다음과 유사한 조건이 없는지 확인합니다.

"Condition": {
                "StringEquals": {
                    "s3:x-amz-acl":["public-read"]
                }
            }

정책에 이 조건이 있는 경우 사용자가 허용되는 ACL에 할당된 객체를 업로드해야 합니다. 예를 들어 위의 조건에서는 public-read ACL을 요구하므로 사용자는 다음과 유사한 명령을 사용하여 객체를 업로드해야 합니다.

aws s3api put-object --bucket my_bucket --key examplefile.jpg --body c:\examplefile.jpg --acl public-read

업로드 시에 버킷 소유자(정규 사용자 ID)에게 객체에 대한 완벽한 제어 권한을 부여하도록 하는 다음과 같은 조건이 없는지 확인합니다.

"Condition": {
  "StringEquals": {
    "s3:x-amz-grant-full-control": "id=AccountA-CanonicalUserID"
  }
}

정책에 이 조건이 있는 경우 사용자가 다음과 유사한 명령을 사용하여 객체를 업로드해야 합니다.

aws s3api put-object --bucket my_bucket --key examplefile.jpg --body c:\examplefile.jpg --acl bucket-owner-full-control

객체가 특정 AWS Key Management System(AWS KMS) 키로 암호화된 경우에만 업로드를 허용하는 다음과 유사한 조건이 없는지 확인합니다.

"Condition": {
  "StringEquals": {
    "s3:x-amz-server-side-encryption-aws-kms-key-id": "arn:aws:kms:us-east-1:111122223333:key/*"
  }
}

정책에 이 조건이 있는 경우 사용자가 다음과 유사한 명령을 사용하여 객체를 업로드해야 합니다.

aws s3api put-object --bucket my_bucket --key examplefile.jpg --body c:\examplefile.jpg --ssekms-key-id arn:aws:kms:us-east-1:111122223333:key/*

객체가 특정 유형의 서버 측 암호화 방식을 사용하는 경우에만 업로드를 허용하는 다음과 유사한 조건이 없는지 확인합니다.

"Condition": {
  "StringEquals": {
    "s3:x-amz-server-side-encryption": "AES256"
  }
}

정책에 이 조건이 있는 경우 사용자가 다음과 유사한 명령을 사용하여 객체를 업로드해야 합니다.

aws s3api put-object --bucket my_bucket --key examplefile.jpg --body c:\examplefile.jpg --server-side-encryption "AES256"

VPC 엔드포인트 정책에서 액세스 허용

IAM 사용자가 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 사용하여 Amazon S3에 객체를 업로드하는데 해당 인스턴스가 VPC 엔드포인트를 사용하여 Amazon S3로 라우팅되는 경우 VPC 엔드포인트 정책을 확인해야 합니다. 엔드포인트 정책에서 버킷에 대한 업로드가 허용되는지 확인합니다.

예를 들어 다음 VPC 엔드포인트 정책은 other_bucket에 대한 액세스만 허용합니다. 버킷이 허용되는 리소스 목록에 없는 경우 사용자는 VPC의 인스턴스를 사용하여 버킷에 업로드할 수 없습니다.

{
  "Statement": [{
    "Sid": "Access-to-specific-bucket-only",
    "Principal": "*",
    "Action": [
      "s3:PutObject"
    ],
    "Effect": "Allow",
    "Resource": "arn:aws:s3:::other_bucket/*"
  }]
}

페이지 내용이 도움이 되었습니까? | 아니요

AWS 지원 지식 센터로 돌아가기

도움이 필요하십니까? AWS 지원 센터를 방문하십시오.

게시 날짜: 2019년 3월 1일