Come posso utilizzare i tag dei criteri IAM per limitare le modalità di creazione di un'istanza EC2 o di un volume EBS?

5 minuti di lettura
0

Voglio consentire agli utenti o ai gruppi di AWS Identity and Access Management (IAM) di lanciare nuove istanze Amazon Elastic Compute Cloud (Amazon EC2). Voglio anche consentire agli utenti IAM di creare nuovi volumi Amazon Elastic Block Store (Amazon EBS), ma solo se applicano tag specifici.

Breve descrizione

Specifica i tag per le istanze EC2 e i volumi EBS come parte della chiamata API che crea le risorse. Utilizzando questo principio, puoi richiedere agli utenti IAM di taggare le risorse specifiche applicando condizioni alla propria policy IAM. Le seguenti policy di esempio non consentono agli utenti di creare gruppi di sicurezza o coppie di chiavi, pertanto gli utenti devono selezionare quelli preesistenti.

Il seguente esempio di policy IAM consente agli utenti di:

  • Avviare istanze EC2 con chiavi e valori di tag corrispondenti
  • Avviare istanze EC2 con almeno un tag e un valore corrispondenti
  • Avviare istanze EC2 con almeno una chiave di tag corrispondente
  • Avviare istanze EC2 che dispongono solo dell'elenco di tag specificato

Risoluzione

Avviare istanze EC2 con chiavi e valori di tag corrispondenti

La seguente policy di esempio consente a un utente di avviare un'istanza EC2 e creare un volume EBS solo se applica tutti i tag definiti nella policy utilizzando il qualificatore ForAllValues. Se l'utente applica un tag che non è incluso nella policy, l'azione viene negata. Per applicare la distinzione tra maiuscole e minuscole, utilizza la condizione aws:TagKeys.

Nota: Modifica key1 e value1 nelle policy di esempio per includere i tag e i valori che si applicano alle tue risorse:

{
  "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"
          ]
        }
      }
    }
  ]
}

Importante: Per avviare correttamente le istanze EC2, questa policy deve includere chiavi e valori di tag corrispondenti. Se le coppie chiave e valore non corrispondono, viene visualizzato l'errore "Launch Failed" o un messaggio di errore dell'API simile.

Risultati di esempio

Key/ValueRisultato
key1/value1 e key2/value2consenti
key1/value1nega
key1/value2nega
nessuna chiave e nessun valorenega

Avviare istanze EC2 con almeno un tag e un valore corrispondenti

Nell'esempio seguente, sostituisci il blocco di condizioni AllowRunInstancesWithRestrictions per consentire a un utente di avviare un'istanza EC2 e creare volumi EBS quando almeno una chiave di tag è denominata key1 e il suo valore è value1. È possibile aggiungere un numero qualsiasi di tag aggiuntivi nella richiesta RunInstances:

"Condition": {
  "StringEquals": {
    "aws:RequestTag/key1": "value1"
  },
  "ForAnyValue:StringEquals": {
    "aws:TagKeys": [
      "key1"
    ]
  }
}

Risultati di esempio

Key/ValueRisultato
key1/value1 e key2/value2consenti
key1/value1consenti
key1/value2nega
nessuna chiave e nessun valorenega

Avviare istanze EC2 con almeno una chiave di tag corrispondente

Nel seguente esempio di policy, sostituisci il blocco di condizioni AllowRunInstancesWithRestrictions per consentire a un utente di avviare un'istanza EC2 e creare volumi EBS quando almeno una chiave di tag è denominata key1. Non è richiesto alcun valore specifico per il tag key1 e nella richiesta RunInstances è possibile aggiungere un numero qualsiasi di tag aggiuntivi.

"Condition": {
  "ForAnyValue:StringEquals": {
    "aws:TagKeys": [
      "key1"
    ]
  }
}

Risultati di esempio

Key/ValueRisultato
key1/value1 e key2/value2consenti
key1/value1consenti
key1/value2consenti
nessuna chiave e nessun valorenega

Avviare istanze EC2 che dispongono solo dell'elenco di tag specificato

Nel seguente esempio di policy, sostituisci il blocco di condizioni AllowRunInstancesWithRestrictions per consentire a un utente di avviare un'istanza EC2 e creare volumi EBS solo quando nella richiesta sono fornite le chiavi di tag key1 e key2. Non è richiesto alcun valore specifico per nessuna delle chiavi di tag e non è possibile aggiungere ulteriori tag nella richiesta RunInstances:

"Condition": {
  "StringLike": {
      "aws:RequestTag/key1": "*",
      "aws:RequestTag/key2": "*"
  },
  "ForAllValues:StringEquals": {
    "aws:TagKeys": [
        "key1",
        "key2"
    ]
  }
}

Nota: La condizione StringLike è obbligatoria per assicurarsi che tutti i tag siano presenti.

Risultati di esempio

Key/ValueRisultato
key1/AnyValue e key2/AnyValueConsenti
key1/AnyValueNega
key2/AnyValueNega
Nessuna chiave o valoreNega
key1/AnyValue, key2/AnyValue, key3/AnyValueNega

Informazioni correlate

How do I create an IAM policy to control access to Amazon EC2 resources using tags?

Creazione di una condizione con più chiavi o valori

Esempi di policy basate su identità IAM

Tagging delle risorse Amazon EC2

Operazioni, risorse e chiavi di condizione per Amazon EC2

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa