Question

S3 403 forbidden 관련해서 방안이 있나 궁금하여 문의드립니다.



Answer


Amazon S3의 403 액세스 거부 오류 문제에 대한 해결방안 전달 드립니다.


1. 버킷 및 객체 소유권 확인

GetObject 또는 HeadObject 요청에서 발생한 AccessDenied 오류의 경우 버킷 소유자도 객체를 소유하고 있는지 확인합니다. 

또한 버킷 소유자가 읽기 권한이나 전체 제어 ACL(액세스 제어 목록) 권한을 가지고 있는지 확인합니다. 


2. 객체를 소유한 계정 확인

기본적으로 S3 객체는 해당 객체를 업로드한 AWS 계정이 소유합니다. 이는 버킷을 다른 계정에서 소유하는 경우에도 마찬가지입니다. 

다른 계정에서 버킷에 객체를 업로드할 수 있는 경우 사용자가 액세스할 수 없는 객체를 소유한 계정을 확인해야 합니다.


3. 버킷 정책 또는 IAM 사용자 정책 확인

버킷 정책 또는 관련된 IAM 사용자 정책에 액세스를 거부할 수도 있는 문이 있는지 검토합니다. 버킷에 대한 요청이 버킷 정책 또는 IAM 정책의 조건을 충족하는지 확인합니다. 

정책에 잘못된 거부 문, 누락된 작업 또는 잘못된 공백이 있는지 확인합니다. 

  • 거부 문 조건

  • 멀티 팩

  • 암호화 키

  • 특정 IP 주소

  • 특정 VPC 또는 VPC 엔드포인트

  • 특정 IAM 사용자 또는 역할


예를 들어, 다음 버킷 정책에서 Statement1은 DOC-EXAMPLE-BUCKET에서 객체(s3:GetObject)를 다운로드하기 위한 퍼블릭 액세스를 허용합니다. 

그러나, Statement2는 VPC 엔드포인트 vpce-1a2b3c4d에서 수신한 요청 외에는 DOC-EXAMPLE-BUCKET에서 객체를 다운로드하기 위한 액세스를 명시적으로 거부합니다. 

이 경우 거부문이 우선 권한을 가집니다. 이는 vpce-1a2b3c4d가 아닌 위치에서 객체의 다운로드를 시도하는 사용자에게 액세스가 거부됨을 의미합니다. 

{

  "Id": "Policy1234567890123",

  "Version": "2012-10-17",

  "Statement": [

    {

      "Sid": "Statement1",

      "Action": [

        "s3:GetObject"

      ],

      "Effect": "Allow",

      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",

      "Principal": "*"

    },

    {

      "Sid": "Statement2",

      "Action": [

        "s3:GetObject"

      ],

      "Effect": "Deny",

      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",

      "Condition": {

        "StringNotEquals": {

          "aws:SourceVpce": "vpce-1a2b3c4d"

        }

      },

      "Principal": "*"

    }

  ]

}


4. 버킷 정책 또는 IAM 정책

버킷 정책 또는 IAM 정책이 사용자에게 필요한 Amazon S3 작업을 허용하는지 확인합니다. 

예를 들어, 다음 버킷 정책은 s3:PutObjectAcl 작업을 포함하지 않습니다. 

IAM 사용자가 객체의 액세스 제어 목록(ACL)을 수정하려고 시도할 경우, 사용자에게 액세스 거부 오류가 표시됩니다. 

{

  "Id": "Policy1234567890123",

  "Version": "2012-10-17",

  "Statement": [

    {

      "Sid": "Stmt1234567890123",

      "Action": [

        "s3:PutObject"

      ],

      "Effect": "Allow",

      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",

      "Principal": {

        "AWS": [

          "arn:aws:iam::111122223333:user/Dave"

        ]

      }

    }

  ]

}


5. 기타 정책 오류

버킷 정책 또는 IAM 사용자 정책에 추가 공백 또는 잘못된 ARN이 있지 않은지 확인합니다.

