クラスターEC2インスタンスのサービスロール (EC2 インスタンスプロファイル) - Amazon EMR

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

クラスターEC2インスタンスのサービスロール (EC2 インスタンスプロファイル)

クラスターEC2インスタンスのサービスロール (Amazon のEC2インスタンスプロファイルとも呼ばれますEMR) は、インスタンスの起動時に Amazon EMRクラスター内のすべてのEC2インスタンスに割り当てられる特殊なタイプのサービスロールです。Hadoop エコシステム上で実行されるアプリケーションプロセスは、このロールを引き受けることで、 AWS の他のサービスとやり取りするアクセス許可を取得します。

EC2 インスタンスのサービスロールの詳細については、「 ユーザーガイド」の「 IAMロールを使用して Amazon EC2インスタンスで実行されているアプリケーションにアクセス許可を付与するIAM」を参照してください。

重要

クラスターEC2インスタンスのデフォルトのサービスロールとそれに関連する AWS デフォルトの管理ポリシーAmazonElasticMapReduceforEC2Roleは、代替 AWS の管理ポリシーが提供されず、非推奨になる予定です。廃止されるロールとデフォルトポリシーを置き換えるには、インスタンスプロファイルを作成して指定する必要があります。

デフォルトのロールとデフォルトの管理ポリシー

  • デフォルトのロール名は 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は非推奨になる予定であり、Amazon EMRは非推奨ロールの代替 AWS マネージドデフォルトポリシーを提供しません。初期クラスターを起動するには、カスタマー管理リソースベースまたは ID ベースのポリシーを提供する必要があります。

次のポリシーステートメントは、Amazon のさまざまな機能に必要なアクセス許可の例を示していますEMR。これらのアクセス許可を使用することで、クラスターが必要とする機能やリソースにのみアクセスを制限するアクセス許可ポリシーを作成することをお勧めします。すべてのポリシーステートメントの例では、 を使用します。us-west-2 リージョンと架空の AWS アカウント ID 123456789012。 クラスターに応じてこれらを置き換えます。

カスタムロールの作成と指定の詳細については、「IAM ロールをカスタマイズする」を参照してください。

注記

のカスタムEMRロールを作成する場合はEC2、同じ名前のインスタンスプロファイルを自動的に作成する基本的なワークフローに従います。Amazon EC2 では、異なる名前のインスタンスプロファイルとロールを作成できますが、Amazon EMR はこの設定をサポートしていないため、クラスターの作成時に「無効なインスタンスプロファイル」エラーが発生します。

を使用した Amazon S3 へのデータの読み取りと書き込み EMRFS

Amazon EMRクラスターで実行されているアプリケーションが s3://mydata形式を使用してデータを参照する場合、Amazon EMRはEC2インスタンスプロファイルを使用してリクエストを行います。通常、クラスターはこの方法で Amazon S3 にデータを読み書きします。Amazon はデフォルトでクラスターEC2インスタンスのサービスロールにアタッチされたアクセス許可EMRを使用します。詳細については、「Amazon S3 へのEMRFSリクエストのIAMロールを設定する」を参照してください。

のIAMロールEMRFSはクラスターEC2インスタンスのサービスロールにアタッチされたアクセス許可にフォールバックするため、ベストプラクティスとして、 のIAMロールを使用しEMRFS、クラスターEC2インスタンスのサービスロールにアタッチされた EMRFSおよび Amazon S3 アクセス許可を制限することをお勧めします。

以下のステートメント例は、 が Amazon S3 にリクエストを行うEMRFSために必要なアクセス許可を示しています。

  • my-data-bucket-in-s3for-emrfs-reads-and--writes は、クラスターが を使用してデータおよびすべてのサブフォルダを読み書きする Amazon S3 のバケットを指定します。/*。 アプリケーションに必要なバケットとフォルダのみを追加します。

  • dynamodb アクションを許可するポリシーステートメントは、EMRFS整合性のあるビューが有効になっている場合にのみ必要です。EmrFSMetadata は、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ログ は、コンソールのログフォルダ S3 の場所、 の --log-uriオプション AWS CLI、または RunJobFlow コマンドの LogUriパラメータを使用して指定されました。詳細については、「Simple Storage Service (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 EMRリリースガイド」の「Spark のメタストアとしての AWS Glue SQL AWS データカタログの使用」、「Hive のメタストアとしての Glue データカタログの使用」、および「 AWS Glue データカタログでの Presto の使用」を参照してください。

{ "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": "*", } ] }