Comment restreindre l'accès pour le lancement des instances Amazon EC2 uniquement à partir d'AMI balisées ?

Lecture de 3 minute(s)
0

Je souhaite limiter l'accès des utilisateurs pour qu'ils ne puissent lancer des instances Amazon Elastic Compute Cloud (Amazon EC2) qu'à partir d'Amazon Machine Images (AMI) balisées. Comment restreindre l'accès pour lancer des instances EC2 uniquement à l'aide d'AMI balisées ?

Résolution

Pour restreindre l'accès des utilisateurs à lancer des instances EC2 à l'aide d'AMI balisées, créez une AMI à partir d'une instance existante, ou utilisez une AMI existante, puis ajoutez une balise à l'AMI. Ensuite, créez une stratégie AWS Identity and Access Management (IAM) personnalisée avec une condition de balisage qui autorise uniquement les utilisateurs à lancer des instances qui utilisent l'AMI balisée.

Dans cet exemple de stratégie IAM, il existe trois ID de déclaration (Sids) :

  • Sid ReadOnlyAccess permet aux utilisateurs d'afficher toutes les ressources EC2 dans votre compte à l’aide de Describe*, qui comprend toutes les actions EC2 commençant par Describe. Sid ReadOnlyAccess permet également aux utilisateurs d'obtenir une sortie de console et des captures d’écran d’une instance EC2. Pour plus d'informations, consultez GetConsoleOutput et GetConsoleScreenshot. Les autorisations Amazon CloudWatch pour DescribeAlarms et GetMetricStatistics permettent l'affichage d'informations sur l'état des instances EC2 dans la console Amazon EC2. L'autorisation IAM pour ListInstanceProfiles permet l'affichage des profils d'instance existants dans la liste de rôles IAM sur la page Configure Instance Details (Configurer les informations de l'instance) lors du lancement d'une instance EC2. Toutefois, l'API ListInstanceProfiles ne permet pas aux utilisateurs d'attacher un rôle IAM à une instance EC2.
  • Sid ActionsRequiredtoRunInstancesInVPC donne aux utilisateurs l'autorisation d'utiliser l'API RunInstances en utilisant n'importe quelle instance, paire de clés, groupe de sécurité, volume, interface réseau, ou sous-réseau dans la région us-east-1 en utilisant les permissions au niveau de la ressource notamment en spécifiant l'ARN pour chaque ressource.
  • Sid LaunchingEC2withAMIsAndTags permet aux utilisateurs de lancer des instances EC2 en utilisant une AMI si l'AMI possède dans son environnement une balise dont la valeur est définie sur Prod et que l'AMI est située dans la région us-east-1. L'autorisation au niveau des ressources est paramétrée sur l'ARN pour toute AMI située dans la région us-east-1, et dont la condition correspond à la valeur de la clé de balise EC2:ResourceTag/Environment et à la valeur de clé Prod.

La stratégie IAM suivante utilise les autorisations au niveau des ressources pour les ressources requises pour l'action d'API RunInstances. Pour plus d'informations sur les ressources requises pour RunInstances, consultez la section Autorisations prises en charge au niveau des ressources.

Remarque :

  • Cette stratégie permet aux utilisateurs de répertorier les rôles lors du lancement d'une instance EC2, mais ils ne peuvent pas lancer une instance à laquelle un rôle est attaché, sauf s'ils disposent de l'autorisation iam:PassRole.
  • Cette stratégie ne permet pas aux utilisateurs de créer de nouveaux groupes de sécurité. Les utilisateurs doivent sélectionner un groupe de sécurité existant pour lancer une instance EC2, à moins qu'ils ne disposent de l'autorisation EC2 CreateSecurityGroup. L'action d'API EC2:CreateSecurityGroup autorise un utilisateur à créer uniquement un groupe de sécurité ; cette action n'ajoute ni ne modifie aucune règle. Pour ajouter des règles entrantes, les utilisateurs doivent être autorisés à effectuer l'action API entrante EC2 AuthorizeSecurityGroupIngress et l'action d'API sortante EC2 AuthorizeSecurityGroupEgress.
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ReadOnlyAccess",
      "Effect": "Allow",
      "Action": [
        "ec2:Describe*",
        "ec2:GetConsole*",
        "cloudwatch:DescribeAlarms",
        "cloudwatch:GetMetricStatistics",
        "iam:ListInstanceProfiles"
      ],
      "Resource": "*"
    },
    {
      "Sid": "ActionsRequiredtoRunInstancesInVPC",
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": [
        "arn:aws:ec2:us-east-1:AccountId:instance/*",
        "arn:aws:ec2:us-east-1:AccountId:key-pair/*",
        "arn:aws:ec2:us-east-1:AccountId:security-group/*",
        "arn:aws:ec2:us-east-1:AccountId:volume/*",
        "arn:aws:ec2:us-east-1:AccountId:network-interface/*",
        "arn:aws:ec2:us-east-1:AccountId:subnet/*"
      ]
    },
    {
      "Sid": "LaunchingEC2withAMIsAndTags",
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": "arn:aws:ec2:us-east-1::image/ami-*",
      "Condition": {
        "StringEquals": {
          "ec2:ResourceTag/Environment": "Prod"
        }
      } 
    }
  ]
}