리소스 모두가 동일한 AWS 계정에 있는 Amazon S3 버킷에서 발생하는 403 액세스 거부 오류를 해결하려면 어떻게 해야 하나요?

4분 분량
0

Amazon Simple Storage Service(S3) 버킷에 액세스하고 싶습니다. 관련 리소스 모두가 동일한 AWS 계정에서 제공됩니다. 그런데 “403 액세스 거부” 오류가 발생합니다.

간략한 설명


Amazon S3 버킷에 금지된 요청을 수행할 경우 서비스에서 "403 액세스 거부" 오류를 반환합니다. 403 액세스 거부 오류를 수동으로 해결하려면 Amazon S3에서 403 액세스 거부 오류를 해결하려면 어떻게 하나요?를 참고하세요.

AWS 시스템 관리자AWS지원-문제해결S3AccessSameAccount 런북을 사용하여 Amazon S3 버킷에서 액세스 거부 문제를 진단할 수도 있습니다. 이 런북은 동일한 AWS 계정의 모든 관련 리소스에 대해 Amazon S3 리소스에서 요청자에게 부여된 액세스 수준을 평가합니다. 여기에는 Amazon S3 리소스 관련 액세스, 사용자, 리소스 기반 정책이 포함됩니다. 또한 AWS ID 및 액세스 관리 (IAM) 사용자 또는 입력 파라미터에 지정된 역할도 포함됩니다.

참고: AWSSupport-TroubleshootS3AccessSameAccount는 교차 계정 리소스에 대한 사용 권한을 평가하지 않습니다. 또한 요청자는 Amazon S3 버킷 또는 개체와 동일한 AWS 계정에 있어야 합니다.

해결 방법

필요한 단계

다음 단계에 따라 시스템 관리자 콘솔에서 AWSSupport-TroubleshootS3AccessSameAccount 런북을 실행합니다.

1.    시스템 관리자 콘솔을 엽니다.

  1. 탐색 창에서 자동화를 선택합니다.

3.    Execute automation(자동화 실행)을 선택합니다.

  1. 문서 선택에서 Amazon 소유 탭을 선택합니다.

  2. 자동화 문서 검색창의 드롭다운 목록에서 문서 이름 접두사 필터를 선택합니다. 그런 다음 드롭다운 목록에서 Equals를 선택하고 AWSSupport-TroubleshootS3AccessSameAccount를 입력합니다. 그 후 Enter키를 누릅니다.

  3. AWSSupport-TroubleshootS3AccessSameAccount를 선택합니다.

7.    Next(다음)를 선택합니다.

  1. 간단한 실행을 선택합니다.

  2. S3ResourceArn에 문제를 해결하려는 S3 버킷이나 개체의 ARN을 입력합니다. 예를 들어, 개체의 업로드나 다운로드를 테스트할 수 있습니다.

arn:aws:s3:::bucket_name/key_name

10.S3Action의 경우, 런북에서 평가할 S3 작업을 선택합니다.

11.RequesterARN에 특정 S3 리소스에서 액세스 수준을 찾으려는 IAM 사용자 또는 역할 ARN을 입력합니다.

arn:aws:iam::123456789012:user/user_name or arn:aws:iam::123456789012:role/example-rol

12.    실행을 선택합니다.

실행 상태를 사용하여 문서의 진행 상황을 추적합니다. 상태가 성공으로 변경되면 출력 섹션에 나온 결과를 검토합니다. 결과에는 평가하는 각 개체의 오류 코드가 포함되어 있습니다.
참고: 평가에서 개별 단계의 결과를 검토하려면 실행된 단계 아래에서 관련 스텝 ID를 선택합니다.

선택적 단계

