Comment créer une politique IAM afin d’accorder explicitement des autorisations de création et de gestion d'instances EC2 dans un VPC spécifié doté de balises ?

Lecture de 5 minute(s)
0

Je souhaite créer une politique Gestion des identités et des accès AWS (AWS IAM) qui accorde explicitement des autorisations aux identités IAM pour gérer les instances Amazon Elastic Compute Cloud (Amazon EC2) dans un cloud privé virtuel (VPC).

Brève description

La politique IAM doit limiter les autorisations de l'identité IAM pour gérer les instances du VPC doté de balises.

Amazon EC2 fournit des autorisations partielles au niveau des ressources, mais il existe plusieurs actions, ressources et conditions au niveau du service que vous pouvez utiliser. Pour contrôler l'accès aux ressources EC2, utilisez des balises de ressources.

Résolution

Créez une politique qui accorde des autorisations pour lancer les instances dans le VPC mais limite les autorisations de l’identité IAM pour la gestion des instances. Pour restreindre la gestion des instances, utilisez la condition de politique ec2:ResourceTag.

Créer une politique gérée à attacher aux identités IAM qui lancent vos instances

Procédez comme suit :

  1. Ouvrez la console IAM, choisissez Politiques, puis choisissez Créer une politique.

  2. Choisissez l'onglet JSON, puis saisissez la politique personnalisée suivante :

    {  "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"
            }
          }
        }
      ]
    }

    Remarque : remplacez les paramètres ACCOUNTNUMBER, REGION, TAG-KEY, TAG-VALUE, VPC-ID et ROLENAME par vos valeurs.

  3. (Facultatif) Pour attribuer la politique uniquement aux utilisateurs ou aux groupes IAM, remplacez les paramètres TAG-KEY ou TAG-VALUE par la variable de politique IAM ${aws:username}. Cette variable de politique permet à IAM de préremplir les paramètres avec le nom convivial de l'utilisateur IAM. Les utilisateurs IAM peuvent lancer une instance uniquement dans le VPC spécifié et contrôler leurs propres instances.

  4. Choisissez Examiner une stratégie, puis saisissez un nom. Par exemple, VPC_Lockdown_VPC-ID.

  5. Choisissez Créer une politique.
    Remarque : vous devez remplacer certains éléments par des ressources spécifiques de votre environnement. Pour en savoir plus, consultez la page Amazon Resource Name (ARN).

Attacher la politique à un utilisateur, un groupe ou un rôle

Procédez comme suit :

  1. Ouvrez la console IAM.
  2. Dans le volet de navigation, choisissez Utilisateurs, Groupes ou Rôles, puis choisissez l'identité IAM.
  3. Choisissez Ajouter des autorisations, puis Attacher des politiques.
  4. Saisissez le nom de la politique, puis choisissez votre politique.
  5. Choisissez Attacher la politique.

Une fois la politique personnalisée attachée, l'identité IAM peut se connecter à la console de gestion AWS, ouvrir le tableau de bord EC2 et lancer une instance EC2. L'identité IAM doit spécifier le sous-réseau, le VPC et la balise pour pouvoir lancer l'instance EC2.

La condition ec2:ResourceTags limite les actions suivantes :

  • Démarrer une instance.
  • Arrêter une instance.
  • Redémarrer une instance.
  • Résilier une instance.
  • Attacher un volume à l'instance.
  • Détacher un volume de l'instance.
  • Dissocier le profil d'instance IAM de l'instance.
  • Associer un profil d'instance.
  • Remplacer l'association de profil d'instance IAM pour l'instance.
  • Prendre une capture d'écran de l'instance à partir de la console.

La politique limite les actions suivantes à l'encontre du VPC :

  • Supprimer des groupes de sécurité.
  • Créer et supprimer des routages.
  • Supprimer les tables de routage.
  • Supprimer les listes de contrôle d'accès au réseau (ACL réseau).
  • Supprimer les entrées ACL du réseau.
  • Autoriser ou révoquer les règles d'entrée et de sortie des groupes de sécurité.
  • Créer des autorisations relatives à l'interface réseau.
  • Mettre à jour la description du groupe de sécurité pour les règles d'entrée et de sortie.

Informations connexes

Comment utiliser les clés de condition PrincipalTag, ResourceTag, RequestTag et TagKeys pour créer une politique IAM de restrictions basées sur les balises ?