Salta al contenuto

Come posso assumere un ruolo IAM utilizzando AWS CLI?

8 minuti di lettura
0

Desidero utilizzare l'Interfaccia della linea di comando AWS (AWS CLI) per assumere un ruolo AWS Identity and Access Management (IAM).

Risoluzione

Nota: se visualizzi dei messaggi di errore quando esegui i comandi dell'interfaccia della linea di comando AWS, consulta la sezione Risolvere gli errori AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Per utilizzare l'interfaccia della linea di comando AWS per assumere un ruolo IAM con accesso in sola lettura alle istanze di Amazon Elastic Compute Cloud (Amazon EC2), completa le azioni descritte sotto.

Importante: le tue credenziali, come le password, saranno visibili in chiaro quando eseguirai i comandi riportati nei passaggi che seguono. È una best practice modificare le password dopo aver assunto il ruolo IAM.

Crea un utente IAM con le autorizzazioni per assumere ruoli

  1. Crea un utente IAM da AWS CLI con il comando seguente:
    Nota: sostituisci Bob con il tuo nome utente IAM
  2. Crea la policy IAM che concede le autorizzazioni all'utente Bob. A tale scopo, utilizza un editor di testo a tua scelta per creare il file JSON che definisce la policy IAM. Puoi usare l'esempio di file JSON seguente, example-policy.json, come modello:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "ec2:Describe*",
            "iam:ListRoles",
            "sts:AssumeRole"
          ],
          "Resource": "*"
        }
      ]
    }

Per ulteriori informazioni sulla creazione delle policy IAM, consulta la sezione Creazione di policy IAM, Esempi di policy basate su identità IAM e Riferimento alla policy JSON IAM.

Crea la policy IAM

Per creare la policy IAM, completa i passaggi seguenti:

  1. Usa il comando aws iam create-policy seguente:
    aws iam create-policy --policy-name example-policy --policy-document file://example-policy.json
    Il comando aws iam create-policy restituisce diverse informazioni, tra cui il nome della risorsa Amazon (ARN) della policy IAM, come indicato di seguito:
    arn:aws:iam::123456789012:policy/example-policy
    Nota: sostituisci 123456789012 con l'ID del tuo account.
  2. Prendi nota dell'ARN della policy IAM ottenuto dall'output e collega la policy a Bob usando il comando attach-user-policy. Quindi, controlla che il collegamento sia attivo utilizzando il comando list-attached-user-policies, come indicato di seguito:
    aws iam attach-user-policy --user-name Bob --policy-arn "arn:aws:iam::123456789012:policy/example-policy"
    aws iam list-attached-user-policies --user-name Bob

Crea il file JSON che stabilisce la relazione di attendibilità del ruolo IAM

Usa un editor di testo per creare un file JSON che definisce la relazione di attendibilità. Puoi usare la policy di attendibilità seguente come esempio:

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Principal": {
      "AWS": "123456789012"
    },
    "Action": "sts:AssumeRole"
  }
}

Questa policy di attendibilità consente agli utenti e ai ruoli dell'account 123456789012 di assumere questo ruolo se consentono l'azione sts:AssumeRole nella policy delle loro autorizzazioni. Puoi anche limitare la relazione di attendibilità in modo che il ruolo IAM possa essere assunto solo da utenti IAM specifici. A tale scopo, specifica i principali usando un comando simile al seguente: ** arn:aws:iam: :123456789012:user/example-username**. Per ulteriori informazioni, consulta la sezione Elementi delle policy JSON AWS: principale.

Crea il ruolo IAM e collega la policy

Crea un ruolo IAM che possa essere assunto da Bob con accesso in sola lettura alle istanze di Amazon Relational Database Service (Amazon RDS). Per consentire a un utente IAM di assumere un ruolo IAM, devi specificare un principale che consenta agli utenti IAM di assumere quel ruolo. Ad esempio, un principale simile ad arn:aws:iam::123456789012:root consente a tutte le identità IAM dell'account 123456789012 di assumere quel ruolo. Per ulteriori informazioni, consulta la sezione Creazione di un ruolo per delegare le autorizzazioni a un utente IAM.

  1. Crea il ruolo IAM con accesso in sola lettura alle istanze database di Amazon RDS. Collega le policy IAM al tuo ruolo IAM in base ai tuoi requisiti di sicurezza.

    Il comando aws iam create-role crea il ruolo IAM e definisce la relazione di attendibilità come specificato nel file JSON creato in precedenza. Il comando aws iam attach-role-policy collega la policy gestita da AWS AmazonRDSReadOnlyAccess al ruolo. È possibile collegare diverse policy (policy gestite e policy personalizzate) in base ai requisiti di sicurezza. Il comando aws iam list-attached-role-policies mostra le policy IAM collegate al ruolo IAM ruolo-esempio. Ad esempio, esegui i comandi seguenti:

    aws iam create-role --role-name example-role --assume-role-policy-document file://example-role-trust-policy.json
    aws iam attach-role-policy --role-name example-role --policy-arn "arn:aws:iam::aws:policy/AmazonRDSReadOnlyAccess"
    aws iam list-attached-role-policies --role-name example-role

    Nota: verifica che Bob abbia accesso in sola lettura alle istanze EC2 e possa assumere il ruolo-esempio.

  2. Crea le chiavi di accesso per Bob con il comando seguente:

    aws iam create-access-key --user-name Bob

    Importante: questo comando AWS CLI genera un ID della chiave di accesso e una chiave di accesso segreta. Assicurati di annotare queste chiavi.

Configura le chiavi di accesso

