Amazon EMR
管理ガイド

IAM ポリシーを使用してユーザーのアクセス権限を許可または拒否する

Amazon EMR は AWS Identity and Access Management (IAM) ポリシーをサポートします。IAM は AWS カスタマーがユーザーおよびそのユーザー権限を管理できるウェブサービスです。IAM を使用してポリシーを作成し、ユーザーやグループなどのプリンシパルにアタッチすることができます。ポリシーは、アクセス権限を許可または拒否し、Amazon EMR およびその他の AWS リソースを使用してユーザーが実行できるアクションを決定します。たとえば、ユーザーに対し、AWS アカウントで EMR クラスターを表示してそれらを作成または削除しないことを許可できます。また、EMR クラスターにタグを追加し、そのタグを使用して個々のクラスターのユーザーまたは同じタグを共有しているクラスターのグループに詳細に調整されたアクセス権限を適用することができます。

IAM は、すべての AWS アカウント所有者であれば誰でも無料で利用できます。IAM へのサインアップは不要です。Amazon EMR コンソールおよび AWS CLI 経由で IAM を使用できます。また、Amazon EMR API および AWS SDK を使用してプログラムで使用することもできます。

IAM ポリシーは、最小権限の原則に準拠しています。つまりアクセス権限が許可されるまでユーザーはアクションを実行できないことを意味します。詳細については、IAM ユーザーガイド を参照してください。

ユーザーベースの IAM ポリシーの Amazon EMR アクション

Amazon EMR の IAM ユーザーポリシーでは、すべての Amazon EMR アクションには、小文字の elasticmapreduce 要素がプレフィックスとして付けられます。ワイルドカード文字 (*) を使用して、"elasticmapreduce:*" キーを指定し、Amazon EMR に関連するすべてのアクションを指定するか、たとえば、"elasticmapreduce:Describe*" などのアクションのサブセットを許可することができます。たとえば、"elasticmapreduce:DescribeCluster" などの個々の Amazon EMR アクションも明示的に指定できます。すべての Amazon EMR アクションのリストについては、Amazon EMR API Reference で API アクション名を参照してください。Amazon EMR は、Amazon EC2 および Amazon S3 などの他のサービスに依存するため、ユーザーはこれらのサービスと同様にアクセス権限のサブセットを許可される必要があります。詳細については、「フルアクセスするため IAM 管理ポリシー」を参照してください。

注記

Amazon EMR コンソールにアクセスするには、少なくとも、IAM ユーザーは次のアクションを許可する、アタッチされた IAM ポリシーを持っている必要があります。

elasticmapreduce:ListClusters

アクセス権限とポリシーの詳細については、IAM ユーザーガイド の「アクセス管理」を参照してください。

Amazon EMR はリソースベースのポリシーおよびリソースレベルのポリシーをサポートしませんが、Condition 要素 (Condition ブロックと呼ばれる) を使用して、クラスタータグに基づいた詳細なアクセス権限を指定できます。詳細については、「IAM ポリシーを使用したクラスターのタグ付けによるクラスター固有のコントロール」を参照してください。Amazon EMR はリソースベースのポリシーまたはリソースレベルのポリシーをサポートしていないため、Resource 要素には常にワイルドカード値があります。

ユーザーアクセスのために管理されたポリシーを使用する

必要な Amazon EMR アクションにフルアクセスまたは読み取り専用アクセスを付与する最も簡単な方法は、Amazon EMR の IAM 管理ポリシーを使用することです。管理ポリシーは、アクセス権限の条件が変更された場合に、自動的に更新されるというメリットを提供します。インラインポリシーを使用する場合は、サービスの変更によってアクセス許可エラーが発生する場合があります。

これらのポリシーには、Amazon EMR のアクションだけでなく、Amazon EMR がインスタンスの起動、ログファイルの書き込み、Hadoop ジョブとタスクの管理などのアクションの実行に使用する、Amazon EC2、Amazon S3、および Amazon CloudWatch のアクションが含まれています。カスタムポリシーを作成するには、管理ポリシーから始め、条件にしたがって編集することをお勧めします。

