

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

# クラスターおよび EMR Notebooks に対するタグベースのアクセスの IAM ポリシー
<a name="emr-fine-grained-cluster-access"></a>

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

EMR クラスターにタグを追加する方法の詳細については、「[EMR クラスターにタグを付ける](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-tags.html)」を参照してください。

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

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

## クラスターのアイデンティティベースのポリシーステートメントの例
<a name="emr-cluster-access-resourcetag"></a>

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

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

**Topics**
+ [特定のタグの値があるクラスター上でのみアクションを許可する](#emr-cluster-access-example-tagvalue)
+ [クラスターの作成時にクラスターのタグ付けを要求する](#emr-cluster-access-example-require-tagging)
+ [タグの値に関わらず、特定のタグがあるクラスター上でアクションを許可する](#emr-cluster-access-example-tag)

### 特定のタグの値があるクラスター上でのみアクションを許可する
<a name="emr-cluster-access-example-tagvalue"></a>

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

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

------
#### [ JSON ]

****  

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

### クラスターの作成時にクラスターのタグ付けを要求する
<a name="emr-cluster-access-example-require-tagging"></a>

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

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

`PassRole` リソースについては、 AWS アカウント ID またはエイリアス、 `PassRoleForEMR`ステートメントのサービスロール名、 `PassRoleForEC2`ステートメントのインスタンスプロファイル名を指定する必要があります。IAM ARN のフォーマットの詳細については、「*IAM ユーザーガイド*」の「[IAM ARN](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns)」を参照してください。

一致するタグとキーの値の詳細については、「*IAM ユーザーガイド*」の「[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag)」を参照してください。

------
#### [ JSON ]

****  

```
{
  "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::123456789012:role/Role-Name-With-Path"
      ],
      "Condition": {
        "StringLike": {
          "iam:PassedToService": "elasticmapreduce.amazonaws.com*"
        }
      }
    },
    {
      "Sid": "PassRoleForEC2",
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::123456789012:role/Role-Name-With-Path"
      ],
      "Condition": {
        "StringLike": {
          "iam:PassedToService": "ec2.amazonaws.com*"
        }
      }
    }
  ]
}
```

------

### タグの値に関わらず、特定のタグがあるクラスター上でアクションを許可する
<a name="emr-cluster-access-example-tag"></a>

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

```
1. "Condition": {
2.   "Null": {
3.     "elasticmapreduce:ResourceTag/department":"false"
4.   }
5. }
```

次のポリシーステートメントは、クラスターに任意の値を含めることができる `department` タグがある場合のみ、ユーザーに EMR クラスターを作成することを許可します。`PassRole` リソースには、 AWS アカウント ID またはエイリアス、およびサービスロール名を指定する必要があります。IAM ARN のフォーマットの詳細については、「*IAM ユーザーガイド*」の「[IAM ARN](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns)」を参照してください。

ヌル (「false」) 条件演算子の指定の詳細については、「*IAM ユーザーガイド*」の「[条件キーの有無をチェックする条件演算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Null)」を参照してください。

------
#### [ JSON ]

****  

```
{
  "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::123456789012:role/Role-Name-With-Path"
      ],
      "Condition": {
        "StringLike": {
          "iam:PassedToService": "elasticmapreduce.amazonaws.com*"
        }
      }
    },
    {
      "Sid": "PassRoleForEC2",
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::123456789012:role/Role-Name-With-Path"
      ],
      "Condition": {
        "StringLike": {
          "iam:PassedToService": "ec2.amazonaws.com*"
        }
      }
    }
  ]
}
```

------

## EMR Notebooks のアイデンティティベースのポリシーステートメントの例
<a name="emr-managed-notebooks-tags-examples"></a>

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

**Example – ユーザーがタグ付けに基づいて作成した 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}"
        }
      },
      "Sid": "AllowELASTICMAPREDUCEDescribeeditor"
    }
  ]
}
```

**Example - ノートブックの作成時にノートブックのタグ付けを求める**  
この例では、`RequestTag` コンテキストキーが使用されています。`CreateEditor` アクションは、デフォルトで追加された `creatorUserID` タグをユーザーが変更または削除しない場合にのみ許可されます。変数 \$1\$1aws:userId\$1 は現在アクティブなユーザーのユーザー ID を指定します。これはタグのデフォルト値です。  
ポリシーステートメントは、ユーザーが `createUserId` タグを削除したり、値を変更したりしていないことを確認するのに役立ちます。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "elasticmapreduce:CreateEditor"
      ],
      "Effect": "Allow",
      "Resource": [
        "*"
      ],
      "Condition": {
        "StringEquals": {
          "elasticmapreduce:RequestTag/creatorUserId": "${aws:userid}"
        }
      },
      "Sid": "AllowELASTICMAPREDUCECreateeditor"
    }
  ]
}
```
この例では、ユーザーはキー文字 `dept` および次のいずれかに設定された値を持つタグを使用してクラスターを作成する必要があります。`datascience`、`analytics`、`operations`。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "elasticmapreduce:CreateEditor"
      ],
      "Effect": "Allow",
      "Resource": [
        "*"
      ],
      "Condition": {
        "StringEquals": {
          "elasticmapreduce:RequestTag/dept": [
            "datascience",
            "analytics",
            "operations"
          ]
        }
      },
      "Sid": "AllowELASTICMAPREDUCECreateeditor"
    }
  ]
}
```

**Example - タグ付けされたクラスターにノートブックの作成を制限して、ノートブックタグを求める**  
この例では、指定された値のいずれかに設定されたキー文字 `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"
          ]
        }
      },
      "Sid": "AllowELASTICMAPREDUCECreateeditor"
    }
  ]
}
```

**Example - タグに基づいてノートブックを開始する機能を制限する**  
この例では、ノートブックをスタートする権限を、指定された値のいずれかに設定されたキー文字 `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"
          ]
        }
      },
      "Sid": "AllowELASTICMAPREDUCEStarteditor"
    }
  ]
}
```
この例は、上記の例と似ています。ただし、制限はノートブックではなく、タグ付けされたクラスターにのみ適用されます。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "elasticmapreduce:StartEditor"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:elasticmapreduce:*:123456789012:cluster/*"
      ],
      "Condition": {
        "StringEquals": {
          "elasticmapreduce:ResourceTag/department": [
            "dep1",
            "dep3"
          ]
        }
      },
      "Sid": "AllowELASTICMAPREDUCEStarteditor"
    }
  ]
}
```
この例では、さまざまなノートブックおよびクラスタータグが使用されます。これにより、ノートブックは次の場合にのみ起動できます。  
+ ノートブックに、指定された値のいずれかに設定されたキー文字 `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"
          ]
        }
      },
      "Sid": "AllowELASTICMAPREDUCEStarteditorByOwner"
    },
    {
      "Action": [
        "elasticmapreduce:StartEditor"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:elasticmapreduce:*:123456789012:cluster/*"
      ],
      "Condition": {
        "StringEquals": {
          "elasticmapreduce:ResourceTag/department": [
            "datascience",
            "analytics"
          ]
        }
      },
      "Sid": "AllowELASTICMAPREDUCEStarteditorByDepartment"
    }
  ]
}
```

**Example - タグに基づいてノートブックエディタを開く機能を制限する**  
この例では、ノートブックエディタは次の場合にのみ開くことができます。  
+ ノートブックに、指定された値のいずれかに設定されたキー文字 `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"
          ]
        }
      },
      "Sid": "AllowELASTICMAPREDUCEOpeneditorconsoleByOwner"
    },
    {
      "Action": [
        "elasticmapreduce:OpenEditorInConsole"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:elasticmapreduce:*:123456789012:cluster/*"
      ],
      "Condition": {
        "StringEquals": {
          "elasticmapreduce:ResourceTag/department": [
            "datascience",
            "analytics"
          ]
        }
      },
      "Sid": "AllowELASTICMAPREDUCEOpeneditorconsoleByDepartment"
    }
  ]
}
```