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

fagner_0518

Je veux permettre un utilisateur IAM ou un groupe accéder le lancement d’un nouvelle instance Elastic Block Store (Amazon EC2) et créer des nouveaux volumes Elastic Block Store (Amazon EBS), mais seulement quand ils utilisent des balises spécifiques. Comment peux-je le faire en utilisant des conditions de politiques IAM pour restreindre l’accès pour la création des nouvelles ressources?

Vous pouvez spécifier les balises pour les instance EC2 et les volumes EBS comme part de l’appel d’une API que crée les ressources. En utilisant ce principe, vous pouvez imposer aux utilisateurs à mettre des balises pour des ressources spécifiques en appliquant des conditions a leur politiques IAM. L’exemple suivante montre comment les politiques ne permettent pas les utilisateurs créer des groupe de sécurité ou pairs clé. En savoir plus sur comment créer des groupes de sécurité, voyez Créer votre première utilisateur et groupe administrateur IAM.

Dans les trois exemples à continuation les politiques IAM permettent les utilisateurs:

  1. Lancer des instances EC2 avec des clés de balises et valeurs coïncidents.
  2. Lancer des instances EC2 avec au moins un balise ou valeur coïncident.
  3. Lancer des instances EC2 avec au moins une clé de balise coïncident.

1.    Lancer des instances EC2 avec des clés de balises et valeurs coïncidents.

L’exemple suivante des politiques montre comment un utilisateur lance une instance EC2 et crée un volume EBS seulement quand l’utilisateur utilise tous les balises que sont définis dans la politique en utilisant le qualifier ForAllValues. Si l’utilisateur applique quelconque balise que n’est pas inclut dans la politique, l’action sera interdite. Pour imposer la sensibilité aux majuscules et minuscules, utilises 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"
                }
            }
        }
    ]
}

Exemples des résultats

Valeur / clé Résultat
key1/value1 et key2/value2 allow (permettre)
KEY1/value1 et key2/value2 deny (refuser)
key1/value1 deny (refuser)
key1/value2 deny (refuser)
Pas de clés et valeurs deny (refuser)

2.    Lancer des instances EC2 avec au moins un balise ou valeur coïncident.

Vous pouvez au début utiliser le première exemple de politique et remplacer l’ID de la déclaration (Sid) "AllowRunInstancesWithRestrictions" pour permettre un utilisateur lancer un instance EC2 et créer un volume EBS si l’utilisateur applique au moins une balise spécifique en utilisant la suivante 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"
...

Exemples des résultats

Valeur / clé Résultat
key1/value1 et key2/value2 allow (permettre)
key1/value1 allow (permettre)
key1/value2 deny (refuser)
Pas de clés et valeurs deny (refuser)

3.    Lancer des instances EC2 avec au moins une clé de balise coïncident.

Vous pouvez au début utiliser le première exemple de politique et remplacer le Sid "AllowRunInstancesWithRestrictions" pour permettre un utilisateur lancer un instance EC2 et créer un volume EBS si l’utilisateur applique au moins une balise appelé key1. Il n’y a pas un valeur spécifique necessaire dans le suivant exemple de politique :

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

Exemples des résultats

Valeur / clé Résultat
key1/value1 et key2/value2 allow (permettre)
key1/value1 allow (permettre)
key1/value2 allow (permettre)
Pas de clés et valeurs deny (refuser)

Remarque: modifiez key1 et value1 dans l’exemple de politique pour incluire des balises et valeurs qu’appliquent aux 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