Comment créer une stratégie IAM pour autoriser explicitement un utilisateur, un groupe ou un rôle IAM à créer ou gérer les instances EC2 dans un VPC donné en utilisant des balises ?

Dernière mise à jour : 21/08/2020

Comment créer une stratégie AWS Identity and Access Management (IAM) qui autorise explicitement un utilisateur, un groupe ou un rôle IAM à créer et gérer les instances Amazon Elastic Compute Cloud (Amazon EC2) dans un VPC ? La stratégie doit limiter les autorisations pour que l'entité IAM puisse créer des instances EC2 avec des balises spécifiques et gérer ces instances EC2 dans un VPC en utilisant ces balises.

Brève description

Amazon EC2 fournit des autorisations limitées au niveau des ressources prises en charge, mais plusieurs actions, ressources et conditions doivent être prises en compte. Certaines actions de l'API Amazon EC2, tel que le lancement d'une instance EC2, peuvent être contrôlées via l'ARN VPC en utilisant des balises pour contrôler les instances.

Solution

Appliquez une stratégie IAM personnalisée pour restreindre les autorisations d'un utilisateur, d'un groupe ou d'un rôle IAM pour créer des instances EC2 dans un VPC avec des balises. Utilisez la condition de stratégie « ec2:ResourceTags » pour limiter le contrôle aux instances. Cette stratégie accorde des autorisations pour lancer des instances EC2 dans un VPC avec une balise unique. Vous pouvez ensuite gérer ces instances EC2 en utilisant des balises restrictives.

Créer une stratégie gérée à appliquer aux entités IAM qui lancent les instances

1.    Ouvrez la console IAM, choisissez Policies (Stratégies), puis Create Policy (Créer une stratégie).

2.    Choisissez l'onglet JSON, puis saisissez cette stratégie personnalisée :  

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "GrantIAMPassRoleOnlyForEC2",
            "Action": [
                "iam:PassRole"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:iam::ACCOUNTNUMBER:role/ROLENAME",
                "arn:aws:iam::ACCOUNTNUMBER:role/ROLENAME"
            ],
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "ec2.amazonaws.com"
                }
            }
        },
        {
            "Sid": "ReadOnlyEC2WithNonResource",
            "Action": [
                "ec2:Describe*",
                "iam:ListInstanceProfiles"
            ],
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Sid": "ModifyingEC2WithNonResource",
            "Action": [
                "ec2:CreateKeyPair",
                "ec2:CreateSecurityGroup"
            ],
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Sid": "RunInstancesWithTagRestrictions",
            "Effect": "Allow",
            "Action": "ec2:RunInstances",
            "Resource": [
                "arn:aws:ec2:REGION:ACCOUNTNUMBER:instance/*",
                "arn:aws:ec2:REGION:ACCOUNTNUMBER:volume/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/TAG-KEY": "TAG-VALUE"
                }
            }
        },
        {
            "Sid": "RemainingRunInstancePermissionsNonResource",
            "Effect": "Allow",
            "Action": "ec2:RunInstances",
            "Resource": [
                "arn:aws:ec2:REGION::image/*",
                "arn:aws:ec2:REGION::snapshot/*",
                "arn:aws:ec2:REGION:ACCOUNTNUMBER*:network-interface/*",
                "arn:aws:ec2:REGION:ACCOUNTNUMBER*:key-pair/*",
                "arn:aws:ec2:REGION:ACCOUNTNUMBER*:security-group/*"
            ]
        },
        {
            "Sid": "EC2RunInstancesVpcSubnet",
            "Effect": "Allow",
            "Action": "ec2:RunInstances",
            "Resource": "arn:aws:ec2:REGION:ACCOUNTNUMBER:subnet/*",
            "Condition": {
                "StringEquals": {
                    "ec2:Vpc": "arn:aws:ec2:REGION:ACCOUNTNUMBER:vpc/VPC-ID"
                }
            }
        },
        {
            "Sid": "EC2VpcNonResourceSpecificActions",
            "Effect": "Allow",
            "Action": [
                "ec2:DeleteNetworkAcl",
                "ec2:DeleteNetworkAclEntry",
                "ec2:DeleteRoute",
                "ec2:DeleteRouteTable",
                "ec2:AuthorizeSecurityGroupEgress",
                "ec2:AuthorizeSecurityGroupIngress",
                "ec2:RevokeSecurityGroupEgress",
                "ec2:RevokeSecurityGroupIngress",
                "ec2:DeleteSecurityGroup",
                "ec2:CreateNetworkInterfacePermission",
                "ec2:CreateRoute",
                "ec2:UpdateSecurityGroupRuleDescriptionsEgress",
                "ec2:UpdateSecurityGroupRuleDescriptionsIngress"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "ec2:Vpc": "arn:aws:ec2:REGION:ACCOUNTNUMBER:vpc/VPC-ID"
                }
            }
        },
        {
            "Sid": "AllowInstanceActionsTagBased",
            "Effect": "Allow",
            "Action": [
                "ec2:RebootInstances",
                "ec2:StopInstances",
                "ec2:TerminateInstances",
                "ec2:StartInstances",
                "ec2:AttachVolume",
                "ec2:DetachVolume",
                "ec2:AssociateIamInstanceProfile",
                "ec2:DisassociateIamInstanceProfile",
                "ec2:GetConsoleScreenshot",
                "ec2:ReplaceIamInstanceProfileAssociation"
            ],
            "Resource": [
                "arn:aws:ec2:REGION:ACCOUNTNUMBER:instance/*",
                "arn:aws:ec2:REGION:ACCOUNTNUMBER:volume/*"
            ],
            "Condition": {
                "StringEquals": {
                    "ec2:ResourceTag/TAG-KEY": "TAG-VALUE"
                }
            }
        },
        {
            "Sid": "AllowCreateTagsOnlyLaunching",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateTags"
            ],
            "Resource": [
                "arn:aws:ec2:REGION:ACCOUNTNUMBER:instance/*",
                "arn:aws:ec2:REGION:ACCOUNTNUMBER:volume/*"
            ],
            "Condition": {
                "StringEquals": {
                    "ec2:CreateAction": "RunInstances"
                }
            }
        }
    ]
}

