Wie kann ich IAM-Policy-Tags verwenden, um einzuschränken, wie eine EC2-Instance oder ein EBS-Volume erstellt werden kann?

Lesedauer: 5 Minute
0

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/WertErgebnis
key1/value1 und key2/value2zulassen
key1/value1ablehnen
key1/value2ablehnen
keine Schlüssel und Werteablehnen

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/WertErgebnis
key1/value1 und key2/value2zulassen
key1/value1zulassen
key1/value2ablehnen
keine Schlüssel und Werteablehnen

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/WertErgebnis
key1/value1 und key2/value2zulassen
key1/value1zulassen
key1/value2zulassen
keine Schlüssel und Werteablehnen

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/WertErgebnis
key1/AnyValue und key2/AnyValueZulassen
key1/AnyValueAblehnen
key2/AnyValueAblehnen
Keine Schlüssel oder WerteAblehnen
key1/AnyValue, key2/AnyValue, key3/AnyValueAblehnen

Ähnliche Informationen

Wie erstelle ich eine IAM-Richtlinie, um den Zugriff auf Amazon EC2-Ressourcen mithilfe von Tags zu kontrollieren?

Eine Bedingung mit mehreren Schlüsseln oder Werten erstellen

Beispiel für identitätsbasierte IAM-Richtlinien

Kennzeichnen Sie Ihre Amazon EC2-Ressourcen

Aktionen, Ressourcen und Bedingungsschlüssel für Amazon EC2

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren