

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Politiques IAM pour l'accès basé sur des balises aux clusters et aux bloc-notes EMR
<a name="emr-fine-grained-cluster-access"></a>

Vous pouvez utiliser des conditions dans votre stratégie basée sur les identités pour contrôler l'accès aux clusters et blocs-notes EMR en fonction des balises.

Pour de plus amples informations sur l'ajout de balises à des clusters, veuillez consulter [Balisage de clusters EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-tags.html). 

Les exemples suivants illustrent différents scénarios et différentes façons d'utiliser des opérateurs de condition avec des clés de condition Amazon EMR. Ces déclarations de politique IAM sont conçues uniquement à des fins de démonstration et ne doivent pas être utilisées dans des environnements de production. Il existe plusieurs façons de combiner des instructions de stratégie pour accorder et refuser des autorisations selon vos besoins. Pour plus d'informations sur la planification et le test des politiques IAM, consultez le [Guide de l'utilisateur IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/).

**Important**  
Le refus explicite d'autoriser l'attribution de balises doit être pris en considération. Cela empêche les utilisateurs de baliser une ressource et de s'accorder ainsi des autorisations que vous n'aviez pas l'intention d'accorder. Si vous ne refusez pas les actions de balisage pour une ressource, un utilisateur peut modifier les balises et contourner l'intention des politiques basées sur les balises.

## Exemple de déclarations de stratégie basées sur les identités pour les clusters
<a name="emr-cluster-access-resourcetag"></a>

Les exemples suivants illustrent les stratégies d'autorisation basées sur une identité qui sont utilisées pour contrôler les actions autorisées avec les clusters EMR.

**Important**  
L'action `ModifyInstanceGroup` dans Amazon EMR ne nécessite pas que vous spécifiiez un ID de cluster. Pour cette raison, le refus de cette action sur la base des balises de cluster nécessite une attention supplémentaire. Pour de plus amples informations, veuillez consulter [Refuser l' ModifyInstanceGroup action dans Amazon EMR](emr-cluster-deny-modifyinstancegroup.md).

