클러스터 EC2 인스턴스의 서비스 역할 (EC2인스턴스 프로필) - 아마존 EMR

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

클러스터 EC2 인스턴스의 서비스 역할 (EC2인스턴스 프로필)

클러스터 EC2 인스턴스의 서비스 역할 (Amazon의 EC2 인스턴스 프로필이라고도 함EMR) 은 인스턴스 시작 시 Amazon EMR 클러스터의 모든 EC2 인스턴스에 할당되는 특수한 유형의 서비스 역할입니다. Hadoop 에코시스템의 상단에서 실행되는 애플리케이션 프로세스는 다른 AWS 제품과 상호 작용하기 위한 권한에 대해 이 역할을 수임합니다.

EC2인스턴스의 서비스 역할에 대한 자세한 내용은 사용 IAM설명서의 IAM역할을 사용하여 Amazon EC2 인스턴스에서 실행되는 애플리케이션에 권한 부여를 참조하십시오.

중요

클러스터 EC2 인스턴스의 기본 서비스 역할 및 관련 AWS 기본 관리형 정책은 지원 중단될 예정이며 대체 AWS 관리형 정책은 제공되지 않습니다. AmazonElasticMapReduceforEC2Role 더 이상 사용되지 않는 역할과 기본 정책을 대체할 인스턴스 프로파일을 생성하고 지정해야 합니다.

기본 역할 및 관리형 정책

  • 기본 역할 이름은 EMR_EC2_DefaultRole입니다.

  • EMR_EC2_DefaultRole 기본 관리형 정책(AmazonElasticMapReduceforEC2Role)은 곧 지원이 종료될 예정입니다. EC2인스턴스 프로필에 기본 관리형 정책을 사용하는 대신, Amazon이 EMR 필요로 하는 S3 버킷 및 기타 리소스에 리소스 기반 정책을 적용하거나, IAM 역할을 인스턴스 프로필로 사용하는 자체 고객 관리형 정책을 사용하십시오. 자세한 내용은 최소 권한 권한을 가진 클러스터 인스턴스에 대한 서비스 역할 생성 EC2 단원을 참조하십시오.

다음은 AmazonElasticMapReduceforEC2Role의 버전 3 콘텐츠를 보여줍니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Resource": "*", "Action": [ "cloudwatch:*", "dynamodb:*", "ec2:Describe*", "elasticmapreduce:Describe*", "elasticmapreduce:ListBootstrapActions", "elasticmapreduce:ListClusters", "elasticmapreduce:ListInstanceGroups", "elasticmapreduce:ListInstances", "elasticmapreduce:ListSteps", "kinesis:CreateStream", "kinesis:DeleteStream", "kinesis:DescribeStream", "kinesis:GetRecords", "kinesis:GetShardIterator", "kinesis:MergeShards", "kinesis:PutRecord", "kinesis:SplitShard", "rds:Describe*", "s3:*", "sdb:*", "sns:*", "sqs:*", "glue:CreateDatabase", "glue:UpdateDatabase", "glue:DeleteDatabase", "glue:GetDatabase", "glue:GetDatabases", "glue:CreateTable", "glue:UpdateTable", "glue:DeleteTable", "glue:GetTable", "glue:GetTables", "glue:GetTableVersions", "glue:CreatePartition", "glue:BatchCreatePartition", "glue:UpdatePartition", "glue:DeletePartition", "glue:BatchDeletePartition", "glue:GetPartition", "glue:GetPartitions", "glue:BatchGetPartition", "glue:CreateUserDefinedFunction", "glue:UpdateUserDefinedFunction", "glue:DeleteUserDefinedFunction", "glue:GetUserDefinedFunction", "glue:GetUserDefinedFunctions" ] } ] }

서비스 역할은 다음 신뢰 정책을 사용해야 합니다.

