Comment utiliser les balises de stratégie IAM pour limiter le mode de création d'une instance EC2 ou d’un volume EBS ?

Lecture de 5 minute(s)
0

Je souhaite autoriser les utilisateurs ou groupes AWS Identity and Access Management (IAM) à lancer de nouvelles instances Amazon Elastic Compute Cloud (Amazon EC2). Je souhaite également autoriser les utilisateurs IAM à créer de nouveaux volumes Amazon Elastic Block Store (Amazon EBS), mais uniquement lorsqu'ils appliquent des balises spécifiques.

Brève description

Spécifiez 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 des utilisateurs IAM qu'ils balisent des 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.

Les exemples de stratégies IAM suivants permettent aux utilisateurs de :

  • Lancer les instances EC2 ayant des clés de balise et des valeurs correspondantes
  • Lancer les instances EC2 ayant au moins une balise et une valeur correspondantes
  • Lancer les instances EC2 ayant au moins une clé de balise correspondante
  • Lancer les instances EC2 ayant uniquement la liste spécifiée de balises

Solution

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 n'est pas incluse dans la stratégie, l'action est refusée. Afin d'appliquer la sensibilité à la casse, utilisez la condition aws:TagKeys.

Remarque : modifiez key1 et value1 dans les exemples de politiques pour y inclure les balises et valeurs s’appliquant à vos ressources :

{
  "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/*",
        "arn:aws:ec2:*:*:network-interface/*"
      ],
      "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/*",
        "arn:aws:ec2:*:*:network-interface/*"
      ],
      "Condition": {
        "StringEquals": {
          "ec2:CreateAction": [
            "RunInstances",
            "CreateVolume"
          ]
        }
      }
    }
  ]
}

Important : afin de réussir le lancement des instances EC2, cette politique doit inclure les clés et valeurs de balise correspondantes. Si les paires clé/valeur ne correspondent pas, vous recevez le message d'erreur « Launch Failed » (Échec du lancement) ou un message d’échec d’API similaire.

Résultats de l’exemple

Clé/valeurRésultat
key1/value1 et key2/value2autoriser
key1/value1refuser
key1/value2refuser
aucune clé ou valeurrefuser

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

Dans l'exemple suivant, remplacez le bloc de condition AllowRunInstancesWithRestrictions pour permettre à un utilisateur de lancer une instance EC2 et créer des volumes EBS lorsqu'au moins une clé de balise est nommée key1 et que sa valeur est value1. Vous pouvez ajouter le nombre de balises supplémentaires que vous souhaitez dans la requête RunInstances :

"Condition": {
  "StringEquals": {
    "aws:RequestTag/key1": "value1"
  },
  "ForAnyValue:StringEquals": {
    "aws:TagKeys": [
      "key1"
    ]
  }
}

Résultats de l’exemple

Clé/valeurRésultat
key1/value1 et key2/value2autoriser
key1/value1autoriser
key1/value2refuser
aucune clé ou valeurrefuser

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

Dans l'exemple de stratégie suivant, remplacez le bloc de condition AllowRunInstancesWithRestrictions pour permettre à un utilisateur de lancer une instance EC2 et de créer des volumes EBS lorsqu'au moins une clé de balise est nommée key1. Aucune valeur spécifique n'est requise pour la balise key1 et un nombre quelconque de balises supplémentaires peuvent être ajoutées dans la requête RunInstances .

"Condition": {
  "ForAnyValue:StringEquals": {
    "aws:TagKeys": [
      "key1"
    ]
  }
}

Résultats de l’exemple

Clé/valeurRésultat
key1/value1 et key2/value2autoriser
key1/value1autoriser
key1/value2autoriser
aucune clé ou valeurrefuser

Lancer les instances EC2 ayant uniquement la liste spécifiée de balises

Dans l'exemple de politique suivant, remplacez le bloc de condition AllowRunInstancesWithRestrictions pour permettre à un utilisateur de lancer une instance EC2 et créer des volumes EBS uniquement lorsque les clés de balise key1 et key2 sont fournies dans la requête. Aucune valeur spécifique n'est requise pour l'une ou l'autre des clés de balise, et aucune balise supplémentaire ne peut être ajoutée dans la requête RunInstances :

"Condition": {
  "StringLike": {
      "aws:RequestTag/key1": "*",
      "aws:RequestTag/key2": "*"
  },
  "ForAllValues:StringEquals": {
    "aws:TagKeys": [
        "key1",
        "key2"
    ]
  }
}

Remarque : la condition StringLike est requise pour s'assurer que toutes les balises sont présentes.

Résultats de l’exemple

Clé/valeurRésultat
key1/AnyValue et key2/AnyValueAutoriser
key1/AnyValueRefuser
key2/AnyValueRefuser
Pas de clés ou de valeursRefuser
key1/AnyValue, key2/AnyValue, key3/AnyValueRefuser

Informations connexes

Comment créer une stratégie IAM pour contrôler l'accès aux ressources Amazon EC2 à l'aide de balises ?

Création d'une condition avec plusieurs clés ou valeurs

Exemple de stratégie basée sur l’identité IAM

Vérifiez vos ressources Amazon EC2

Actions, ressources et clés de condition pour Amazon EC2

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an