Amazon EMR 애플리케이션이 HTTP 403 "Access Denied" AmazonS3Exception 오류로 실패하는 이유는 무엇인가요?
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=
애플리케이션 코드에 지정된 자격 증명 또는 IAM 역할 확인
참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.
Amazon EMR 클러스터의 프라이머리 노드에서 ls 명령을 실행합니다.
aws s3 ls s3://doc-example-bucket/abc/
참고: **s3://doc-example-bucket/abc/**를 Amazon S3 경로로 바꿉니다.
이전 명령이 성공하면 자격 증명 또는 AWS Identity and Access Management(IAM) 역할로 인해 Access Denied 오류가 발생합니다.
이 문제를 해결하려면 다음 단계를 완료하십시오.
- 애플리케이션이 예상되는 자격 증명을 사용하거나 예상되는 IAM 역할을 맡는지 확인하십시오.
- 역할에 Amazon S3 경로에 대한 권한이 있는지 확인하려면 AWS CLI를 사용하여 IAM 역할을 맡으십시오. 그런 다음 S3 경로에 샘플 요청을 수행합니다.
Amazon EC2 인스턴스 프로필 역할의 정책 확인
Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스 프로필에 S3 버킷의 필수 읽기 및 쓰기 권한이 없는 경우 Access Denied 오류가 발생할 수 있습니다.
**참고:**기본적으로 애플리케이션은 Amazon EC2 인스턴스 프로파일의 IAM 역할에서 Amazon S3 액세스 권한을 얻습니다. 이 역할에 연결된 IAM 정책이 원본 및 대상 버킷에서 필요한 S3 작업을 허용하는지 확인하십시오.
필요한 읽기 권한이 있는지 확인하려면 ls 명령을 실행합니다.
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 정책 예제:
{ "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 역할 확인 **
보안 구성을 사용하여 Amazon EMR File System(EMRFS)의 IAM 역할을 지정한다면 역할 매핑을 사용하는 것입니다. 애플리케이션은 역할 매핑 구성을 기반으로 IAM 역할에서 S3 권한을 상속합니다.
역할에 연결된 IAM 정책에는 원본 및 대상 버킷에 필요한 S3 권한이 있어야 합니다. Amazon S3으로 보내는 EMRFS 요청에 IAM 역할을 지정하려면 EMRFS용 IAM 역할을 사용하여 보안 구성 설정을 참조하십시오.
Amazon S3 VPC 엔드포인트 정책 확인
EMR 클러스터의 서브넷 라우팅 테이블에 Amazon S3 가상 프라이빗 클라우드(VPC) 엔드포인트 경로가 있는 경우, 엔드포인트 정책이 필수 Amazon S3 작업을 허용하는지 확인하십시오.
AWS CLI 사용
describe-vpc-endpoints AWS CLI 명령을 실행하여 엔드포인트 정책을 확인합니다.
aws ec2 describe-vpc-endpoints --vpc-endpoint-ids "vpce-########"
참고: **vpce-########**을 VPC ID로 바꾸십시오.
modify-vpc-endpoint 명령을 실행하여 엔드포인트 정책을 수정합니다.
aws ec2 modify-vpc-endpoint --vpc-endpoint-id "vpce-########" --policy-document file://policy.json
참고: --vpc-endpoint-id와 JSON 파일 경로를 바꾸십시오.
Amazon VPC 콘솔 사용
다음 단계를 완료합니다.
- Amazon VPC 콘솔을 엽니다.
- 탐색 창에서 **Endpoints(엔드포인트)**를 선택합니다.
- EMR 클러스터의 서브넷 라우팅 테이블에 있는 Amazon S3 엔드포인트를 선택합니다.
- Policy(정책) 탭을 선택합니다.
- **Edit Policy(정책 편집)**를 선택합니다.
S3 소스 및 대상 버킷 정책 확인
버킷 정책은 보안 주체에 허용 또는 거부되는 작업을 지정합니다. 원본 및 대상 버킷 정책에서 인스턴스 프로필 역할 또는 매핑된 IAM 역할을 허용하여 필수 Amazon S3 작업을 할 수 있도록 해야 합니다.
버킷 정책을 수정하려면 AWS CLI 또는 Amazon S3 콘솔을 사용합니다.
AWS CLI 사용
get-bucket-policy 명령을 실행하여 버킷 정책을 가져옵니다.
aws s3api get-bucket-policy --bucket doc-example-bucket
참고: doc-example-policy를 원본 또는 대상 버킷의 이름으로 바꿉니다.
정책을 수정하고, 정책을 JSON 파일에 저장합니다.
이후 put-bucket-policy 명령을 실행하여 수정된 정책을 버킷에 추가합니다.
aws s3api put-bucket-policy --bucket doc-example-bucket --policy file://policy.json
참고: 버킷 이름과 JSON 파일 경로를 교체하십시오.
Amazon S3 콘솔 사용
지침은 Amazon 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 오류로 실패하는 이유는 무엇인가요?
관련 콘텐츠
- 질문됨 일 년 전lg...
- 질문됨 3달 전lg...
- AWS 공식업데이트됨 2년 전