En utilisant AWS re:Post, vous acceptez les AWS re:Post Conditions d’utilisation

Comment puis-je restreindre l’accès pour que les utilisateurs lancent des instances Amazon EC2 uniquement à partir d’AMI balisées ?

Lecture de 4 minute(s)
0

Je souhaite restreindre l’accès des utilisateurs pour qu’ils lancent des instances Amazon Elastic Compute Cloud (Amazon EC2) uniquement à partir d’Amazon Machine Images (AMI) balisées.

Résolution

Pour restreindre l’accès afin que les utilisateurs lancent des instances EC2 uniquement à partir d’AMI balisées, effectuez l’une des actions suivantes :

  • Créez une AMI à partir d’une instance existante.
  • Utilisez une AMI existante, puis ajoutez-y une balise.

Créez ensuite une politique AWS Identity and Access Management (IAM) personnalisée. La politique IAM utilise une condition de balise qui limite les autorisations des utilisateurs pour lancer uniquement les instances qui utilisent l’AMI balisée.

Dans l’exemple de politique IAM suivant, les valeurs Sid (ID d’instruction) suivantes sont utilisées :

  • ReadOnlyAccess permet aux utilisateurs de visualiser les ressources EC2 de votre compte avec Describe* qui inclut toutes les actions EC2 commençant par Describe. ReadOnlyAccess permet également aux utilisateurs d’obtenir la sortie de la console et des captures d’écran de console d’une instance. Les autorisations Amazon CloudWatch pour DescribeAlarms et GetMetricStatistics permettent aux informations d’état relatives aux instances d’apparaître dans la console Amazon EC2. L’autorisation IAM pour ListInstanceProfiles permet aux profils d’instance existants de s’afficher dans la liste des rôles IAM. La liste des rôles IAM apparaît sur la page Configurer les détails de l’instance lorsque vous lancez une instance. Cependant, l’API ListInstanceProfiles n’autorise pas les utilisateurs à associer un rôle IAM à une instance.
  • ActionsRequiredtoRunInstancesInVPC accorde aux utilisateurs l’autorisation d’exécuter l’API RunInstances. Vous pouvez utiliser n’importe quelle instance, paire de clés, groupe de sécurité, volume, interface réseau ou sous-réseau dans la région AWS us-east-1. Les autorisations au niveau des ressources spécifient l’ARN de chaque ressource.
  • LaunchingEC2withAMIsAndTags permet aux utilisateurs d’utiliser une AMI pour lancer des instances. L’AMI doit avoir une balise Environment dont la valeur est définie sur Prod dans la région us-east-1. L’autorisation au niveau des ressources est définie sur un ARN pour toute AMI située dans la région us-east-1. La condition correspond à la valeur de la clé de balise EC2:ResourceTag/Environment et à la valeur de la clé Prod.

La politique IAM suivante utilise les autorisations au niveau des ressources prises en charge pour les ressources requises pour l’action d’API RunInstances.

Remarque :

  • cette politique permet aux utilisateurs de répertorier les rôles lorsqu’ils lancent une instance. Toutefois, les utilisateurs ne peuvent lancer une instance avec un rôle associé que s’ils disposent de l’autorisation iam:PassRole.
  • Cette politique n’autorise pas les utilisateurs à créer de nouveaux groupes de sécurité. À moins que les utilisateurs ne disposent de l’autorisation EC2 CreateSecurityGroup, ils doivent sélectionner un groupe de sécurité existant pour lancer une instance EC2. L’action d’API EC2:CreateSecurityGroup autorise uniquement l’accès à la création d’un groupe de sécurité. L’action n’ajoute ni ne modifie aucune règle. Pour ajouter des règles entrantes, les utilisateurs doivent être autorisés à accéder à l’action d’API EC2 AuthorizeSecurityGroupIngress entrante et à l’action d’API EC2 AuthorizeSecurityGroupEgress sortante.
  • Cette politique n’autorise pas les utilisateurs à joindre le nom de l’instance ou à modifier et attacher des balises à la ressource d’instance EC2. À moins que les utilisateurs ne disposent de l’autorisation CreateTags lorsqu’ils créent l’instance, ils doivent laisser les balises et le nom vides.
{  "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"
        }
      }
    }
  ]
}