예를 들어, IAM 정책에는 Amazon 리소스 이름(ARN) arn:aws:s3::: DOC-EXAMPLE-BUCKET/*에 추가 공백이 있습니다. 

이 경우 ARN은 arn:aws:s3:::%20DOC-EXAMPLE-BUCKET/으로 잘못 평가되고 IAM 사용자에게 액세스 거부 오류가 발생합니다.


6. IAM 권한 경계가 Amazon S3에 대한 액세스를 허용하는지 확인

버킷에 액세스하려는 IAM 자격 증명에 설정된 IAM 권한 경계를 검토합니다. IAM 권한 경계가 Amazon S3에 대한 액세스를 허용하는지 확인합니다. 


7. 버킷의 Amazon S3 퍼블릭 액세스 차단 설정 확인

허용되는 퍼블릭 읽기 요청에서 액세스 거부 오류가 발생하는 경우, 버킷의 Amazon S3 퍼블릭 액세스 차단 설정을 확인합니다. 

계정과 버킷 수준 모두에서 S3 퍼블릭 액세스 차단 설정을 검토합니다. 이러한 설정은 퍼블릭 읽기 액세스를 허용하는 권한을 재정의할 수 있습니다. 

Amazon S3 퍼블릭 액세스 차단 설정은 개별 버킷 또는 AWS 계정에 적용될 수 있습니다. 


8. 객체가 누락되지 않았는지 또는 객체에 특수 문자가 포함되어 있는지 확인

요청된 객체가 버킷에 있는지 확인합니다. 그렇지 않으면 요청에서 객체를 찾지 못하고 Amazon S3는 객체가 존재하지 않는다고 가정합니다. 

적절한 s3:ListBucket 권한이 없으면 404 찾을 수 없음 오류 대신 액세스 거부 오류가 표시됩니다. 


9. Amazon S3 액세스 포인트의 IAM 정책 검토

Amazon S3 액세스 포인트를 사용하여 버킷에 대한 액세스를 관리하는 경우 액세스 포인트의 IAM 정책을 검토합니다.

액세스 포인트 정책에서 부여된 권한은 기본 버킷 정책에서도 동일한 액세스를 허용하는 경우에만 유효합니다. 

버킷 정책과 액세스 포인트 정책이 올바른 권한을 부여하는지 확인합니다.


10. AWS KMS 암호화 구성 확인

AWS KMS(SSE-KMS) 암호화에 대한 다음 사항에 유의하십시오. 

IAM 사용자가 전체 권한을 가진 객체에 액세스할 수 없는 경우 해당 객체가 SSE-KMS로 암호화되었는지 확인합니다. Amazon S3 콘솔을 사용하여 객체의 서버 측 암호화 정보를 포함하는 객체 속성을 볼 수 있습니다.

객체가 SSE-KMS로 암호화된 경우 KMS 키 정책이 IAM 사용자에게 키 사용에 필요한 최소 권한을 부여하는지 확인합니다. 예를 들어 IAM 사용자가 S3 객체를 다운로드하기 위해서만 키를 사용하는 경우 IAM 사용자는 kms:Decrypt 권한이 있어야 합니다. 자세한 내용은 AWS 계정에 대한 액세스 허용 및 IAM 정책 활성화를 참조하세요.

IAM 자격 증명 및 키가 동일한 계정에 있는 경우 키 정책을 사용하여 kms:Decrypt 권한을 부여해야 합니다. 키 정책은 IAM 정책과 동일한 IAM 자격 증명을 참조해야 합니다.

IAM 사용자가 AWS KMS 키가 아닌 다른 계정에 속한 경우 IAM 정책에서도 이러한 권한을 부여해야 합니다. 예를 들어 SSE-KMS 암호화된 객체를 다운로드하려면 키 정책과 IAM 정책 모두에 KMS:Decrypt 권한을 지정해야 합니다. IAM 사용자와 KMS 키 간의 교차 계정 액세스에 대한 자세한 내용은 다른 계정의 사용자가 KMS 키를 사용하도록 허용을 참조하시면 됩니다.