Amazon EMR 애플리케이션이 HTTP 403 "Access Denied" AmazonS3Exception 오류로 실패하는 이유는 무엇인가요?

5분 분량
0

Amazon EMR 클러스터에 애플리케이션을 제출하면 HTTP 403 “Access Denied” AmazonS3Exception과 함께 애플리케이션에 장애가 발생합니다.

해결 방법

권한이 올바르게 구성되지 않은 경우, Amazon EMR 또는 Amazon Simple Storage Service(Amazon S3)에서 “Access Denied” 오류가 발생할 수 있습니다. 다음 메시지와 유사한 오류가 나타납니다.

java.io.IOException: com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: 8B28722038047BAA; S3 Extended Request ID: puwS77OKgMrvjd30/EY4CWlC/AuhOOSNsxfI8xQJXMd20c7sCq4ljjVKsX4AwS7iuo92C9m+GWY=), S3 Extended Request ID: puwS77OKgMrvjd30/EY4CWlC/AuhOOSNsxfI8xQJXMd20c7sCq4ljjVKsX4AwS7iuo92C9m+GWY=

먼저 애플리케이션 코드에 지정된 보안 인증 정보 또는 역할을 확인합니다.

EMR 클러스터의 마스터 노드에서 다음 명령을 실행합니다. **s3://doc-example-bucket/abc/**를 Amazon S3 경로로 바꿉니다.

aws s3 ls s3://doc-example-bucket/abc/

이 명령이 성공하면 애플리케이션 코드에 지정된 보안 인증 정보나 역할로 인해 “Access Denied” 오류가 발생하는 것입니다. 애플리케이션이 예상 보안 인증 정보를 사용하고 있거나 예상 역할을 맡고 있으며 Amazon S3 경로에 액세스할 수 있는지 확인합니다. AWS CLI를 사용하여 AWS Identity and Access Management(AWS IAM) 역할을 맡아 Amazon S3 경로에서 작업할 권한이 역할에 있는지 확인합니다. 그런 다음 S3 경로에 샘플 요청을 수행합니다.

이 명령이 실패할 경우 최신 버전의 AWS Command Line Interface(AWS CLI)를 사용하고 있는지 확인하세요. 그런 다음 다음을 확인하여 “Access Denied” 오류를 해결하세요.

Amazon EC2 인스턴스 프로필 역할의 정책을 확인하세요.

Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스 프로필에 S3 버킷의 필수 읽기 및 쓰기 권한이 없는 경우 “Access Denied” 오류가 발생할 수 있습니다.

**참고:**기본적으로 애플리케이션은 Amazon EC2 인스턴스 프로파일의 IAM 역할에서 Amazon S3 액세스 권한을 얻습니다. 이 역할에 연결된 IAM 정책이 원본 및 대상 버킷에서 필요한 S3 작업을 허용하는지 확인하세요.

이 문제를 해결하려면 다음 명령을 실행하여 필요한 읽기 권한이 있는지 확인하세요.

$ aws s3 ls s3://doc-example-bucket/myfolder/

출력은 다음과 같을 수 있습니다.

An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied

-또는-

다음 명령을 실행합니다.

$ hdfs dfs -ls s3://doc-example-bucket/myfolder

출력은 다음과 같을 수 있습니다.

ls: com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: RBT41F8SVAZ9F90B; S3 Extended Request ID: ih/UlagUkUxe/ty7iq508hYVfRVqo+pB6/xEVr5WHuvcIlfQnFf33zGTAaoP2i7cAb1ZPIWQ6Cc=; Proxy: null), S3 Extended Request ID: ih/UlagUkUxe/ty7iq508hYVfRVqo+pB6/xEVr5WHuvcIlfQnFf33zGTAaoP2i7cAb1ZPIWQ6Cc=

인스턴스 프로필 역할에 S3 버킷에 필요한 읽기 및 쓰기 권한이 있는지 확인하세요. 예를 들어, 다음 IAM 정책의 S3 작업은 S3 버킷 doc-example-bucket에 필요한 읽기 및 쓰기 액세스를 제공합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ListObjectsInBucket",
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::doc-example-bucket"
      ]
    },
    {
      "Sid": "AllObjectActions",
      "Effect": "Allow",
      "Action": "s3:*Object*",
      "Resource": [
        "arn:aws:s3:::doc-example-bucket/*"
      ]
    }
  ]
}

**EMRFS 역할 매핑을 위해 IAM 역할 확인 **

보안 구성을 사용하여 EMRFS의 IAM 역할을 지정한다면 역할 매핑을 사용하는 중입니다. 애플리케이션은 역할 매핑 구성을 기반으로 IAM 역할에서 S3 권한을 상속합니다.

이러한 역할에 연결된 IAM 정책에는 원본 및 대상 버킷에 필요한 S3 권한이 있어야 합니다. Amazon S3으로 보내는 EMRFS 요청에 IAM 역할을 지정하려면 EMRFS용 IAM 역할을 사용하여 보안 구성 설정을 참고하세요.

