Fagner vous présente la marche à suivre pour
utiliser des balises de stratégie IAM
pour limiter la création d'instances EC2

fagner_0518

Je souhaite autoriser un accès d’utilisateur ou de groupe IAM pour lancer de nouvelles instances Amazon Elastic Compute Cloud (Amazon EC2) et créer de nouveaux volumes Amazon Elastic Block Store (Amazon EBS), mais uniquement lorsqu’elles emploient certaines balises spécifiques. Comment puis-je faire cela en utilisant les conditions de stratégie AWS Identity and Access Management (IAM) pour restreindre l’accès à la création de nouvelles ressources ?

Vous pouvez spécifier des balises d’instances EC2 et les volumes EBS dans l’appel d’API qui crée les ressources. En utilisant ce principe, vous pouvez exiger que les utilisateurs balisent certaines ressources spécifiques en appliquant des conditions à leur stratégie IAM. Les stratégies de l’exemple qui suit ne permettent pas aux utilisateurs de créer des groupes de sécurité ou des paires de clés. Les utilisateurs doivent donc sélectionner les groupes de sécurité et les paires de clés pré-existants. Pour plus d’informations sur la création de groupes de sécurité, voir Création de votre premier utilisateur et groupe Admin IAM.

Les trois premières stratégies IAM permettent aux utilisateurs de :

  1. Lancer les instances EC2 ayant des clés de balise et des valeurs correspondantes.
  2. Lancer les instances EC2 ayant au moins une clé de balise et une valeur correspondantes.
  3. Lancer les instances EC2 ayant au moins une clé de balise correspondante.

1.    Lancer les instances EC2 ayant des clés de balise et des valeurs correspondantes

L’exemple de stratégie qui suit permet à l’utilisateur de lancer une instance EC2 et de créer un volume EBS uniquement si l’utilisateur applique toutes les balises définies dans la stratégie avec le qualificatif ForAllValues. Si l’utilisateur applique une balise qui ne figure pas dans la stratégie, l’opération est refusée. Pour appliquer la reconnaissance de la casse, utilisez la condition aws:TagKeys.

{
  "Version": "2012-10-17",
  "Statement": [{
      "Sid": "AllowToDescribeAll",
      "Effect": "Allow",
      "Action": [
        "ec2:Describe*"
      ],
      "Resource": "*"
    },
    {
      "Sid": "AllowRunInstances",
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": [
        "arn:aws:ec2:*::image/*",
        "arn:aws:ec2:*::snapshot/*",
        "arn:aws:ec2:*:*:subnet/*",
        "arn:aws:ec2:*:*:network-interface/*",
        "arn:aws:ec2:*:*:security-group/*",
        "arn:aws:ec2:*:*:key-pair/*"
      ]
    },
    {
      "Sid": "AllowRunInstancesWithRestrictions",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateVolume",
        "ec2:RunInstances"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:volume/*",
        "arn:aws:ec2:*:*:instance/*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:RequestTag/key1": "value1",
          "aws:RequestTag/key2": "value2"
        },
        "ForAllValues:StringEquals": {
          "aws:TagKeys": [
            "key1",
            "key2"
          ]
        }
      }
    },
    {
      "Sid": "AllowCreateTagsOnlyLaunching",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateTags"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:volume/*",
        "arn:aws:ec2:*:*:instance/*"
      ],
      "Condition": {
        "StringEquals": {
          "ec2:CreateAction": "RunInstances"
        }
      }
    }
  ]
}

Important : Pour réussir le lancement des instances EC2, cette stratégie doit inclure les clés et les valeurs de balise correspondantes. Si les paires clé/valeur ne correspondent pas, vous devez recevoir l’erreur « Échec de lancement » ou un message d’échec d’API de type similaire.

Résultats de l’exemple

Clé/valeur Résultat
key1/value1 et key2/value2 autoriser
KEY1/value1 et key2/value2 refus
key1/value1 refus
key1/value2 refus
aucune clé ou valeur refus

2.    Lancer les instances EC2 ayant au moins une balise et une valeur correspondantes

Vous pouvez utiliser le premier exemple de stratégie et remplacer l’ID de déclaration (Sid) « AllowRunInstancesWithRestrictions » pour permettre à un utilisateur de lancer une instance EC2. Créez ensuite un volume EBS si l’utilisateur applique au moins une balise spécifique en utilisant la condition ForAnyValue :

...
            "Sid": "AllowRunInstancesWithRestrictions",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/key1": "value1"
                },
                "ForAnyValue:StringEquals": {
                    "aws:TagKeys": [
                        "key1"
...

Résultats de l’exemple

Clé/valeur Résultat
key1/value1 et key2/value2 autoriser
key1/value1 autoriser
key1/value2 refus
aucune clé ou valeur refus

3.    Lancer les instances EC2 ayant au moins une clé de balise correspondante

Vous pouvez utiliser le premier exemple de stratégie et remplacer le Sid « AllowRunInstancesWithRestrictions » pour permettre à un utilisateur de lancer une instance EC2. Ensuite, créez des volumes EBS lorsque l’utilisateur applique au moins une clé de balise nommée key1. Aucune valeur spécifique n’est nécessaire dans l’exemple de stratégie suivante :

...
        {
            "Sid": "AllowRunInstancesWithRestrictions",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "aws:TagKeys": [
                        "key1"
...

Résultats de l’exemple

Clé/valeur Résultat
key1/value1 et key2/value2 autoriser
key1/value1 autoriser
key1/value2 autoriser
aucune clé ou valeur refus

Remarque : Modifiez key1 et value1 des les exemples de stratégie pour y inclure les balises et les valeurs s’appliquant à vos ressources.


Cette page vous a-t-elle été utile ? Oui | Non

Retour au Centre de connaissances AWS Support

Vous avez besoin d'aide ? Consultez le site du Centre AWS Support.

Date de publication : 08/05/2018

Date de mise à jour : 08/02/2019