Per configurare le chiavi di accesso, utilizza il profilo predefinito o un profilo specifico. Per configurare il profilo predefinito, esegui il comando aws configure. Per creare un nuovo profilo specifico, esegui il comando aws configure --profile example_-_profile-name. In questo esempio, il profilo predefinito è configurato come indicato di seguito:

aws configure
AWS Access Key ID [None]: ExampleAccessKeyID1
AWS Secret Access Key [None]: ExampleSecretKey1
Default region name [None]: eu-west-1
Default output format [None]: json

Nota: in Nome della regione predefinita, specifica la tua Regione AWS.

Verifica che i comandi AWS CLI siano invocati, quindi verifica l'accesso dell'utente IAM

Completa i passaggi seguenti:

  1. Esegui il comando aws sts get-caller-identity come indicato di seguito:

    aws sts get-caller-identity

    L'output del comando aws sts get-caller-identity include l'ARN. Per verificare che i comandi AWS CLI siano invocati come Bob, controlla che l'output contenga testo simile al seguente: arn:aws:iam::123456789012:user/Bob.

  2. Esegui i comandi seguenti per verificare che l'utente IAM abbia accesso in sola lettura alle istanze EC2 e nessun accesso alle istanze database di Amazon RDS:

    aws ec2 describe-instances --query "Reservations[*].Instances[*].[VpcId, InstanceId, ImageId, InstanceType]"
    aws rds describe-db-instances --query "DBInstances[*].[DBInstanceIdentifier, DBName, DBInstanceStatus, AvailabilityZone, DBInstanceClass]"

    Il comando aws ec2 describe-instances mostra tutte le istanze EC2 che si trovano nella regione eu-west-1. Il comando aws rds describe-db-instances genera un messaggio di errore di accesso negato, perché Bob non ha accesso ad Amazon RDS.

Assumi il ruolo IAM

Effettua una delle operazioni seguenti:

Nel file ~/.aws/config crea un profilo che utilizza un ruolo IAM. Per ulteriori informazioni, consulta la sezione Use an IAM role in the AWS CLI.

-oppure-

Esegui i comandi seguenti per assumere il ruolo IAM:

  1. Ottieni l'ARN del ruolo con il comando seguente:

    aws iam list-roles --query "Roles[?RoleName == 'example-role'].[RoleName, Arn]"
  2. Il comando elenca i ruoli IAM, ma filtra l'output in base al nome del ruolo. Per assumere il ruolo IAM, esegui il comando seguente:

    aws sts assume-role --role-arn "arn:aws:iam::123456789012:role/example-role" --role-session-name AWSCLI-Session

Questi comandi generano diverse informazioni. All'interno del blocco delle credenziali avrai bisogno di AccessKeyId, SecretAccessKey e SessionToken. In questo esempio vengono utilizzate le variabili di ambiente RoleAccessKeyID, RoleSecretKey e RoleSessionToken. Tieni presente che il timestamp del campo della scadenza è nel fuso orario UTC. Il timestamp indica quando scadono le credenziali temporanee del ruolo IAM. Se le credenziali temporanee sono scadute, è necessario richiamare nuovamente la chiamata API sts:AssumeRole.

Nota: puoi aumentare la durata massima della sessione per le credenziali temporanee per i ruoli IAM con il parametro DurationSeconds.

Crea variabili di ambiente per assumere il ruolo IAM e verifica l'accesso

  1. Crea tre variabili di ambiente per assumere il ruolo IAM. Queste variabili di ambiente contengono l'output seguente:

    export AWS_ACCESS_KEY_ID=RoleAccessKeyID
    export AWS_SECRET_ACCESS_KEY=RoleSecretKey
    export AWS_SESSION_TOKEN=RoleSessionToken

    Nota: per i sistemi Windows, sostituisci export con set in questo comando.

  2. Esegui il comando seguente per verificare di aver assunto il ruolo IAM:

    aws sts get-caller-identity

    Se assumi il ruolo-esempio, questo comando AWS CLI restituirà l'ARN come arn:aws:sts::123456789012:assumed-role/example-role/AWSCLI-Session invece di arn:aws:iam::123456789012:user/Bob.

  3. Esegui i comandi seguenti per verificare di aver creato un ruolo IAM con accesso in sola lettura alle istanze database di Amazon RDS e nessun accesso alle istanze EC2:

    aws ec2 describe-instances --query "Reservations[*].Instances[*].[VpcId, InstanceId, ImageId, InstanceType]"
    aws rds describe-db-instances --query "DBInstances[*].[DBInstanceIdentifier, DBName, DBInstanceStatus, AvailabilityZone, DBInstanceClass]"

    Il comando aws ec2 describe-instances genera un messaggio di errore di accesso negato. Il comando aws rds describe-db-instances restituisce le istanze database di Amazon RDS. In questo modo, verrà verificato che le autorizzazioni assegnate al ruolo IAM funzionino correttamente.

  4. Per tornare all'utente IAM, rimuovi le variabili di ambiente come indicato di seguito:

    unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN
    aws sts get-caller-identity

    Il comando unset rimuove le variabili di ambiente, mentre il comando aws sts get-caller-identity verifica che sia restituito come utente IAM Bob.

    Nota: per i sistemi Windows, imposta le variabili di ambiente su stringhe vuote per cancellarne il contenuto come indicato di seguito:

    SET AWS_ACCESS_KEY_ID=
    SET AWS_SECRET_ACCESS_KEY=
    SET AWS_SESSION_TOKEN=

Informazioni correlate

Termini e concetti dei ruoli

create-role

Creazione di un ruolo per delegare le autorizzazioni a un servizio AWS