3.    Remplacez les paramètres ACCOUNTNUMBER, REGION, TAG-KEY, TAG-VALUE, VPC-ID et ROLENAME par des valeurs de votre environnement.

4.    (Facultatif) Si vous affectez cette stratégie uniquement à des utilisateurs ou des groupes IAM, vous pouvez remplacer les paramètres TAG-KEY ou TAG-VALUE par la variable de stratégie IAM ${aws:username}. Cette variable de stratégie autorise le service IAM à préremplir ces paramètres avec le nom convivial de l'utilisateur IAM appelant. Cette étape permet aux utilisateurs IAM de lancer une instance uniquement dans le VPC spécifié et de contrôler leurs propres instances.

5.    Choisissez Review policy (Examiner une stratégie), puis entrez un nom pour Name (Nom). Par exemple, saisissez « VPC_Lockdown_VPC ID », où « VPC-ID » est l'ID du VPC auquel vous appliquez la stratégie.

6.    Choisissez Create policy (Créer une stratégie).

Remarque : certains éléments doivent être remplacés par des ressources spécifiques de votre environnement. Pour plus d'informations, consultez Amazon Resource Names (ARN).

Association de la stratégie à un utilisateur, un groupe ou un rôle

1.    Dans le volet de navigation de la console IAM, choisissez Users (Utilisateurs), Groups (Groupes) ou Roles (Rôles).

2.    Choisissez l'utilisateur, le groupe ou le rôle auquel vous associez la stratégie.

3.    Choisissez Attach policies (Associer des stratégies).

4.    Dans la zone de recherche, saisissez le nom de la stratégie que vous avez créée, puis choisissez la stratégie. Par exemple, saisissez « VPC_Lockdown_VPC ID ».

5.    Choisissez Attach Policy (Associer une stratégie).

Une entité IAM avec cette stratégie personnalisée associée peut se connecter à la console AWS, ouvrir le tableau de bord Amazon EC2, puis lancer une instance EC2 après avoir spécifié le sous-réseau, le VPC et la balise.

Cette stratégie limite les actions suivantes en utilisant la condition de stratégie « ec2:ResourceTags » :

  • Démarrage de l'instance
  • Arrêt de l'instance
  • Redémarrage de l'instance
  • Résiliation de l'instance
  • Association d'un volume à l'instance
  • Dissociation d'un volume de l'instance
  • Dissociation du profil d'instance IAM de l'instance
  • Remplacement de l'association de profil d'instance IAM de l'instance
  • Obtention d'une capture d'écran de la console de l'instance

Cette stratégie limite les actions suivantes sur le VPC spécifié :

  • Suppression de groupes de sécurité
  • Création et suppression de routes
  • Suppression de tables de routage
  • Suppression de listes de contrôle d'accès (LCA) réseau
  • Suppression d'entrées LCA
  • Autorisation ou révocation des règles de trafic entrant et sortant pour les groupes de sécurité
  • Création d'autorisations pour les interfaces réseau
  • Mise à jour de la description des groupes de sécurité pour les règles de trafic entrant et sortant

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?