IAM ユーザー (プリンシパル) にポリシーをアタッチする方法については、IAM ユーザーガイドAWS マネジメントコンソール での管理ポリシーの使用を参照してください。

フルアクセスするため IAM 管理ポリシー

Amazon EMR にすべての必要なアクションを許可するには、AmazonElasticMapReduceFullAccess 管理ポリシーをアタッチします。このポリシーの内容を以下に示します。Amazon EMR がその他のサービスに必要とするすべてのアクションを明らかにします。

このポリシーのバージョン 6 のコンテンツを以下に示します。AmazonElasticMapReduceFullAccess ポリシーは自動的に更新されるため、次に示すポリシーは最新のものでない可能性があります。AWS マネジメントコンソール を使用して最新のポリシーを表示します。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "cloudwatch:*", "cloudformation:CreateStack", "cloudformation:DescribeStackEvents", "ec2:AuthorizeSecurityGroupIngress", "ec2:AuthorizeSecurityGroupEgress", "ec2:CancelSpotInstanceRequests", "ec2:CreateRoute", "ec2:CreateSecurityGroup", "ec2:CreateTags", "ec2:DeleteRoute", "ec2:DeleteTags", "ec2:DeleteSecurityGroup", "ec2:DescribeAvailabilityZones", "ec2:DescribeAccountAttributes", "ec2:DescribeInstances", "ec2:DescribeKeyPairs", "ec2:DescribeRouteTables", "ec2:DescribeSecurityGroups", "ec2:DescribeSpotInstanceRequests", "ec2:DescribeSpotPriceHistory", "ec2:DescribeSubnets", "ec2:DescribeVpcAttribute", "ec2:DescribeVpcs", "ec2:DescribeRouteTables", "ec2:DescribeNetworkAcls", "ec2:CreateVpcEndpoint", "ec2:ModifyImageAttribute", "ec2:ModifyInstanceAttribute", "ec2:RequestSpotInstances", "ec2:RevokeSecurityGroupEgress", "ec2:RunInstances", "ec2:TerminateInstances", "elasticmapreduce:*", "iam:GetPolicy", "iam:GetPolicyVersion", "iam:ListRoles", "iam:PassRole", "kms:List*", "s3:*", "sdb:*", "support:CreateCase", "support:DescribeServices", "support:DescribeSeverityLevels" ], "Effect": "Allow", "Resource": "*" }, { "Effect": "Allow", "Action": "iam:CreateServiceLinkedRole", "Resource": "*", "Condition": { "StringLike": { "iam:AWSServiceName": [ "elasticmapreduce.amazonaws.com", "elasticmapreduce.amazonaws.com.cn" ] } } } ] }

注記

IAM ユーザーは ec2:TerminateInstances アクションを使用することにより、IAM アカウントに関連付けられている Amazon EC2 インスタンスであれば、EMR クラスターの一部でなくても終了することができます。

読み取り専用アクセスのための IAM 管理ポリシー

Amazon EMR に読み取り専用権限を付与するには、AmazonElasticMapReduceReadOnlyAccess 管理ポリシーをアタッチします。このポリシーの内容を以下に示します。elasticmapreduce 要素のワイルドカード文字は、指定文字列で始まるアクションのみが許可されるように指定します。このポリシーは明示的にアクションを拒否しないため、別のポリシーステートメントが指定したアクションへのアクセス許可に使用される場合があることに注意してください。

注記

AmazonElasticMapReduceReadOnlyAccess ポリシーは自動的に更新されるため、次に示すポリシーは最新のものでない可能性があります。AWS マネジメントコンソール を使用して最新のポリシーを表示します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:Describe*", "elasticmapreduce:List*", "elasticmapreduce:ViewEventsFromAllClustersInConsole" "s3:GetObject", "s3:ListAllMyBuckets", "s3:ListBucket", "sdb:Select", "cloudwatch:GetMetricStatistics" ], "Resource": "*" } ] }

ユーザーアクセス権限にインラインポリシーを使用する

ポリシーをカスタマイズするには、管理ポリシーから始め、要件に従って、アクセス権限および条件を変更することをお勧めします。

重要

