Comment la logique d'évaluation IAM d’une politique de refus explicite fonctionne-t-elle lorsque plusieurs clés de condition sont définies ?

Lecture de 3 minute(s)
0

Je souhaite créer une politique AWS Identity and Access Management (IAM) de refus explicite. Cette politique de refus doit restreindre la création d'instances Amazon Elastic Compute Cloud (Amazon EC2) et de volumes Amazon Elastic Block Store (Amazon EBS).

Brève description

Utilisez des balises de politique IAM pour restreindre le lancement d'instances EC2 et de volumes EBS ayant des Opérateurs de condition de chaîne de type Autoriser avec StringLike ou Refuser avec StringNotLike.

Pour plus d'informations, consultez Comment puis-je utiliser les balises de politique IAM pour restreindre la création d'une instance EC2 ou d'un volume EBS ?

Résolution

Pour restreindre la création d'instances EC2 et de volumes EBS, consultez l'exemple de politique IAM suivant qui utilise Refuser avec StringNotLike.

Remarque : Il est recommandé d'utiliser Refuser avec StringNotLike pour empêcher toute autorisation d’accès accidentelle.

Si votre politique comporte plusieurs opérateurs de condition ou plusieurs clés associées à un seul opérateur de condition, les conditions sont évaluées à l'aide de la logique AND. Si vous utilisez plusieurs valeurs de balise Refuser, chaque clé RequestTag doit utiliser des instructions distinctes pour obtenir la même logique AND.

Remarque : Toutes les valeurs de clé RequestTag définies dans une condition avec une politique de Refus peuvent ne pas fonctionner comme prévu. En effet, l'action est autorisée jusqu'à ce que toutes les conditions soient remplies. Une fois toutes les conditions remplies, l'action est refusée.

Les balises suivantes sont obligatoires :

  • La balise cost_center doit avoir une valeur non nulle.
  • L'instance EC2 possède une clé de balise nommée Production.
  • La balise identifier doit être une combinaison de cinq caractères.
  • La valeur de la balise env doit être sandbox, dev ou prod.

Exemple de politique :

{    "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": "AllowRunInstancesWithRestrictions1",
            "Effect": "Deny",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:RequestTag/cost_center": "?*"
                }
            }
        },
        {
            "Sid": "AllowRunInstancesWithRestrictions2",
            "Effect": "Deny",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "ForAllValues:StringNotLike": {
                    "aws:TagKeys": "Production"
                }
            }
        },
        {
            "Sid": "AllowRunInstancesWithRestrictions3",
            "Effect": "Deny",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:RequestTag/identifier": "?????"
                }
            }
        },
        {
            "Sid": "AllowRunInstancesWithRestrictions4",
            "Effect": "Deny",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:RequestTag/env": [
                        "sandbox",
                        "dev",
                        "prod"
                    ]
                }
            }
        },
        {
            "Sid": "AllowRunInstances1",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ]
        },
        {
            "Sid": "AllowCreateTagsOnRunInstance",
            "Effect": "Allow",
            "Action": "ec2:CreateTags",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "ec2:CreateAction": "RunInstances"
                }
            }
        }
    ]
}

Notez les valeurs d'application suivantes :

  • La valeur aws:TagKeys force la sensibilité à la case en Production.
  • La valeur ????? force l'utilisation d'une combinaison de cinq valeurs. Les espaces de début et de fin qui suivent sont ignorés.
  • La valeur ?* force l'utilisation d'au moins un caractère dans le champ de valeur afin que les instances EC2 ne puissent pas être lancées avec des valeurs de balise vides.

Informations connexes

Comment puis-je créer une politique IAM pour contrôler l’accès aux ressources Amazon EC2 par le biais de balises ?

Ajouter des balises aux ressources Amazon EC2

Contrôle de l'accès aux ressources AWS à l'aide de balises

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