Amazon S3 VPC 엔드포인트 정책 확인

EMR 클러스터의 서브넷 라우팅 테이블에 Amazon S3 VPC 엔드포인트 경로가 있는 경우, 엔드포인트 정책이 필수 Amazon S3 작업을 허용하는지 확인하세요.

CLI를 사용하여 엔드포인트 정책을 확인하고 수정하려면 다음을 실행하세요.

다음 명령을 실행하여 엔드포인트 정책을 검토합니다. vpce-xxxxxxxxxx를 VPC ID로 바꾸세요.

aws ec2 describe-vpc-endpoints --vpc-endpoint-ids "vpce-xxxxxxxx"

필요할 경우 다음 명령을 실행하여 수정된 엔드포인트 정책을 업로드합니다. VPC ID와 JSON 파일 경로를 교체합니다.

aws ec2 modify-vpc-endpoint --vpc-endpoint-id "vpce-xxxxxxxx" --policy-document file://policy.json

Amazon VPC 콘솔을 사용하여 엔드포인트 정책을 확인하고 수정하려면 다음을 실행하세요.

  1. Amazon VPC 콘솔을 엽니다.
  2. 탐색 창에서 엔드포인트를 선택합니다.
  3. Amazon S3 엔드포인트(EMR 클러스터의 서브넷 라우팅 테이블에 있는 엔드포인트)를 선택합니다. 그런 다음 정책 탭을 선택하여 엔드포인트 정책을 검토합니다.
  4. 필요한 Amazon S3 작업을 추가하려면 정책 편집을 선택합니다.

S3 소스 및 대상 버킷 정책 확인

버킷 정책보안 주체에 허용 또는 거부되는 작업을 지정합니다. 원본 및 대상 버킷 정책에서 EC2 인스턴스 프로필 역할 또는 매핑된 IAM 역할을 허용하여 필수 Amazon S3 작업을 할 수 있도록 해야 합니다.

CLI를 사용하여 버킷 정책을 확인하고 수정하려면 다음을 따르세요.

다음 명령을 실행하여 버킷 정책을 검토합니다. doc-example-bucket을 원본 또는 대상 버킷의 이름으로 바꿉니다.

aws s3api get-bucket-policy --bucket doc-example-bucket

필요할 경우 다음 명령을 실행하여 수정된 버킷 정책을 업로드합니다. 버킷 이름과 JSON 파일 경로를 교체합니다.

aws s3api put-bucket-policy --bucket doc-example-bucket --policy file://policy.json

Amazon S3 콘솔을 사용하여 버킷 정책을 확인하고 수정하려면 다음을 따르세요.

  1. Amazon S3 콘솔을 엽니다.
  2. 버킷을 선택하세요.
  3. 권한 탭을 선택합니다.
  4. 버킷 정책을 검토하고 수정하려면 버킷 정책을 선택합니다.

다른 계정의 S3 버킷에 액세스하기

**중요:**애플리케이션이 다른 AWS 계정에 속한 S3 버킷에 액세스하는 경우 계정 소유자가 버킷 정책의 IAM 역할을 허용해야 합니다.

예를 들어, 다음 버킷 정책은 emr-account의 IAM 역할 및 사용자 모두에게 **s3://doc-example-bucket/myfolder/**에 액세스할 수 있는 전체 권한을 부여합니다.

{
  "Id": "MyCustomPolicy",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowRootAndHomeListingOfCompanyBucket",
      "Principal": {
        "AWS": [
          "arn:aws:iam::emr-account:root"
        ]
      },
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::doc-example-bucket"
      ],
      "Condition": {
        "StringEquals": {
          "s3:prefix": [
            "",
            "myfolder/"
          ],
          "s3:delimiter": [
            "/"
          ]
        }
      }
    },
    {
      "Sid": "AllowListingOfUserFolder",
      "Principal": {
        "AWS": [
          "arn:aws:iam::emr-account:root"
        ]
      },
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::doc-example-bucket"
      ],
      "Condition": {
        "StringLike": {
          "s3:prefix": [
            "myfolder/*"
          ]
        }
      }
    },
    {
      "Sid": "AllowAllS3ActionsInUserFolder",
      "Principal": {
        "AWS": [
          "arn:aws:iam::emr-account:root"
        ]
      },
      "Effect": "Allow",
      "Action": [
        "s3:*"
      ],
      "Resource": [
        "arn:aws:s3:::doc-example-bucket/myfolder/*",
        "arn:aws:s3:::doc-example-bucket/myfolder*"
      ]
    }
  ]
}

관련 정보

Amazon EMR에서 Spark 또는 Hive 작업이 HTTP 503 "Slow Down" AmazonS3Exception 오류로 실패하는 이유는 무엇인가요?

Amazon EMR 애플리케이션이 HTTP 404 "Access Denied" AmazonS3Exception 오류로 실패하는 이유는 무엇인가요?

오류 응답

Amazon S3의 403 Access Denied 오류를 해결하려면 어떻게 해야 하나요?

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

관련 콘텐츠