다음 단계는 선택 사항입니다.

  • AutomationAssumeRole에서 시스템 관리자가 버킷에 요청을 보내기 위해 가정할 IAM 역할을 선택할 수 있습니다. 이 필드를 비워두면 시스템 관리자가 문서 설정에 사용 중인 IAM ID를 사용합니다. 자세한 내용은 자동화에 필요한 IAM 권한 섹션을 참고하세요.
    중요: 선택한 IAM 역할의 트러스트 정책에서 시스템 관리자 자동화가 역할을 맡을 수 있도록 허용해야 합니다. 또한 IAM 역할에 AWSSupport-TroubleshootS3AccessSameAccount 런북을 실행할 수 있는 권한이 있어야 합니다.

  • IAM ARN이 역할이고 특정 세션 이름을 제공하려는 경우 RequesterRoleSessionName에 세션 이름을 입력합니다.

  • 개체에 여러 버전이 있는 경우 S3ObjectVersionId에 개체의 VersionId를 입력합니다. 이 매개 변수를 사용하면 액세스 컨텍스트를 평가할 개체의 버전을 지정할 수 있습니다.

  • 작업과 관련이 있는 경우 KmsKeyArn에 대한 KMS 키 ARN을 입력합니다. 예를 들어 KMS 키로 암호화된 개체의 다운로드를 테스트하려면 다음과 같이 하세요.

  • VpcEndpointId에 액세스 평가와 관련된 Amazon Virtual Private Cloud(VPC) 엔드포인트 ID를 입력할 수 있습니다. Amazon S3 버킷 정책은 특정 Amazon VPC 엔드포인트에서 버킷에 대한 액세스를 제어할 수 있습니다.

  • ContextKeyList에 정책 평가와 관련된 조건 컨텍스트 키 목록과 해당 값을 입력할 수 있습니다. 예를 들어, 버킷 정책에서 PutObject에 대한 명시적 거부를 입력할 수 있습니다.

    {"ContextKeyName":"s3:x-amz-server-side-encryption-aws-kms-key-id","ContextKeyValues':["arn:aws:kms:us-east-1:123456789012:key/abc12345-b1e9-45a3-aa90-39ec93dd9b82'],"ContextKeyType":"string'}
  • 런북에서 입력을 특정 AWS Organizations 서비스 제어 정책(SCP)과 비교하도록 하려면 SCPPolicy에 SCP를 입력합니다. 값을 입력할 때 새 줄, 탭 또는 화이트 스페이스를 모두 제거합니다. 조직의 관리 계정에서 런북을 실행하는 경우 이 단계가 필요하지 않습니다.

  • 태그에서는 분류를 돕기 위해 자동화에 태그를 지정할 수 있습니다.

  • AWS CLI 명령 및 공유 가능한 실행 링크의 경우, 런북은 리눅스, 유닉스 및 macOS용 AWS Command Line Interface(AWS CLI) 명령 예제를 제공합니다. 또한 런북은 공유 가능한 링크를 제공합니다.

AutomationAssumeRole에 필요한 IAM 권한

AutomationAssumeRole 매개 변수를 통해 런북을 사용하려면 실행해야 하는 특정 작업이 있습니다.

다음 예제 정책에 자동화 역할에 필요한 작업이 포함되어 있습니다.

{  
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "iam:SimulateCustomPolicy",
        "iam:GetUser",
        "iam:GetPolicy",
        "iam:GetPolicyVersion",
        "iam:ListAttachedUserPolicies",
        "iam:ListUserPolicies",
        "iam:GetUserPolicy",
        "iam:ListGroupsForUser",
        "iam:ListGroupPolicies",
        "iam:GetGroupPolicy",
        "iam:ListAttachedGroupPolicies",
        "iam:GetRole",
        "iam:GetRolePolicy",
        "iam:ListAttachedRolePolicies",
        "iam:ListRolePolicies"
      ],
      "Resource": "*",
      "Effect": "Allow"
    },
    {
      "Action": [
        "s3:GetObjectAcl",
        "s3:GetObjectVersionAcl",
        "s3:GetObject",
        "s3:GetObjectVersion"
      ],
      "Resource": "arn:aws:s3:::bucket_name/destination-prefix",
      "Effect": "Allow"
    },
    {
      "Action": [
        "s3:GetBucketPolicy",
        "s3:GetBucketAcl",
        "s3:ListBucket",
        "s3:GetBucketAcl",
        "s3:GetBucketLocation",
        "s3:ListBucket"
      ],
      "Resource": "arn:aws:s3:::bucket_name",
      "Effect": "Allow"
    },
    {
      "Action": [
        "ec2:DescribeVpcEndpoints"
      ],
      "Resource": "*",
      "Effect": "Allow"
    },
    {
      "Action": [
        "kms:GetKeyPolicy"
      ],
      "Resource": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
      "Effect": "Allow"
    },
    {
      "Action": [
        "organizations:ListPolicies",
        "organizations:DescribePolicy"
      ],
      "Resource": "arn:aws:organizations::aws:policy/service_control_policy/*",
      "Effect": "Allow"
    },
    {
      "Action": [
        "ssm:GetAutomationExecution",
        "ssm:DescribeAutomationExecutions"
      ],
      "Resource": "*",
      "Effect": "Allow"
    },
    {
      "Action": "ssm:StartAutomationExecution",
      "Resource": "arn:aws:ssm:*:*:automation-definition/AWSSupport-TroubleshootS3AccessSameAccount:*",
      "Effect": "Allow",
      "Sid": "StartAutomationExecution"
    },
    {
      "Action": "access-analyzer:ValidatePolicy",
      "Resource": "*",
      "Effect": "Allow"
    }
  ]
}
댓글 없음

관련 콘텐츠