Salta al contenuto

Come posso creare una policy IAM per concedere esplicitamente le autorizzazioni per creare e gestire istanze EC2 in un VPC specificato con tag?

4 minuti di lettura
0

Desidero creare una policy AWS Identity and Access Management (AWS IAM) che conceda esplicitamente le autorizzazioni alle identità IAM per gestire le istanze Amazon Elastic Compute Cloud (Amazon EC2) in un cloud privato virtuale (VPC).

Breve descrizione

La policy IAM deve limitare le autorizzazioni dell'identità IAM per gestire le istanze nel VPC con tag.

Amazon EC2 fornisce autorizzazioni parziali a livello di risorsa, ma è possibile avviare diverse azioni, risorse e condizioni a livello di servizio. Per controllare l'accesso alle risorse EC2, utilizza i tag delle risorse.

Risoluzione

Crea una policy che conceda le autorizzazioni per avviare le istanze nel VPC ma limiti le autorizzazioni dell'identità IAM per la gestione delle istanze. Per limitare la gestione delle istanze, utilizza la condizione della policy ec2:ResourceTag.

Crea una policy gestita da collegare alle identità IAM che avviano le istanze

Completa i seguenti passaggi:

  1. Apri la console IAM.

  2. Scegli Policy, quindi scegli Crea policy.

  3. Scegli la scheda JSON, quindi inserisci la seguente policy personalizzata:

    {  "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "GrantIAMPassRoleOnlyForEC2",
          "Action": [
            "iam:PassRole"
          ],
          "Effect": "Allow",
          "Resource": [
            "arn:aws:iam::account_number:role/role_name",
            "arn:aws:iam::account_number:role/role_nameE"
          ],
          "Condition": {
            "StringEquals": {
              "iam:PassedToService": "ec2.amazonaws.com"
            }
          }
        },
        {
          "Sid": "ReadOnlyEC2WithNonResource",
          "Action": [
            "ec2:Describe*",
            "iam:ListInstanceProfiles"
          ],
          "Effect": "Allow",
          "Resource": "*"
        },
        {
          "Sid": "ModifyingEC2WithNonResource",
          "Action": [
            "ec2:CreateKeyPair",
            "ec2:CreateSecurityGroup"
          ],
          "Effect": "Allow",
          "Resource": "*"
        },
        {
          "Sid": "RunInstancesWithTagRestrictions",
          "Effect": "Allow",
          "Action": "ec2:RunInstances",
          "Resource": [
            "arn:aws:ec2:region:a:instance/*",
            "arn:aws:ec2:region:account_number:volume/*"
          ],
          "Condition": {
            "StringEquals": {
              "aws:RequestTag/TAG-KEY": "tag_value"
            }
          }
        },
        {
          "Sid": "RemainingRunInstancePermissionsNonResource",
          "Effect": "Allow",
          "Action": "ec2:RunInstances",
          "Resource": [
            "arn:aws:ec2:REGION::image/*",
            "arn:aws:ec2:REGION::snapshot/*",
            "arn:aws:ec2:region:account_number:network-interface/*",
            "arn:aws:ec2:region:account_number:key-pair/*",
            "arn:aws:ec2:region:account_number:security-group/*"
          ]
        },
        {
          "Sid": "EC2RunInstancesVpcSubnet",
          "Effect": "Allow",
          "Action": "ec2:RunInstances",
          "Resource": "arn:aws:ec2:region:account_number:subnet/*",
          "Condition": {
            "StringEquals": {
              "ec2:Vpc": "arn:aws:ec2:region:account_number:vpc/VPC-ID"
            }
          }
        },
        {
          "Sid": "EC2VpcNonResourceSpecificActions",
          "Effect": "Allow",
          "Action": [
            "ec2:DeleteNetworkAcl",
            "ec2:DeleteNetworkAclEntry",
            "ec2:DeleteRoute",
            "ec2:DeleteRouteTable",
            "ec2:AuthorizeSecurityGroupEgress",
            "ec2:AuthorizeSecurityGroupIngress",
            "ec2:RevokeSecurityGroupEgress",
            "ec2:RevokeSecurityGroupIngress",
            "ec2:DeleteSecurityGroup",
            "ec2:CreateNetworkInterfacePermission",
            "ec2:CreateRoute",
            "ec2:UpdateSecurityGroupRuleDescriptionsEgress",
            "ec2:UpdateSecurityGroupRuleDescriptionsIngress"
          ],
          "Resource": "*",
          "Condition": {
            "StringEquals": {
              "ec2:Vpc": "arn:aws:ec2:region:account_number:vpc/VPCID"
            }
          }
        },
        {
          "Sid": "AllowInstanceActionsTagBased",
          "Effect": "Allow",
          "Action": [
            "ec2:RebootInstances",
            "ec2:StopInstances",
            "ec2:TerminateInstances",
            "ec2:StartInstances",
            "ec2:AttachVolume",
            "ec2:DetachVolume",
            "ec2:AssociateIamInstanceProfile",
            "ec2:DisassociateIamInstanceProfile",
            "ec2:GetConsoleScreenshot",
            "ec2:ReplaceIamInstanceProfileAssociation"
          ],
          "Resource": [
            "arn:aws:ec2:region:account_number:instance/*",
            "arn:aws:ec2:region:account_number:volume/*"
          ],
          "Condition": {
            "StringEquals": {
              "ec2:ResourceTag/TAG-KEY": "Tag_key"
            }
          }
        },
        {
          "Sid": "AllowCreateTagsOnlyLaunching",
          "Effect": "Allow",
          "Action": [
            "ec2:CreateTags"
          ],
          "Resource": [
            "arn:aws:ec2:region:account_number:instance/*",
            "arn:aws:ec2:region:account_number:volume/*"
          ],
          "Condition": {
            "StringEquals": {
              "ec2:CreateAction": "RunInstances"
            }
          }
        }
      ]
    }

    Nota: sostituisci i parametri account_number, region,tag_key, tag_value,VPC-ID e role_name con i tuoi valori.

  4. Scegli Verifica policy, quindi inserisci un nome.

  5. Scegli Crea policy.
    Nota: alcuni articoli devono essere sostituiti con risorse specifiche del tuo ambiente. Per ulteriori informazioni, consulta Identificare le risorse AWS con i nomi delle risorse Amazon (ARN).

