Wie kann ich den Zugriff für den Start von Amazon-EC2-Instances so einschränken, dass er nur von getaggten AMIs aus möglich ist?

Lesedauer: 3 Minute
0

Ich möchte den Zugriff der Benutzer einschränken, sodass sie Amazon Elastic Compute Cloud (Amazon EC2)-Instances nur von getaggten Amazon Machine Images (AMIs) aus starten können. Wie kann ich mithilfe von AMI-Tags den Zugriff auf den Start von EC2-Instances einschränken?

Behebung

Um den Benutzerzugriff für den Start von EC2-Instances auf getaggte AMIs einzuschränken, erstellen Sie ein AMI aus einer vorhandenen Instance – oder verwenden Sie ein vorhandenes AMI – und fügen Sie diesem ein Tag hinzu. Erstellen Sie dann eine benutzerdefinierte AWS Identity and Access Management (IAM)-Richtlinie mit einer Tag-Bedingung, die die Berechtigungen der Benutzer so einschränkt, dass sie nur Instances starten können, die das getaggte AMI verwenden.

Dieses Beispiel einer IAM-Richtlinie enthält drei Anweisungs-IDs (Sids):

  • Sid ReadOnlyAccess erlaubt Benutzern, mithilfe von Describe* alle EC2-Ressourcen in Ihrem Konto einzusehen. Damit werden alle EC2-Aktionen eingeschlossen, die mit Describe beginnen. Mit Sid ReadOnlyAccess können Benutzer außerdem Konsolenausgaben und Screenshots einer EC2-Instance abrufen. Weitere Informationen finden Sie unter GetConsoleOutput und GetConsoleScreenshot. Die Amazon-CloudWatch-Berechtigungen für DescribeAlarms und GetMetricStatistics ermöglichen die Anzeige grundlegender Zustandsinformationen über EC2-Instances in der Amazon-EC2-Konsole. Die IAM-Berechtigung für ListInstanceProfiles ermöglicht die Anzeige der vorhandenen Instance-Profile auf der Liste der IAM-Rollen auf der Seite „Konfigurieren von Instance-Details“, wenn eine EC2-Instance gestartet wird. Die ListInstanceProfiles-API erlaubt Benutzern jedoch nicht, eine IAM-Rolle an eine EC2-Instance anzufügen.
  • Sid ActionsRequiredtoRunInstancesInVPC gewährt Benutzern die Berechtigung, mithilfe beliebiger Instances, Schlüsselpaare, Sicherheitsgruppen, Volumes, Netzwerkschnittstellen oder Subnetze in der Region us-east-1 die RunInstances-API auszuführen, unter Verwendung von Berechtigungen auf Ressourcenebene durch Angabe des ARN für jede Ressource.
  • Sid LaunchingEC2withAMIsAndTags ermöglicht es Benutzern, EC2-Instances mithilfe eines AMI zu starten, wenn das AMI über eine Tag-Umgebung verfügt, deren Wert auf Prod gesetzt ist, und sich in der Region us-east-1 befindet. Die Berechtigung auf Ressourcenebene ist für jedes AMI in der Region us-east-1 auf einen ARN festgelegt, und die Bedingung entspricht dem Wert des Tag-Schlüssels EC2:ResourceTag/Environment und dem Schlüsselwert Prod.

Die folgende IAM-Richtlinie verwendet Berechtigungen auf Ressourcenebene für die Ressourcen, die für die RunInstances-API-Aktion erforderlich sind. Weitere Informationen zu den erforderlichen Ressourcen für RunInstances finden Sie unter Unterstützte Berechtigungen auf Ressourcenebene.

Hinweis:

  • Diese Richtlinie ermöglicht es Benutzern, beim Starten einer EC2-Instance Rollen aufzulisten. Sie können jedoch keine Instance starten, an die eine Rolle angehängt ist, wenn sie nicht über die Berechtigung iam:PassRole verfügen.
  • Diese Richtlinie erlaubt Benutzern nicht, neue Sicherheitsgruppen zu erstellen. Benutzer müssen eine vorhandene Sicherheitsgruppe auswählen, um eine EC2-Instance zu starten, sofern sie nicht über die EC2-Berechtigung CreateSecurityGroup verfügen. Die API-Aktion EC2:CreateSecurityGroup gewährt Zugriff nur für die Erstellung einer Sicherheitsgruppe. Mit dieser Aktion werden keine Regeln hinzugefügt oder geändert. Um Regeln für eingehenden Datenverkehr hinzuzufügen, benötigen Benutzer Berechtigungen für die EC2-API-Aktion für eingehenden Datenverkehr AuthorizeSecurityGroupIngress und die EC2-API-Aktion für ausgehenden Datenverkehr 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"
        }
      }
    }
  ]
}