クラスターおよび EMR Notebooks に対するタグベースのアクセスの IAM ポリシー - Amazon EMR

クラスターおよび EMR Notebooks に対するタグベースのアクセスの IAM ポリシー

アイデンティティベースのポリシーで条件を使用し、タグに基づいてクラスターおよび EMR ノートブックへのアクセスを制御できます。

EMR クラスターにタグを追加する方法の詳細については、「EMR クラスターにタグを付ける」を参照してください。

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

重要

アクションをタグ付けするための権限を明示的に拒否することは重要な考慮事項です。これにより、ユーザーがリソースをタグ付けして意図せずにアクセス許可を付与することを防ぎます。リソースのタグ付けアクションを拒否しない場合、ユーザーはタグを変更して、タグベースのポリシーの意図を回避できます。

クラスターのアイデンティティベースのポリシーステートメントの例

以下の例では、EMR クラスターで許可されるアクションを制御するために使用するアイデンティティベースの許可ポリシーを説明しています。

重要

Amazon EMR の ModifyInstanceGroup アクションでは、クラスター ID を指定する必要はありません。そのため、クラスタータグに基づいてこのアクションを拒否するには、さらに考慮する必要があります。詳細については、「ModifyInstanceGroup アクションを拒否する」を参照してください。

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

次の例では、値が dev に設定されたクラスタータグ department に基づいてユーザーのアクション実行を許可し、またその同じタグでクラスターにタグ付けすることを許可するポリシーを示します。最後のポリシー例では、同じタグ以外では 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"] } }

クラスターの作成時にクラスターのタグ付けを要求する

上記の例と同様に、次のポリシー例でも、同じ一致タグ (department タグの値 dev) を検索します。ただし、この例では、RequestTag 条件キーによって、タグの作成時にポリシーが適用されることが指定されています。そのため、指定された値と一致するタグを使用してクラスターを作成する必要があります。

タグ付きのクラスターを作成するには、elasticmapredue:AddTags アクションを実行するためのアクセス許可も必要です。このステートメントでは、elasticmapreduce:ResourceTag 条件キーによって、IAM は department タグの値が dev であるリソースにタグ付けするためのアクセス権限のみを付与するようになります。Resource 要素は、このアクセス許可をクラスターリソースに制限するために使用されます。

PassRole リソースについては、AWS アカウント ID またはエイリアス、PassRoleForEMR ステートメントでのサービスロール名、PassRoleForEC2 ステートメントでのインスタンスプロファイル名を指定する必要があります。IAM ARN のフォーマットの詳細については、「IAM ユーザーガイド」の「IAM ARN」を参照してください。

一致するタグとキーの値の詳細については、「IAM ユーザーガイド」の「aws:RequestTag/tag-key」を参照してください。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "RunJobFlowExplicitlyWithTag", "Effect": "Allow", "Action": [ "elasticmapreduce:RunJobFlow" ], "Resource": "*", "Condition": { "StringEquals": { "aws:RequestTag/department": "dev" } } }, { "Sid": "AddTagsForDevClusters", "Effect": "Allow", "Action": "elasticmapreduce:AddTags", "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*", "Condition": { "StringEquals": { "elasticmapreduce:ResourceTag/department": "dev" } } }, { "Sid": "PassRoleForEMR", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::AccountId:role/Role-Name-With-Path", "Condition": { "StringLike": { "iam:PassedToService": "elasticmapreduce.amazonaws.com*" } } }, { "Sid": "PassRoleForEC2", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::AccountId:role/Role-Name-With-Path", "Condition": { "StringLike": { "iam:PassedToService": "ec2.amazonaws.com*" } } } ] }

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

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

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

次のポリシーステートメントは、クラスターに任意の値を含めることができる department タグがある場合のみ、ユーザーに EMR クラスターを作成することを許可します。PassRole リソースの場合は、AWS アカウント ID またはエイリアス、およびサービスロール名を提供する必要があります。IAM ARN のフォーマットの詳細については、「IAM ユーザーガイド」の「IAM ARN」を参照してください。