サービス要件が変更されても、インラインポリシーは自動的に更新されません。インラインポリシーを作成してアタッチすると、サービスの更新によって突然アクセス権限エラーが発生することがあります。詳細については、『IAM ユーザーガイド』および『クラスター作成時にカスタムの IAM ロールを指定する』の「管理ポリシーとインラインポリシー」を参照してください。

AmazonElasticMapReduceFullAccess は、ユーザーに Amazon EMR に対する完全なアクセス権限を持たせるデフォルトの管理ポリシーで、すべてのリソースに対して iam:PassRole アクセス権限を許可するステートメントを含みます。このステートメントにより、ユーザーはロールを他の AWS サービスに移動して、Amazon EMR がユーザーに代わってこれらのサービスと対話できるようにすることができます。

より限定的なポリシーを実装するには、適切なユーザーまたはグループにインラインポリシーを添付して、Amazon EMR に固有のロール iam:PassRole のみを許可します。次の例では、デフォルトおよび Amazon EMR ロールである EMR_DefaultRoleEMR_EC2_DefaultRole、および EMR_AutoScalingDefaultRoleiam:PassRole アクセス権限のみを許可するステートメントについて説明します。カスタムロールを使用する場合は、デフォルトのロール名をカスタムロール名に置き換えてください。

{ "Action": "iam:PassRole", "Effect": "Allow", "Resource": [ "arn:aws:iam::*:role/EMR_DefaultRole", "arn:aws:iam::*:role/EMR_EC2_DefaultRole", "arn:aws:iam::*:role/EMR_AutoScaling_DefaultRole" ] }

Amazon EMR のロールの詳細については、「Amazon EMR のアクセス許可の IAM ロールを AWS に設定する」を参照してください。

IAM ポリシーを使用したクラスターのタグ付けによるクラスター固有のコントロール

次の IAM ユーザーポリシーの Amazon EMR 条件コンテキストキーとともに Condition 要素 (Condition ブロックとも呼ばれます) を使用して、クラスタータグに基づいてアクセスを制御することができます。

  • elasticmapreduce:ResourceTag/TagKeyString 条件コンテキストキーを使用して、特定のタグを持つクラスターのユーザーアクションを許可または拒否します。

  • アクション/API コールを持つ特定のタグを必要としている elasticmapreduce:RequestTag/TagKeyString 条件コンテキストキーを使用します。

重要

条件コンテキストキーは、リクエストパラメータとして ClusterID を必要とする Amazon EMR API アクションにのみ適用されます。たとえば、ModifyInstanceGroups アクションはコンテキストキーをサポートしません。ClusterID はオプションのパラメータではないからです。

すべての Amazon EMR アクションのリストについては、Amazon EMR API Reference で API アクション名を参照してください。Condition 要素と条件演算子については、IAM ユーザーガイド の「IAM ポリシーエレメントのリファレンス」で、特に文字列条件演算子を参照してください。EMR クラスターにタグを追加する方法の詳細については、「EMR クラスターにタグを付ける」を参照してください。

Amazon EMR ポリシーステートメントの例

次の例では、Amazon EMR 条件コンテキストキーで条件演算子を使用する別のシナリオと方法について説明しています。これらの IAM ポリシーステートメントは、デモンストレーションのみを目的としており、本稼働環境で使用しないでください。要件に応じて、アクセス権限を付与または拒否するようにポリシーステートメントを組み合わせる複数の方法があります。IAM ポリシーの計画およびテストの詳細については、IAM ユーザーガイド を参照してください。

特定のタグの値があるクラスター上でのみアクションを許可する

次の例では、ユーザーが、departmentdev が設定されたクラスター値タグに基づいてアクションを実行し、同じタグが設定されたクラスターにタグ付けすることができるポリシーを示します。最後のポリシー例では、同じタグ以外では EMR クラスターにタグ付けする権限を拒否する方法について説明します。

重要

アクションをタグ付けするための権限を明示的に拒否することは重要な考慮事項です。これにより、ユーザーが付与する意図のないクラスタータグを介して自身にアクセス権限を付与することを防ぎます。最後の例で示されているアクションが拒否されていないと、ユーザーは、クラスターに対して選択したタグを追加および削除し、前述のポリシーの意思を回避できます。

