クラスター 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 インスタンスのサービスロールの作成」を参照してください。

以下は、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 ロールのカスタマイズ」を参照してください。

注記

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 アクセス許可に制限することをお勧めします。

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

  • 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: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 S3 の場所にログファイルをアーカイブすることを Amazon EMR クラスターに許可します。以下の例では、クラスターの作成時に、コンソールのログフォルダ S3 の場所--log-uriのオプション、または RunJobFlow コマンドの LogUriパラメータを使用して AWS CLIが指定されs3://MyLoggingBucket/MyEMRClusterLogsました。詳細については、「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 SQL のメタストア AWS としての AWS Glue データカタログの使用」、「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": "*", } ] }