Wie kann ich eine IAM-Richtlinie erstellen, um einem IAM-Benutzer, einer Gruppe oder einer Rolle explizit Berechtigungen zum Erstellen und Verwalten von EC2-Instances in einer bestimmten VPC mithilfe von Tags zu gewähren?

Lesedauer: 5 Minute
0

Wie kann ich eine AWS Identity and Access Management (IAM) -Richtlinie erstellen, die einem IAM-Benutzer, einer Gruppe oder einer Rolle explizit Berechtigungen zur Erstellung und Verwaltung von Amazon Elastic Compute Cloud (Amazon EC2)-Instances in einer bestimmten VPC gewährt? Die Richtlinie muss die Berechtigungen einschränken, damit die IAM-Entität EC2-Instances mit bestimmten Tags erstellen und diese EC2-Instances in einer VPC mithilfe dieser Tags verwalten kann.

Kurzbeschreibung

Amazon EC2 bietet begrenzte unterstützte Berechtigungen auf Ressourcenebene, es sind jedoch mehrere Aktionen, Ressourcen und Bedingungen zu berücksichtigen. Bestimmte Amazon EC2-API-Aktionen, wie das Starten einer EC2-Instance, können mithilfe von Tags zur Steuerung der Instanzen über den VPC ARN gesteuert werden.

Lösung

Wenden Sie eine benutzerdefinierte IAM-Richtlinie an, um die Berechtigungen eines IAM-Benutzers, einer IAM-Gruppe oder -Rolle für die Erstellung von EC2-Instances in einer bestimmten VPC mit Tags einzuschränken. Verwenden Sie die Richtlinienbedingung „ec2:ResourceTags“, um die Kontrolle auf Instanzen zu beschränken. Diese Richtlinie gewährt Berechtigungen zum Starten von EC2-Instances in einer bestimmten VPC mit einem eindeutigen Tag. Sie können diese EC2-Instances dann mithilfe restriktiver Tags verwalten.

Erstellen Sie eine verwaltete Richtlinie, die auf die IAM-Entitäten angewendet wird, die Ihre Instanzen starten

1.    Öffnen Sie die IAM-Konsole, wählen Sie Richtlinien und dann Richtlinie erstellen.

2.    Wählen Sie die Registerkarte JSON und geben Sie dann diese benutzerdefinierte Richtlinie ein:

{
  "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.    Ersetzen Sie die Parameter ACCOUNTNUMBER, REGION, TAG-SCHLÜSSEL, TAG-WERT, VPC-ID und ROLENAME durch Werte aus Ihrer Umgebung.

4.    (Optional) Wenn Sie diese Richtlinie nur IAM-Benutzern oder -Gruppen zuweisen, können Sie die Parameter TAG-SCHLÜSSEL oder TAG-WERT durch die IAM-Richtlinienvariable ${aws:username} ersetzen. Diese Richtlinienvariable ermöglicht es dem IAM-Dienst, diese Parameter vorab mit dem Anzeigenamen des aufrufenden IAM-Benutzers zu füllen. Dieser Schritt ermöglicht es IAM-Benutzern, eine Instance nur in der angegebenen VPC zu starten, und ermöglicht den IAM-Benutzern, ihre eigenen Instanzen zu kontrollieren.

5.    Wählen Sie Überprüfungsrichtlinie und geben Sie dann für Name einen Namen ein. Geben Sie beispielsweise „VPC\ _Lockdown\ _VPC-ID“ ein, wobei „VPC-ID“ die ID der VPC ist, auf die Sie diese Richtlinie anwenden.

6.    Wählen Sie Richtlinie erstellen aus.

Hinweis: Einige Elemente müssen durch bestimmte Ressourcen aus Ihrer Umgebung ersetzt werden. Weitere Informationen finden Sie unter Amazon Resource Names (ARNs).

Die Richtlinie einem Benutzer, einer Gruppe oder Rolle zuordnen

1.    Wählen Sie im Navigationsbereich der IAM-Konsole Benutzer, Gruppen oder Rollen aus.

2.    Wählen Sie den Benutzer, die Gruppe oder die Rolle aus, an die Sie die Richtlinie anhängen möchten.

3.    Wählen Sie Richtlinien anhängen.

4.    Geben Sie den Namen der Richtlinie, die Sie erstellt haben, in das Suchfeld ein, und wählen Sie dann Ihre Richtlinie aus. Geben Sie beispielsweise „VPC\ _Lockdown\ _VPC-ID“ ein.

5.    Wählen Sie Richtlinie anhängen.

Eine IAM-Entität, an die diese benutzerdefinierte Richtlinie angehängt ist, kann sich bei der AWS-Managementkonsole anmelden, das Amazon EC2-Dashboard öffnen und dann eine EC2-Instance starten, nachdem sie das Subnetz, die VPC und das Tag angegeben hat.

Diese Richtlinie schränkt die folgenden Aktionen unter Verwendung der Richtlinienbedingung „ec2:ResourceTags“ ein:

  • Instanz starten
  • Instanz beenden
  • Die Instanz neu starten
  • Instanz beenden
  • Ein Volume an die Instanz anhängen
  • Ein Volume von der Instanz trennen
  • Trennen des IAM-Instanzprofils von der Instanz
  • Ersetzen der IAM-Instanzprofilzuordnung für die Instanz
  • Einen Konsolen-Screenshot der Instanz abrufen

Diese Richtlinie schränkt die folgenden Aktionen gegen die angegebene VPC ein:

  • Löschen von Sicherheitsgruppen
  • Routen erstellen und löschen
  • Löschen von Routentabellen
  • Netzwerk-ACLs löschen
  • Löschen von ACL-Einträgen
  • Regeln für eingehenden und ausgehenden Zugriff von Sicherheitsgruppen autorisieren oder widerrufen
  • Netzwerkschnittstellenberechtigungen erstellen
  • Aktualisierung der Sicherheitsgruppenbeschreibung für Eingangs- und Ausgangsregeln

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren