Wie kann ich IAM-Policy-Tags verwenden, um einzuschränken, wie eine EC2-Instance oder ein EBS-Volume erstellt werden kann?
Ich möchte Benutzern oder Gruppen von AWS Identity and Access Management (IAM) Zugriff gewähren, um neue Amazon Elastic Compute Cloud (Amazon EC2)-Instances zu starten. Ich möchte IAM-Benutzern auch den Zugriff ermöglichen, neue Amazon Elastic Block Store (Amazon EBS)-Volumes zu erstellen, aber nur, wenn sie bestimmte Tags anwenden.
Kurzbeschreibung
Geben Sie Tags für EC2-Instances und EBS-Volumes als Teil des API-Aufrufs an, der die Ressourcen erstellt. Mit diesem Prinzip können Sie von IAM-Benutzern verlangen, bestimmte Ressourcen zu kennzeichnen, indem Sie Bedingungen auf ihre IAM-Richtlinie anwenden. Die folgenden Beispielrichtlinien erlauben es Benutzern nicht, Sicherheitsgruppen oder Schlüsselpaare zu erstellen. Daher müssen Benutzer bereits vorhandene Sicherheitsgruppen und Schlüsselpaare auswählen.
Mit den folgenden Beispiel-IAM-Richtlinien können Benutzer:
- Starten Sie EC2-Instances mit passenden Tag-Schlüsseln und -Werten
- Starten Sie EC2-Instances mit mindestens einem passenden Tag und Wert
- Starten Sie EC2-Instances, die über mindestens einen passenden Tag-Schlüssel verfügen
- Starten Sie EC2-Instances, die nur die angegebene Liste von Tags haben
Lösung
Starten Sie EC2-Instances mit passenden Tag-Schlüsseln und -Werten
Die folgende Beispielrichtlinie ermöglicht es einem Benutzer nur dann, eine EC2-Instance zu starten und ein EBS-Volume zu erstellen, wenn der Benutzer alle in der Richtlinie definierten Tags mithilfe des Qualifikators forAllValues anwendet. Wenn der Benutzer ein Tag anwendet, das nicht in der Richtlinie enthalten ist, wird die Aktion verweigert. Um die Berücksichtigung der Groß- und Kleinschreibung zu erzwingen, verwenden Sie die Bedingung aws:TagKeys.
Hinweis: Ändern Sie key1 und value1 in den Beispielrichtlinien, um die Tags und Werte aufzunehmen, die für Ihre Ressourcen gelten:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowToDescribeAll", "Effect": "Allow", "Action": [ "ec2:Describe*" ], "Resource": "*" }, { "Sid": "AllowRunInstances", "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:*::image/*", "arn:aws:ec2:*::snapshot/*", "arn:aws:ec2:*:*:subnet/*", "arn:aws:ec2:*:*:network-interface/*", "arn:aws:ec2:*:*:security-group/*", "arn:aws:ec2:*:*:key-pair/*" ] }, { "Sid": "AllowRunInstancesWithRestrictions", "Effect": "Allow", "Action": [ "ec2:CreateVolume", "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:*:*:volume/*", "arn:aws:ec2:*:*:instance/*", "arn:aws:ec2:*:*:network-interface/*" ], "Condition": { "StringEquals": { "aws:RequestTag/key1": "value1", "aws:RequestTag/key2": "value2" }, "ForAllValues:StringEquals": { "aws:TagKeys": [ "key1", "key2" ] } } }, { "Sid": "AllowCreateTagsOnlyLaunching", "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": [ "arn:aws:ec2:*:*:volume/*", "arn:aws:ec2:*:*:instance/*", "arn:aws:ec2:*:*:network-interface/*" ], "Condition": { "StringEquals": { "ec2:CreateAction": [ "RunInstances", "CreateVolume" ] } } } ] }
Wichtig: Um EC2-Instances erfolgreich zu starten, muss diese Richtlinie passende Tag-Schlüssel und -Werte enthalten. Wenn die Schlüssel- und Wertepaare nicht übereinstimmen, erhalten Sie den Fehler „Start fehlgeschlagen“ oder eine ähnliche API-Fehlermeldung.
Beispielergebnisse
Schlüssel/Wert | Ergebnis |
key1/value1 und key2/value2 | zulassen |
key1/value1 | ablehnen |
key1/value2 | ablehnen |
keine Schlüssel und Werte | ablehnen |
Starten Sie EC2-Instances mit mindestens einem passenden Tag und Wert
Ersetzen Sie im folgenden Beispiel den Bedingungsblock AllowRunInstancesWithRestrictions, damit ein Benutzer eine EC2-Instance starten und EBS-Volumes erstellen kann, wenn mindestens ein Tag-Schlüssel den Namen key1 hat und sein Wert value1 ist. In der RunInstances-Anfrage können beliebig viele zusätzliche Tags hinzugefügt werden:
"Condition": { "StringEquals": { "aws:RequestTag/key1": "value1" }, "ForAnyValue:StringEquals": { "aws:TagKeys": [ "key1" ] } }
Beispielergebnisse
Schlüssel/Wert | Ergebnis |
key1/value1 und key2/value2 | zulassen |
key1/value1 | zulassen |
key1/value2 | ablehnen |
keine Schlüssel und Werte | ablehnen |
Starten Sie EC2-Instances, die über mindestens einen passenden Tag-Schlüssel verfügen
Ersetzen Sie im folgenden Richtlinienbeispiel den Bedingungsblock AllowRunInstancesWithRestrictions, damit ein Benutzer eine EC2-Instance starten und EBS-Volumes erstellen kann, wenn mindestens ein Tag-Schlüssel den Namen key1 hat. Für das key1-Tag ist kein bestimmter Wert erforderlich, und der RunInstances-Anfrage können beliebig viele zusätzliche Tags hinzugefügt werden.
"Condition": { "ForAnyValue:StringEquals": { "aws:TagKeys": [ "key1" ] } }
Beispielergebnisse
Schlüssel/Wert | Ergebnis |
key1/value1 und key2/value2 | zulassen |
key1/value1 | zulassen |
key1/value2 | zulassen |
keine Schlüssel und Werte | ablehnen |
Starten Sie EC2-Instances, die nur die angegebene Liste von Tags haben
Ersetzen Sie in der folgenden Beispielrichtlinie den Bedingungsblock AllowRunInstancesWithRestrictions, damit ein Benutzer nur dann eine EC2-Instance starten und EBS-Volumes erstellen kann, wenn die Tag-Schlüssel key1 und key2 in der Anforderung angegeben sind. Für keinen der Tag-Schlüssel ist ein bestimmter Wert erforderlich, und der RunInstances-Anfrage können keine zusätzlichen Tags hinzugefügt werden:
"Condition": { "StringLike": { "aws:RequestTag/key1": "*", "aws:RequestTag/key2": "*" }, "ForAllValues:StringEquals": { "aws:TagKeys": [ "key1", "key2" ] } }
Hinweis: Die StringLike-Bedingung ist erforderlich, um sicherzustellen, dass alle Tags vorhanden sind.
Beispielergebnisse
Schlüssel/Wert | Ergebnis |
key1/AnyValue und key2/AnyValue | Zulassen |
key1/AnyValue | Ablehnen |
key2/AnyValue | Ablehnen |
Keine Schlüssel oder Werte | Ablehnen |
key1/AnyValue, key2/AnyValue, key3/AnyValue | Ablehnen |
Ähnliche Informationen
Eine Bedingung mit mehreren Schlüsseln oder Werten erstellen
Beispiel für identitätsbasierte IAM-Richtlinien
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor 9 Monaten