내 버킷 정책이 해당 계정에 대한 전체 액세스를 허용하는데도 다른 AWS 계정의 IAM 사용자에게 액세스 거부 오류가 발생하는 이유는 무엇입니까?

6분 분량
0

내 Amazon Simple Storage Service(S3) 버킷의 정책이 다른 AWS 계정에 대한 전체 액세스 권한을 부여합니다. 하지만 해당 계정의 AWS ID 및 액세스 관리 (IAM) 사용자가 내 버킷에 액세스하려고 하면 액세스 거부 오류가 발생합니다.

간략한 설명

버킷 정책이 이미 다른 계정에 대한 액세스 권한을 부여한 경우 다음과 같은 이유로 교차 계정 사용자에게 액세스 거부 오류가 발생할 수 있습니다.

  • 사용자의 IAM 정책은 버킷에 대한 액세스 권한을 부여하지 않습니다.
  • 객체는 AWS Key Management Service(AWS KMS)에 의해 암호화되며 사용자는 AWS KMS 키에 액세스할 수 없습니다.
  • 버킷 정책 또는 IAM 정책의 거부 문이 사용자의 액세스를 차단하고 있습니다.
  • Amazon Virtual Private Cloud(Amazon VPC) 엔드포인트 정책이 버킷에 대한 액세스를 차단하고 있습니다.
  • AWS Organizations 서비스 제어 정책이 버킷에 대한 액세스를 차단하고 있습니다.
  • 객체는 버킷을 소유하는 AWS 계정에 속하지 않습니다.
  • 버킷에 대해 요청자 지불을 설정했습니다.
  • 버킷에 대한 액세스를 차단하는 세션 정책을 통과했습니다.

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하는 경우 최신 버전을 사용하고 있는지 확인하십시오.

사용자의 IAM 정책은 버킷에 대한 액세스 권한을 부여하지 않습니다.

교차 계정 액세스의 경우 계정 A의 IAM 정책과 계정 B의 버킷 정책에서 버킷 액세스를 허용해야 합니다.

다음 단계에 따라 계정 A에서 사용자의 IAM 정책을 확인하십시오.

1.    IAM 콘솔을 엽니다.

2.    콘솔에서 버킷에 액세스할 수 없는 IAM 사용자 또는 역할을 엽니다.

3.    IAM 사용자 또는 역할의 권한 탭에서 각 정책을 확장하여 해당 JSON 정책 문서를 확인합니다.

4.    JSON 정책 문서에서 버킷 이름이 있는 정책을 찾아보십시오. 그런 다음, 해당 정책이 버킷에서 올바른 S3 작업을 허용하는지 확인합니다.

5.    IAM 사용자 또는 역할이 버킷에 대한 액세스 권한을 부여하지 않는 경우 올바른 권한을 부여하는 정책을 추가하십시오. 예를 들어 다음 IAM 정책은 사용자에게 DOC-EXAMPLE-BUCKET에서 객체(s3:GetObject)를 다운로드할 수 있는 액세스 권한을 부여합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt",
      "Action": "s3:GetObject",
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
      ]
    }
  ]
}

객체는 AWS KMS에 의해 암호화되며 사용자는 AWS KMS 키에 액세스할 수 없습니다.

IAM 정책(계정 A)과 버킷 정책(계정 B)이 모두 교차 계정 액세스를 허용하는 경우 AWS KMS에서 버킷의 기본 암호화를 확인하십시오. 또는 AWS KMS 암호화에 대한 객체 속성을 확인하십시오. AWS KMS 키로 객체를 암호화하는 경우 사용자에게는 키 사용 권한도 있어야 합니다.

암호화에 KMS 키를 사용할 때 IAM 사용자에게 버킷을 다운로드 및 버킷에 업로드할 권한을 부여하려면 다음 단계를 따르십시오.

1.    KMS 키 정책을 편집하여 다음과 비슷한 명령문을 추가합니다.

참고: IAM 사용자의 Amazon 리소스 이름(ARN) 을 보안 주체로 입력합니다.

{
  "Sid": "ExampleStmt",
  "Action": [
    "kms:Decrypt",
    "kms:GenerateDataKey"
  ],
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:user/Jane"
  },
  "Resource": "*"
}

2.    KMS 키가 IAM 사용자와 동일한 계정에 속하는 경우 키 정책을 업데이트할 필요가 없습니다. KMS 키가 IAM 사용자와 다른 계정에 속한 경우 IAM 사용자의 권한도 업데이트해야 합니다. 다음과 비슷한 IAM 정책 문을 추가합니다.

참고: KMS 키의 ARN을 리소스로 입력합니다.

{
  "Sid": "KMSAccess",
  "Action": [
    "kms:Decrypt",
    "kms:GenerateDataKey"
  ],
  "Effect": "Allow",
  "Resource": "arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd"
}

버킷 정책 또는 IAM 정책의 거부 문이 사용자의 액세스를 차단하고 있습니다.

버킷 정책과 사용자의 IAM 정책에서 사용자의 버킷 액세스를 명시적으로 거부하는 문이 있는지 확인하십시오.

다음 단계에 따라 버킷 정책을 확인하십시오.

1.    Amazon S3 콘솔을 엽니다.

2.    버킷 목록에서 확인하려는 버킷 정책이 있는 버킷을 엽니다.