ヌル (「false」) 条件演算子の指定の詳細については、「IAM ユーザーガイド」の「条件キーの有無をチェックする条件演算子」を参照してください。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "CreateClusterTagNullCondition", "Effect": "Allow", "Action": [ "elasticmapreduce:RunJobFlow" ], "Resource": [ "*" ], "Condition": { "Null": { "aws:RequestTag/department": "false" } } }, { "Sid": "AddTagsNullCondition", "Effect": "Allow", "Action": "elasticmapreduce:AddTags", "Resource": "arn:aws:elasticmapreduce:*:*:cluster/*", "Condition": { "Null": { "elasticmapreduce:ResourceTag/department": "false" } } }, { "Sid": "PassRoleForElasticMapReduce", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::AccountId:role/Role-Name-With-Path", "Condition": { "StringLike": { "iam:PassedToService": "elasticmapreduce.amazonaws.com*" } } }, { "Sid": "PassRoleForEC2", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::AccountId:role/Role-Name-With-Path", "Condition": { "StringLike": { "iam:PassedToService": "ec2.amazonaws.com*" } } } ] }

EMR Notebooks のアイデンティティベースのポリシーステートメントの例

このセクションの IAM ポリシーステートメントの例では、EMR Notebooks で許可されるアクションを制限するためのキーの使い方に関する一般的なシナリオを示します。プリンシパル (ユーザー) に関連付けられたその他のポリシーによってアクションが許可されない限り、示されたとおり条件コンテキストキーによって許可されるアクションが制限されます。

– ユーザーがタグ付けに基づいて作成した EMR Notebooks へのアクセスのみ許可する

以下のポリシーステートメントの例では、ロールまたはユーザーにアタッチされている場合、ユーザーは自分で作成したノートブックのみを使用できます。このポリシーステートメントは、ノートブックが作成されたときに適用されるデフォルトのタグを使用します。

この例では、StringEquals 条件演算子は、現在のユーザーの IAM ユーザー ID ({aws:userId}) を表す変数とタグ creatorUserID の値のマッチングを試みます。タグ creatorUserID がノートブックに追加されていない、または現在のユーザー ID の値を含んでいない場合は、ポリシーは適用されず、このアクションは、ポリシーによって許可されません。アクションを許可するポリシーステートメントが他にない場合は、ユーザーはこの値を持つこのタグを持っているノートブックとのみ作業できます。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "elasticmapreduce:DescribeEditor", "elasticmapreduce:StartEditor", "elasticmapreduce:StopEditor", "elasticmapreduce:DeleteEditor", "elasticmapreduce:OpenEditorInConsole" ], "Effect": "Allow", "Resource": "*", "Condition": { "StringEquals": { "elasticmapreduce:ResourceTag/creatorUserId": "${aws:userId}" } } } ] }
例 - ノートブックの作成時にノートブックのタグ付けを求める

この例では、RequestTag コンテキストキーが使用されています。CreateEditor アクションは、デフォルトで追加された creatorUserID タグをユーザーが変更または削除しない場合にのみ許可されます。変数 ${aws:userId} は現在アクティブなユーザーのユーザー ID を指定します。これはタグのデフォルト値です。

ポリシーステートメントは、ユーザーが createUserId タグを削除したり、値を変更したりしていないことを確認するのに役立ちます。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "elasticmapreduce:CreateEditor" ], "Effect": "Allow", "Resource": "*", "Condition": { "StringEquals": { "elasticmapreduce:RequestTag/creatorUserId": "${aws:userid}" } } } ] }