次のポリシーの例では、StringEquals条件付き演算子はdevタグの値department と一致することを試みます。タグ department がクラスターに追加されていない、または値 dev を含んでいない場合は、ポリシーは適用されず、このアクションは、ポリシーによって許可されません。アクションを許可するポリシーステートメントが他にない場合は、ユーザーはこの値を持つこのタグを持っているクラスターとのみ作業できます。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt12345678901234", "Effect": "Allow", "Action": [ "elasticmapreduce:DescribeCluster", "elasticmapreduce:ListSteps", "elasticmapreduce:TerminateJobFlows", "elasticmapreduce:SetTerminationProtection", "elasticmapreduce:ListInstances", "elasticmapreduce:ListInstanceGroups", "elasticmapreduce:ListBootstrapActions", "elasticmapreduce:DescribeStep" ], "Resource": [ "*" ], "Condition": { "StringEquals": { "elasticmapreduce:ResourceTag/department": "dev" } } } ] }

条件付き演算子を使用して複数のタグ値を指定できます。たとえば、department タグに値 dev または test が含まれるクラスターですべてのアクションを許可するには、以下のように、前術の例のような条件ブロックを置き換えることもできます。

"Condition": { "StringEquals": { "elasticmapreduce:ResourceTag/department":["dev", "test"] } }

前述の例のように、次のポリシー例では同じタグの一致を検索します。dev タグの値 department。ただし、この場合、RequestTag 条件コンテキストのキーにより、ポリシーがタグの作成時に適用されるように指定するため、ユーザーは任意の値に一致するタグを作成する必要があります。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1479334524000", "Effect": "Allow", "Action": [ "elasticmapreduce:RunJobFlow", "iam:PassRole" ], "Resource": [ "*" ], "Condition": { "StringEquals": { "elasticmapreduce:RequestTag/department": "dev" } } } ] }

次の例では、タグの追加と削除を許可する EMR アクションは、以前の例で参照した StringNotEquals タグを指定する dev 演算子と結合します。このポリシーの効果は、department 値を格納する dev タグを使用してタグ付けされる EMR クラスターに任意のタグを追加または削除するユーザー権限を拒否することにあります。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "elasticmapreduce:AddTags", "elasticmapreduce:RemoveTags" ], "Condition": { "StringNotEquals": { "elasticmapreduce:ResourceTag/department": "dev" } }, "Resource": [ "*" ] } ] }

タグの値に関わらず、特定のタグがあるクラスター上でアクションを許可する

タグ値にかかわらず、特定のタグを持つクラスターでのみアクションを許可できます。これを行うには、Null を使用できます。詳細については、IAM ユーザーガイド条件キーの有無をチェックする条件演算子を参照してください。たとえば、department タグを持つ EMR クラスターでのみアクションを許可するには、それが含んでいる値にかかわらず、次のいずれかを持つ、前述の例のような条件ブロックを置き換えることもできます。Null 演算子は EMR クラスターでタグ department の存在を探します。タグがある場合、このポリシーステートメントに指定された条件に合致し、Null ステートメントは false と評価され、適切なアクションが許可されます。

"Condition": { "Null": { "elasticmapreduce:ResourceTag/department":"false" } }

次のポリシーステートメントは、クラスターに任意の値を含めることができる department タグがある場合のみ、ユーザーに EMR クラスターを作成することを許可します。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "elasticmapreduce:RunJobFlow", "iam:PassRole" ], "Condition": { "Null": { "elasticmapreduce:RequestTag/department": "false" } }, "Effect": "Allow", "Resource": [ "*" ] } ] }

クラスターの作成時にユーザーにタグを追加することを要求する

次のポリシーステートメントはクラスターに作成されたとき、値 department を格納する dev タグがある場合に限り、ユーザーはEMRクラスターを作成することができます。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "elasticmapreduce:RunJobFlow", "iam:PassRole" ], "Condition": { "StringEquals": { "elasticmapreduce:RequestTag/department": "dev" } }, "Effect": "Allow", "Resource": [ "*" ] } ] }