3.    권한 탭을 선택합니다.

4.    버킷 정책을 선택합니다.

5.    **"효과": "거부"**가 포함된 문을 찾습니다.

6.    버킷 정책을 수정하여 버킷에 대한 사용자의 액세스를 거부하는 “효과”: “거부” 문을 편집하거나 제거합니다.

다음 단계에 따라 사용자의 IAM 정책을 확인하십시오.

1.    IAM 콘솔을 엽니다.

2.    콘솔에서 버킷에 액세스할 수 없는 IAM 사용자 또는 역할을 엽니다.

3.    IAM 사용자 또는 역할의 권한 탭에서 각 정책을 확장하여 JSON 정책 문서를 확인합니다.

4.    JSON 정책 문에서 **“효과”: "거부"**가 포함된 문을 찾습니다.

5.    사용자의 IAM 권한 정책을 수정하여 버킷에 대한 사용자의 액세스를 잘못 거부하는 “효과”: “거부” 문을 편집하거나 제거합니다.

VPC 엔드포인트 정책이 버킷에 대한 액세스를 차단하고 있습니다.

사용자가 VPC 엔드포인트를 통해 라우팅되는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 사용하여 버킷에 액세스하는 경우 VPC 엔드포인트 정책을 확인하십시오. VPC 엔드포인트 정책에 S3 버킷에 액세스할 수 있는 올바른 권한이 포함되어 있는지 확인합니다.

예를 들어, 다음 VPC 엔드포인트 정책은 DOC-EXAMPLE-BUCKET에 대한 액세스를 허용합니다.

{
  "Id": "Policy1234567890123",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1234567890123",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
      ],
      "Principal": "*"
    }
  ]
}

경고: "Principal": "*" 요소는 VPC 엔드포인트를 사용하는 모든 사람에게 버킷에 대한 액세스 권한을 부여합니다. 사용 사례에 맞게 Principal 값의 범위를 제한해야 합니다.

AWS Organizations 서비스 제어 정책이 버킷에 대한 액세스를 차단하고 있습니다.

사용자 계정에 대해 AWS Organizations가 설정된 경우 서비스 제어 정책을 확인하여 Amazon S3에 대한 액세스가 허용되는지 확인하십시오. 예를 들어, 다음 정책은 Amazon S3에 대한 액세스를 명시적으로 거부하고 액세스 거부 오류가 발생합니다.

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

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

객체는 버킷을 소유하는 AWS 계정에 속하지 않습니다.

기본적으로 S3 객체는 업로드한 AWS 계정이 소유합니다. 이는 다른 계정이 버킷을 소유한 경우에도 마찬가지입니다. 객체를 다른 계정에 소유한 경우에는 버킷의 권한이 객체에 자동으로 적용되지 않습니다.

객체 소유권으로 인한 액세스 거부 오류를 해결하려면 다음 해결 방법을 시도해 보십시오.

$ aws s3api put-object-acl --bucket examplebucket --key keyname --acl bucket-owner-full-control

참고: 객체에 액세스하려면 객체 소유자가 버킷 소유자에게 명시적으로 액세스 권한을 부여해야 합니다. 따라서 객체 소유자 계정을 사용하여 이러한 명령을 실행하십시오.

버킷에 대해 요청자 지불을 설정했습니다.

버킷에 요청자 지불을 설정한 경우 다른 계정의 사용자가 버킷에 요청을 보낼 때 request-payer 파라미터를 지정해야 합니다. 그렇지 않으면 해당 사용자에게 액세스 거부 오류가 발생합니다.

이 오류를 해결하려면 다음 작업을 수행하십시오.

  • DELETE, GET, HEAD, POST 및 PUT 요청의 경우 헤더에 x-amz-request-payer : requester를 포함합니다.
  • 서명된 URL의 경우 요청에 x-amz-request-payer=requester를 포함합니다.
  • AWS CLI 명령의 경우 --request-payer 파라미터를 포함합니다. 예제:
$ aws s3 cp exampleobject.jpg s3://DOC-EXAMPLE-BUCKET/exampleobject.jpg --request-payer requester

버킷에 대한 액세스를 차단하는 세션 정책을 통과했습니다.

세션 정책은 역할 인수 중에 신속하게 생성하여 세션에서 전달할 수 있는 인라인 정책입니다. 세션 정책을 전달하여 역할 세션의 권한 범위를 좀 더 넓힐 수 있습니다. 세션 정책은 역할 또는 페더레이션된 사용자를 위한 임시 세션을 프로그래밍 방식으로 생성할 때 파라미터로 전달하는 고급 정책입니다. 세션의 유효 권한은 역할의 ID 기반 정책과 세션 정책이 공통되는 부분입니다. 따라서 전달한 세션 정책이 S3 버킷에 대한 액세스를 차단하지 않는지 확인하십시오.

관련 정보

Amazon S3의 403 액세스 거부 오류 문제를 해결하려면 어떻게 해야 합니까?

교차 계정 사용자가 사용자 지정 AWS KMS 키로 암호화된 내 버킷에 액세스하려고 할 때 액세스 거부 오류가 발생하는 이유는 무엇입니까?

AWS 공식
AWS 공식업데이트됨 일 년 전
댓글 없음

관련 콘텐츠