{ "Version": "2008-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

최소 권한 권한을 가진 클러스터 인스턴스에 대한 서비스 역할 생성 EC2

가장 좋은 방법은 애플리케이션에 필요한 다른 서비스에 대한 최소 권한을 가진 클러스터 EC2 인스턴스 및 권한 정책에 대한 AWS 서비스 역할을 생성하는 것입니다.

기본 관리형 정책인 AmazonElasticMapReduceforEC2Role은 초기 클러스터를 쉽게 시작할 수 있는 권한을 제공합니다. 하지만 AmazonElasticMapReduceforEC2Role 은 (는) 지원 EMR 중단될 예정이며 Amazon은 지원 중단된 역할에 대한 대체 AWS 관리형 기본 정책을 제공하지 않을 예정입니다. 초기 클러스터를 시작하려면 고객 관리형 리소스 기반 또는 ID 기반 정책을 제공해야 합니다.

다음 정책 설명은 Amazon의 다양한 기능에 필요한 권한의 예를 제공합니다EMR. 이러한 권한을 사용하여 클러스터에 필요한 기능과 리소스에 대한 액세스만 제한하는 권한 정책을 생성하는 것이 좋습니다. 모든 예제 정책 설명은 다음을 사용합니다.us-west-2 지역 및 가상 AWS 계정 ID 123456789012. 클러스터에 맞게 교체하십시오.

사용자 지정 역할 생성 및 지정에 대한 자세한 내용은 IAM역할 사용자 지정 단원을 참조하세요.

참고

에 대해 EC2 사용자 지정 EMR 역할을 생성하는 경우 동일한 이름의 인스턴스 프로필이 자동으로 생성되는 기본 워크플로를 따르십시오. EC2Amazon에서는 다른 이름으로 인스턴스 프로필과 역할을 생성할 수 있지만 EMR Amazon은 이 구성을 지원하지 않으므로 클러스터를 생성할 때 “잘못된 인스턴스 프로필” 오류가 발생합니다.

를 사용하여 Amazon S3에 데이터 읽기 및 쓰기 EMRFS

Amazon EMR 클러스터에서 실행되는 애플리케이션이 s3://mydata 형식을 사용하여 데이터를 참조하면 EMR Amazon은 EC2 인스턴스 프로필을 사용하여 요청합니다. 클러스터는 일반적으로 이러한 방식으로 Amazon S3에 데이터를 읽고 쓰며, Amazon은 기본적으로 클러스터 EC2 인스턴스의 서비스 역할에 연결된 권한을 EMR 사용합니다. 자세한 내용은 Amazon S3에 대한 EMRFS 요청에 대한 IAM 역할을 구성합니다. 단원을 참조하십시오.

의 역할은 클러스터 인스턴스의 서비스 IAM 역할에 연결된 권한으로 대체되므로, 가장 좋은 방법은 클러스터 EC2 인스턴스의 IAM 역할을 사용하고 클러스터 EC2 인스턴스의 서비스 역할에 연결된 Amazon S3 권한을 제한하는 것이 좋습니다. EMRFS EMRFS EMRFS

아래 샘플 설명은 Amazon S3에 요청하는 데 EMRFS 필요한 권한을 보여줍니다.

  • my-data-bucket-in-s3- -쓰기 for-emrfs-reads-and 클러스터가 다음을 사용하여 데이터와 모든 하위 폴더를 읽고 쓰는 Amazon S3의 버킷을 지정합니다./*. 애플리케이션에 필요한 버킷과 폴더만 추가하세요.

  • dynamodb작업을 허용하는 정책 설명은 EMRFS Consistent View가 활성화된 경우에만 필요합니다.E mrFSMetadata EMRFS일관된 보기를 위한 기본 폴더를 지정합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:AbortMultipartUpload", "s3:CreateBucket", "s3:DeleteObject", "s3:GetBucketVersioning", "s3:GetObject", "s3:GetObjectTagging", "s3:GetObjectVersion", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:ListBucketVersions", "s3:ListMultipartUploadParts", "s3:PutBucketVersioning", "s3:PutObject", "s3:PutObjectTagging" ], "Resource": [ "arn:aws:s3:::my-data-bucket-in-s3-for-emrfs-reads-and-writes", "arn:aws:s3:::my-data-bucket-in-s3-for-emrfs-reads-and-writes/*" ] }, { "Effect": "Allow", "Action": [ "dynamodb:CreateTable", "dynamodb:BatchGetItem", "dynamodb:BatchWriteItem", "dynamodb:PutItem", "dynamodb:DescribeTable", "dynamodb:DeleteItem", "dynamodb:GetItem", "dynamodb:Scan", "dynamodb:Query", "dynamodb:UpdateItem", "dynamodb:DeleteTable", "dynamodb:UpdateTable" ], "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/EmrFSMetadata" }, { "Effect": "Allow", "Action": [ "cloudwatch:PutMetricData", "dynamodb:ListTables", "s3:ListBucket" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "sqs:GetQueueUrl", "sqs:ReceiveMessage", "sqs:DeleteQueue", "sqs:SendMessage", "sqs:CreateQueue" ], "Resource": "arn:aws:sqs:us-west-2:123456789012:EMRFS-Inconsistency-*" } ] }

Amazon S3에 로그 파일 아카이브

다음 정책 설명은 Amazon EMR 클러스터가 로그 파일을 지정된 Amazon S3 위치에 보관할 수 있도록 허용합니다. 아래 예시에서는 클러스터를 생성할 때 s3://MyLoggingBucket/M 로그 yEMRCluster 콘솔의 Log 폴더 S3 위치를 사용하거나, 의 --log-uri 옵션을 사용하거나 AWS CLI, RunJobFlow 명령의 LogUri 파라미터를 사용하여 지정되었습니다. 자세한 내용은 Amazon S3에 로그 파일 아카이브 단원을 참조하십시오.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::MyLoggingBucket/MyEMRClusterLogs/*" } ] }

AWS Glue 데이터 카탈로그 사용

다음 정책 설명에서는 AWS Glue Data Catalog를 애플리케이션의 메타스토어로 사용하는 경우 필요한 작업을 허용합니다. 자세한 내용은 Amazon 릴리스 가이드의 AWS Glue 데이터 카탈로그를 Spark용 메타스토어로 사용 SQL, Glue 데이터 카탈로그를 Hive용 메타스토어로 사용, AWS Glue 데이터 카탈로그와 함께 Presto를 Glue AWS 데이터 카탈로그와 함께 사용을 참조하십시오. EMR

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:CreateDatabase", "glue:UpdateDatabase", "glue:DeleteDatabase", "glue:GetDatabase", "glue:GetDatabases", "glue:CreateTable", "glue:UpdateTable", "glue:DeleteTable", "glue:GetTable", "glue:GetTables", "glue:GetTableVersions", "glue:CreatePartition", "glue:BatchCreatePartition", "glue:UpdatePartition", "glue:DeletePartition", "glue:BatchDeletePartition", "glue:GetPartition", "glue:GetPartitions", "glue:BatchGetPartition", "glue:CreateUserDefinedFunction", "glue:UpdateUserDefinedFunction", "glue:DeleteUserDefinedFunction", "glue:GetUserDefinedFunction", "glue:GetUserDefinedFunctions" ], "Resource": "*", } ] }