**Topics**
+ [Actions autorisées uniquement sur des clusters avec des valeurs de balises spécifiques](#emr-cluster-access-example-tagvalue)
+ [Exiger le balisage du cluster lors de la création d'un cluster](#emr-cluster-access-example-require-tagging)
+ [Actions autorisées sur des clusters avec une balise spécifique, quelle que soit la valeur de la balise](#emr-cluster-access-example-tag)

### Actions autorisées uniquement sur des clusters avec des valeurs de balises spécifiques
<a name="emr-cluster-access-example-tagvalue"></a>

Les exemples suivants illustrent une stratégie qui permet à un utilisateur d'effectuer des actions sur la base de la balise du cluster `department` avec la valeur `dev` et qui permet également à un utilisateur de baliser des clusters en utilisant cette même balise. L'exemple de stratégie finale montre comment refuser les privilèges permettant d'attribuer aux clusters EMR des balises autres que cette même balise.

Dans l'exemple suivant de la stratégie, l'opérateur de condition `StringEquals` essaie de faire correspondre `dev` avec la valeur de la balise `department`. Si la balise `department` n'a pas été ajoutée au cluster, ou ne contient pas la valeur `dev`, la stratégie ne s'applique pas et les actions ne sont pas autorisées par cette stratégie. Si aucune autre déclaration de stratégie n'autorise ces actions, l'utilisateur peut uniquement utiliser des clusters ayant cette balise avec cette valeur.

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

------

Vous pouvez également spécifier plusieurs valeurs de balise à l'aide d'un opérateur de condition. Par exemple, pour autoriser toutes les actions sur des clusters où la balise `department` a la valeur `dev` ou `test`, vous pouvez remplacer le bloc de condition dans l'exemple précédent avec les éléments suivants. 

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

### Exiger le balisage du cluster lors de la création d'un cluster
<a name="emr-cluster-access-example-require-tagging"></a>

Comme dans l'exemple précédent, l'exemple de politique suivant recherche la même balise correspondante : la valeur `dev` pour la balise `department`. Mais dans cet exemple, la clé de condition `RequestTag` indique que la politique s'applique lors de la création de balises. Vous devez donc créer un cluster avec une balise correspondant à la valeur spécifiée. 

Pour créer un cluster avec une balise, vous devez également être autorisé à effectuer l'action `elasticmapredue:AddTags`. Pour cette déclaration, la clé de condition `elasticmapreduce:ResourceTag` garantit que IAM n'accorde l'accès qu'aux ressources à balises ayant la valeur `dev` sur la balise `department`. L'élément `Resource` est utilisé pour limiter cette autorisation aux ressources cluster.

Pour les `PassRole` ressources, vous devez fournir l'identifiant ou l'alias du AWS compte, le nom du rôle de service dans l'`PassRoleForEMR`instruction et le nom du profil d'instance dans l'`PassRoleForEC2`instruction. Pour plus d'informations sur le format IAM ARN, consultez la section [IAM ARNs](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns) dans le guide de l'utilisateur *IAM*. 

Pour plus d'informations sur la correspondance des valeurs clés des balises, consultez [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) dans le *Guide de l'utilisateur IAM*.

------
#### [ 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*"
        }
      }
    }
  ]
}
```

------

### Actions autorisées sur des clusters avec une balise spécifique, quelle que soit la valeur de la balise
<a name="emr-cluster-access-example-tag"></a>

Vous pouvez également autoriser des actions uniquement sur des clusters ayant une balise spécifique, quelle que soit la valeur de la balise. Pour cela, vous pouvez utiliser l'opérateur `Null`. Pour plus d'informations, consultez [Opérateur de condition pour vérifier l'existence des clés de condition](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#Conditions_Null) dans le *Guide de l'utilisateur IAM*. Par exemple, pour autoriser des actions uniquement sur des clusters EMR qui ont la balise `department`, quelle que soit sa valeur, vous pouvez remplacer les blocs de condition de l'exemple précédent par le suivant. L'opérateur `Null` recherche la balise `department` sur un cluster EMR. Si la balise existe, l'instruction `Null` a la valeur false, correspondant à la condition spécifiée dans cette déclaration de stratégie, et les actions appropriées sont autorisées. 

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

La déclaration de stratégie suivante permet à un utilisateur de créer un cluster EMR uniquement s'il a une balise `department`, quelle que soit la valeur de cette dernière. Pour la `PassRole` ressource, vous devez fournir l'identifiant ou l'alias du AWS compte, ainsi que le nom du rôle de service. Pour plus d'informations sur le format IAM ARN, consultez la section [IAM ARNs](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns) dans le guide de l'utilisateur *IAM*.

Pour plus d'informations sur la spécification de l'opérateur de condition null (« false »), consultez la section [Opérateur de condition pour vérifier l'existence des clés de condition](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Null) dans le *Guide de l'utilisateur IAM*.

------
#### [ 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*"
        }
      }
    }
  ]
}
```

------

## Exemple de déclarations de stratégie basées sur l'identité pour les bloc-notes EMR
<a name="emr-managed-notebooks-tags-examples"></a>

Les exemples de politiques IAM présentés dans cette section illustrent des scénarios courants d'utilisation de clés pour limiter les actions autorisées à l'aide de Blocs-notes EMR. Dans la mesure où aucune autre stratégie associée au principal (utilisateur) autorise les actions, les clés de contexte de condition limitent les actions autorisées comme indiqué.

