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

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

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

クラスター EC2 インスタンスのサービスロール (Amazon EMR の EC2 インスタンスプロファイルとも呼ばれます) は、インスタンスの起動時に 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 インスタンスのサービスロールの作成」を参照してください。

以下は、のバージョン 3 の内容を示しています。AmazonElasticMapReduceforEC2Role

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

最低限のアクセス権限を持つクラスター EC2 インスタンスのサービスロールの作成

ベストプラクティスとして、クラスター EC2 インスタンス用のサービスロールと、アプリケーションで必要とされる他の AWS サービスへの最低限のアクセス許可を持つアクセス権限ポリシーを作成することを強くお勧めします。

デフォルトの管理ポリシー (AmazonElasticMapReduceforEC2Role) が提供するアクセス許可を使用すると、最初のクラスターを簡単に起動できます。ただし、AmazonElasticMapReduceforEC2Roleは非推奨のパスにあり、Amazon EMR は、非推奨のロールに対する AWS 管理デフォルトポリシーを置き換えるものではありません。初期クラスターを起動するには、カスタマー管理リソースベースまたは ID ベースのポリシーを指定する必要があります。

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

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

注記

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

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

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

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

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

  • my-data-bucket-in-s3-for-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:HeadBucket" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "sqs:GetQueueUrl", "sqs:DeleteMessageBatch", "sqs:ReceiveMessage", "sqs:DeleteQueue", "sqs:SendMessage", "sqs:CreateQueue" ], "Resource": "arn:aws:sqs:us-west-2:123456789012:EMRFS-Inconsistency-*" } }

Amazon S3 へのログファイルのアーカイブ

次のポリシーステートメントでは、指定された Amazon S3 の場所にログファイルをアーカイブすることを Amazon EMR クラスターに許可します。以下の例では、クラスターが作成されると、s3://MyLoggingBucket/MyEMRClusterLogs を使用して指定されましたログフォルダS3 の場所を使用して、コンソールで--log-uriオプションAWS、またはLogUriパラメータ内のRunJobFlowコマンド。詳細については、「Amazon S3 へのログファイルのアーカイブ」を参照してください。

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

デバッグツールの使用

次のポリシーステートメントでは、Amazon EMR デバッグツールを有効にする場合に必要となるアクションを許可します。デバッグには、Amazon S3 へのログファイルのアーカイブと、上の例に示した関連するアクセス許可が必要です。詳細については、「デバッグツールを有効にする」を参照してください。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sqs:GetQueueUrl", "sqs:SendMessage" ], "Resource": "arn:aws:sqs:us-west-2:123456789012:AWS-ElasticMapReduce-*" } ] }

AWS Glue データカタログの使用

次のポリシーステートメントでは、アプリケーションのメタストアとして AWS Glue データカタログを使用する場合は必要となるアクションを許可します。詳細については、「」を参照してください。AWS Glue データカタログを Spark SQL のメタストアとして使用するHive のメタストアとして AWS Glue データカタログを使用する, およびAWS Glue データカタログでの Presto の使用()Amazon 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": "*", } ] }