Wie funktioniert die IAM-Evaluierungslogik mithilfe einer expliziten Ablehnungsrichtlinie mit mehreren Bedingungsschlüsseln?

Lesedauer: 3 Minute
0

Ich möchte eine explizite Ablehnungsrichtlinie für AWS Identity and Access Management (IAM) erstellen, die die Erstellung von Amazon Elastic Compute Cloud (Amazon EC2)-Instances und Amazon Elastic Block Store (Amazon EBS)-Volumes einschränkt. Wie mache ich das?

Kurzbeschreibung

Sie können IAM-Policy-Tags verwenden, um den Start von EC2-Instances und EBS-Volumes einzuschränken, indem Sie die Bedingungsoperatoren Zulassen mit StringLike oder Ablehnen mit StringNotLike verwenden. Anweisungen zur Verwendung von Zulassen mit StringLike-Bedingungsoperatoren finden Sie unter Wie kann ich IAM-Policy-Tags verwenden, um einzuschränken, wie eine EC2-Instance oder ein EBS-Volume erstellt werden kann?

Lösung

Verwenden Sie die folgende Beispiel-IAM-Richtlinie, die Ablehnen mit StringNotLike verwendet, um die Erstellung von EC2-Instances und EBS-Volumes einzuschränken.

Hinweis: Es ist eine bewährte Methode, Ablehnen mit StringNotLike zu verwenden, um einen versehentlichen privilegierten Zugriff zu verhindern.

Wenn Ihre Richtlinie mehrere Bedingungsoperatoren oder mehrere Schlüssel an einen einzelnen Bedingungsoperator angehängt hat, werden die Bedingungen mithilfe der UND-Logik ausgewertet. Bei Ablehnen von mehreren Tag-Werten muss jeder RequestTag-Schlüssel in separaten Anweisungen verwendet werden, um dieselbe UND-Logik zu erhalten.

Hinweis: Das Festlegen aller RequestTag-Schlüsselwerte in einer Bedingung mit einer Ablehnungs-Richtlinie funktioniert möglicherweise nicht wie erwartet. Dies liegt daran, dass die Aktion zulässig ist, bis alle Bedingungen erfüllt sind. Wenn alle Bedingungen erfüllt sind, wird die Aktion abgelehnt.

Beachten Sie die folgenden erforderlichen Tags:

  • Das Tag cost\ _center muss einen Wert ungleich Null haben.
  • Die EC2-Instance hat einen Tag-Schlüssel mit dem Namen Produktion.
  • Das Identifier-Tag muss eine Kombination aus fünf beliebigen Zeichen sein.
  • Der Wert des Tags env muss sandbox, dev oder prod. lauten
{
    "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": "AllowRunInstancesWithRestrictions1",
            "Effect": "Deny",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:RequestTag/cost_center": "?*"
                }
            }
        },
        {
            "Sid": "AllowRunInstancesWithRestrictions2",
            "Effect": "Deny",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "ForAllValues:StringNotLike": {
                    "aws:TagKeys": "Production"
                }
            }
        },
        {
            "Sid": "AllowRunInstancesWithRestrictions3",
            "Effect": "Deny",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:RequestTag/identifier": "?????"
                }
            }
        },
        {
            "Sid": "AllowRunInstancesWithRestrictions4",
            "Effect": "Deny",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:RequestTag/env": [
                        "sandbox",
                        "dev",
                        "prod"
                    ]
                }
            }
        },
        {
            "Sid": "AllowRunInstances1",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ]
        },
        {
            "Sid": "AllowCreateTagsOnRunInstance",
            "Effect": "Allow",
            "Action": "ec2:CreateTags",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "ec2:CreateAction": "RunInstances"
                }
            }
        }
    ]
}

Beachten Sie die folgenden Erzwingungswerte:

  • Der Wert aws:TagKeys erzwingt die Überprüfung der Groß- und Kleinschreibung von Produktion.
  • Der Wert ???? erzwingt, dass die Kombination von fünf beliebigen Zeichen verwendet werden kann (führende oder nachstehende Leerzeichen werden ignoriert).
  • Der Wert ?* erzwingt, dass mindestens ein Zeichen im Wertfeld vorhanden ist, sodass EC2-Instances nicht mit leeren Tag-Werten gestartet werden können.

Ähnliche Informationen

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

Taggen Ihrer Amazon EC2-Ressourcen

Steuern des Zugriffs auf AWS-Ressourcen mithilfe von Ressourcen-Tags

Bewertungslogik für Bedingungen mit mehreren Schlüsseln oder Werten