Collega la policy a un gruppo

Completa i seguenti passaggi:

  1. Apri la console IAM.
  2. Nel pannello di navigazione, scegli Gruppi di utenti, quindi seleziona il nome del gruppo.
    Nota: è consigliabile collegare le policy ai gruppi di utenti e successivamente aggiungere l'utente al gruppo appropriato.
  3. Scegli Aggiungi autorizzazioni, quindi scegli Collega policy.
  4. Inserisci il nome della policy, quindi sceglila.
  5. Scegli Collega policy.

Quando colleghi la policy personalizzata, l'identità IAM può accedere alla Console di gestione AWS. L'identità IAM può quindi aprire la dashboard EC2 e avviare un'istanza EC2. L'identità IAM deve specificare la sottorete, il VPC e il tag per avviare l'istanza EC2.

La condizione ec2:ResourceTags limita le seguenti azioni:

  • Avviare un'istanza.
  • Interrompere un'istanza.
  • Riavviare un'istanza.
  • Terminare un'istanza.
  • Collegare un volume all'istanza.
  • Scollegare un volume dall'istanza.
  • Dissociare il profilo dell'istanza IAM dall'istanza.
  • Associare un profilo dell'istanza.
  • Sostituire l'associazione del profilo dell'istanza IAM per l'istanza.
  • Acquisire uno screenshot dell'istanza sulla console.

La policy limita le seguenti azioni rispetto al VPC:

  • Eliminare gruppi di sicurezza.
  • Creare ed eliminare route.
  • Eliminare tabelle di routing.
  • Eliminare liste di controllo degli accessi alla rete (ACL).
  • Eliminare voci di ACL.
  • Autorizzare o revocare regole di ingresso e uscita dei gruppi di sicurezza.
  • Creare autorizzazioni per l'interfaccia di rete.
  • Aggiornare la descrizione dei gruppi di sicurezza per le regole di ingresso e uscita.

Informazioni correlate

In che modo le chiavi di condizione PrincipalTag, ResourceTag, RequestTag e TagKeys controllano l'accesso nelle policy IAM?

Elementi delle policy IAM: variabili e tag

Nomi descrittivi e percorsi