**Example – Autorise l'accès uniquement à Blocs-notes EMR créé par un utilisateur sur la base d'un balisage**  
L'exemple de déclaration de politique suivant, lorsqu'il est attaché à un rôle ou à un utilisateur, permet à l'utilisateur de travailler uniquement avec les blocs-notes qu'il a créés. Cette déclaration de stratégie utilise la balise par défaut appliquée lorsqu'un bloc-notes est créé.  
Dans l'exemple, l'opérateur de condition `StringEquals` essaie de faire correspondre une variable représentant l'ID d'utilisateur actuel (`{aws:userId}`) avec la valeur de la balise `creatorUserID`. Si la balise `creatorUserID` n'a pas été ajoutée au bloc-notes, ou ne contient pas la valeur de l'ID de l'utilisateur actuel, la stratégie ne s'applique pas et les actions ne sont pas autorisées par cette stratégie. Si aucune autre déclaration de stratégie n'autorise ces actions, l'utilisateur peut uniquement utiliser des blocs-notes ayant cette balise avec cette valeur.    
****  

```
{
  "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 – Exiger le balisage de bloc-notes lorsqu'un bloc-notes est créé**  
Dans cet exemple, la clé de contexte `RequestTag` est utilisée. L'action `CreateEditor` est autorisée uniquement si l'utilisateur n'a pas modifié ou supprimé la balise `creatorUserID` est ajoutée par défaut. La variable \$1\$1aws:userId\$1, spécifie l'ID d'utilisateur de l'utilisateur actuellement actif, ce qui est la valeur par défaut de la balise.  
La déclaration de stratégie peut être utilisée pour aider à garantir que les utilisateurs ne suppriment pas la balise `createUserId` ou ne modifient sa valeur.    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "elasticmapreduce:CreateEditor"
      ],
      "Effect": "Allow",
      "Resource": [
        "*"
      ],
      "Condition": {
        "StringEquals": {
          "elasticmapreduce:RequestTag/creatorUserId": "${aws:userid}"
        }
      },
      "Sid": "AllowELASTICMAPREDUCECreateeditor"
    }
  ]
}
```
Cet exemple nécessite que l'utilisateur crée le cluster avec une balise dont la chaîne de clé `dept` et une valeur sont définies sur l'une des valeurs suivantes : `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 – Limiter la création de bloc-notes aux clusters balisés et exiger des balises de blocs-notes**  
Cet exemple autorise la création de bloc-notes uniquement si le bloc-notes est créé avec une balise qui dispose de la chaîne de clé `owner` définie sur l'une des valeurs spécifiées. De plus, le bloc-notes peut être créé uniquement si le cluster dispose d'une balise avec la chaîne de clé `department` définie sur l'une des valeurs spécifiées.    
****  

```
{
  "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 – Limiter la possibilité de démarrer un bloc-notes basé sur des balises**  
Cet exemple limite la capacité de lancer des blocs-notes uniquement aux blocs-notes dotés d'une balise avec la chaîne de clé `owner` définie sur une des valeurs spécifiées. Étant donné que l'élément `Resource` est utilisé pour spécifier uniquement l'`editor`, la condition ne s'applique pas au cluster et n'a pas besoin d'être balisée.    
****  

```
{
  "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"
    }
  ]
}
```
Cet exemple est similaire à un exemple précédent. Toutefois, la limite s'applique uniquement aux clusters balisés, pas aux blocs-notes.    
****  

```
{
  "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"
    }
  ]
}
```
Cet exemple utilise un autre ensemble de bloc-notes et de balises de clusters. Il permet à un bloc-notes de se lancer uniquement si :  
+ Le bloc-notes a une balise avec la chaîne de clé `owner` définie sur l'une des valeurs spécifiées

  —and—
+ Le cluster a une balise avec la chaîne de clé `department` définie sur l'une des valeurs spécifiées  
****  

```
{
  "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 – Limiter la possibilité d'ouvrir l'éditeur de bloc-notes basé sur des balises**  
Cet exemple autorise l'éditeur de bloc-notes à s'ouvrir uniquement si :  
+ Le bloc-notes a une balise avec la chaîne de clé `owner` définie sur l'une des valeurs spécifiées.

  —and—
+ Le cluster a une balise avec la chaîne de clé `department` définie sur l'une des valeurs spécifiées.  
****  

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