Come funziona la logica di valutazione IAM utilizzando una policy di negazione esplicita con più chiavi di condizione?

3 minuti di lettura
0

Desidero creare una policy di negazione esplicita di AWS Identity and Access Management (IAM) che limiti la creazione di istanze Amazon Elastic Compute Cloud (Amazon EC2) e volumi Amazon Elastic Block Store (Amazon EBS). Come posso farlo?

Breve descrizione

Puoi utilizzare i tag delle policy IAM per limitare l'avvio di istanze EC2 e volumi EBS utilizzando Consenti con StringLike o Nega con gli operatori di condizioni StringNotLike. Per istruzioni sull'uso di Consenti con gli operatori di condizioni StringLike, consulta Come posso utilizzare i tag delle policy IAM per limitare la modalità di creazione di un'istanza EC2 o di un volume EBS?

Risoluzione

Utilizza il seguente esempio di policy IAM che utilizza Nega con StringNotLike per limitare la creazione di istanze EC2 e volumi EBS.

**Nota:**È consigliabile utilizzare Nega con StringNotLike per impedire accessi privilegiati accidentali.

Se la tua policy ha più operatori di condizioni o più chiavi collegati a un singolo operatore di condizioni, le condizioni vengono valutate utilizzando la logica AND. Con Nega valir di tag multipli, ogni chiave RequestTag deve essere utilizzata in istruzioni separate per ottenere la stessa logica AND.

**Nota:**L'impostazione di tutti i valori chiave RequestTag in un'unica condizione con una policy Nega potrebbe non funzionare come previsto. Questo perché l'azione è consentita fino al soddisfacimento di tutte le condizioni. Quando tutte le condizioni sono soddisfatte, l'azione viene negata.

Nota i seguenti tag obbligatori:

  • Il tag cost_center deve avere un valore diverso da nullo.
  • L'istanza EC2 ha una chiave di tag denominata Produzione.
  • Il tag identificativo deve essere una combinazione di cinque caratteri qualsiasi.
  • Il valore del tag env deve essere sandbox, dev o prod.
{
    "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"
                }
            }
        }
    ]
}

Nota i seguenti valori di applicazione:

  • Il valore aws:TagKeys impone controlli sulla distinzione tra maiuscole e minuscole di Produzione.
  • Il valore ????? impone che sia possibile utilizzare una combinazione di cinque caratteri qualsiasi (gli spazi iniziali o finali vengono ignorati).
  • Il valore ?* impone la presenza di almeno un carattere nel campo del valore in modo che le istanze EC2 non possano essere avviate con valori di tag vuoti.

Informazioni correlate

Come posso creare una policy IAM per controllare l'accesso alle risorse di Amazon EC2 utilizzando i tag?

Aggiungere tag alle tue risorse Amazon EC2

Controllo dell'accesso alle risorse AWS tramite i tag delle risorse

Logica di valutazione per condizioni con più chiavi o valori