この例では、ユーザーはキー文字 dept および次のいずれかに設定された値を持つタグを使用してクラスターを作成する必要があります。datascienceanalyticsoperations

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "elasticmapreduce:CreateEditor" ], "Effect": "Allow", "Resource": "*", "Condition": { "StringEquals": { "elasticmapreduce:RequestTag/dept": [ "datascience", "analytics", "operations" ] } } } ] }
例 - タグ付けされたクラスターにノートブックの作成を制限して、ノートブックタグを求める

この例では、指定された値のいずれかに設定されたキー文字 owner を持つタグを使用してノートブックが作成された場合にのみ、ノートブックの作成が許可されます。さらに、指定された値のいずれかに設定されたキー文字 department を持つタグがクラスターにある場合のみ、ノートブックを作成できます。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "elasticmapreduce:CreateEditor" ], "Effect": "Allow", "Resource": "*", "Condition": { "StringEquals": { "elasticmapreduce:RequestTag/owner": [ "owner1", "owner2", "owner3" ], "elasticmapreduce:ResourceTag/department": [ "dep1", "dep3" ] } } } ] }
例 - タグに基づいてノートブックを開始する機能を制限する

この例では、ノートブックをスタートする権限を、指定された値のいずれかに設定されたキー文字 owner があるタグを持つノートブックのみに制限します。Resource 要素は editor のみを指定することに使用されるため、条件はクラスターには適用されず、タグ付けされる必要はありません。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "elasticmapreduce:StartEditor" ], "Effect": "Allow", "Resource": "arn:aws:elasticmapreduce:*:123456789012:editor/*", "Condition": { "StringEquals": { "elasticmapreduce:ResourceTag/owner": [ "owner1", "owner2" ] } } } ] }

この例は、上記の例と似ています。ただし、制限はノートブックではなく、タグ付けされたクラスターにのみ適用されます。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "elasticmapreduce:StartEditor" ], "Effect": "Allow", "Resource": "arn:aws:elasticmapreduce:*:123456789012:cluster/*", "Condition": { "StringEquals": { "elasticmapreduce:ResourceTag/department": [ "dep1", "dep3" ] } } } ] }

この例では、さまざまなノートブックおよびクラスタータグが使用されます。これにより、ノートブックは次の場合にのみ起動できます。

  • ノートブックに、指定された値のいずれかに設定されたキー文字 owner を持つタグがある場合

    および

  • クラスターに、指定された値のいずれかに設定されたキー文字 department を持つタグがある場合

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "elasticmapreduce:StartEditor" ], "Effect": "Allow", "Resource": "arn:aws:elasticmapreduce:*:123456789012:editor/*", "Condition": { "StringEquals": { "elasticmapreduce:ResourceTag/owner": [ "user1", "user2" ] } } }, { "Action": [ "elasticmapreduce:StartEditor" ], "Effect": "Allow", "Resource": "arn:aws:elasticmapreduce:*:123456789012:cluster/*", "Condition": { "StringEquals": { "elasticmapreduce:ResourceTag/department": [ "datascience", "analytics" ] } } } ] }
例 - タグに基づいてノートブックエディタを開く機能を制限する

この例では、ノートブックエディタは次の場合にのみ開くことができます。

  • ノートブックに、指定された値のいずれかに設定されたキー文字 owner を持つタグがある場合

    および

  • クラスターに、指定された値のいずれかに設定されたキー文字 department を持つタグがある場合

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "elasticmapreduce:OpenEditorInConsole" ], "Effect": "Allow", "Resource": "arn:aws:elasticmapreduce:*:123456789012:editor/*", "Condition": { "StringEquals": { "elasticmapreduce:ResourceTag/owner": [ "user1", "user2" ] } } }, { "Action": [ "elasticmapreduce:OpenEditorInConsole" ], "Effect": "Allow", "Resource": "arn:aws:elasticmapreduce:*:123456789012:cluster/*", "Condition": { "StringEquals": { "elasticmapreduce:ResourceTag/department": [ "datascience", "analytics" ] } } } ] }