Come posso assumere un ruolo IAM utilizzando AWS CLI?

8 minuti di lettura
0

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

Risoluzione

Per assumere un ruolo IAM utilizzando l'Interfaccia della linea di comando AWS (AWS CLI) e avere accesso in sola lettura alle istanze di Amazon Elastic Compute Cloud (Amazon EC2), procedi come segue:

Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi di AWS CLI, verifica che stai utilizzando una versione recente di AWS CLI.

Importante: l'esecuzione dei comandi nei passaggi seguenti consentirà di visualizzare le credenziali (ad esempio, le password) in chiaro. Dopo aver assunto il ruolo IAM, è consigliabile modificare le password.

Crea un utente IAM con le autorizzazioni per assumere ruoli

1.    Crea un utente IAM con l’utilizzo di AWS CLI utilizzando il seguente comando:

Nota: sostituisci Bob con il tuo nome utente IAM.

aws iam create-user --user-name Bob

2.    Crea la policy IAM che concede le autorizzazioni a Bob utilizzando AWS CLI. Crea il file JSON che definisce la policy IAM utilizzando il tuo editor di testo preferito. Ad esempio, puoi usare vim, un editor di testo comunemente utilizzato in Linux, come indicato di seguito:

Nota: sostituisci esempio con il nome della tua policy, il nome utente, il ruolo, il nome del file JSON, il nome del profilo e le chiavi.

vim example-policy.json

3.    Il contenuto del file policy-esempio.json è simile al seguente:

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

1.    Usa il seguente comando aws iam create-policy:

aws iam create-policy --policy-name example-policy --policy-document file://example-policy.json

Il comando aws iam create-policy genera diverse informazioni, incluso il nome della risorsa Amazon (ARN) della policy IAM, come indicato di seguito:

arn:aws:iam::123456789012:policy/example-policy

Nota: sostituisci 123456789012 con il tuo account personale.

2.    Annota l'ARN della policy IAM ottenuto dall'output e associa la policy a Bob usando il comando attach-user-policy. Quindi, controlla che il collegamento sia in posizione 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

1.    Crea il file JSON che definisce la relazione di attendibilità, come indicato di seguito:

vim example-role-trust-policy.json

2.    Il contenuto del file esempio-role-trust-policy.json è simile al seguente:

{
  "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 relativa policy di autorizzazione. Puoi anche limitare la relazione di attendibilità in modo che il ruolo IAM possa essere assunto solo da utenti IAM specifici. A tal proposito, specifica principali simili ad arn:aws:iam::123456789012:user/nomeutente-esempio. Per ulteriori informazioni, consulta la sezione Elementi delle policy JSON AWS: Utente principale.

Crea il ruolo IAM e allega 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). Poiché il ruolo IAM viene assunto da un utente IAM, è necessario specificare un utente principale che consenta agli utenti IAM di assumere tale ruolo. Ad esempio, un utente principale simile ad arn:aws:iam::123456789012:root consente a tutte le identità IAM dell'account 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. Associa 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à in base al file JSON creato nella sezione precedente. Il comando aws iam attach-role-policy associa la policy gestita da AWS AmazonRDSReadOnlyAccess al ruolo. È possibile associare 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 associate al ruolo IAM ruolo-esempio. Consulta i seguenti esempi di comandi:

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 seguente comando:

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

Il 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

1.    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 richiamati, quindi verifica l'accesso dell'utente IAM

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

aws sts get-caller-identity

Il comando aws sts get-caller-identity genera tre informazioni, incluso l'ARN. L'output mostra un risultato simile ad arn:aws:iam::123456789012:user/Bob per verificare che i comandi AWS CLI siano richiamati come Bob.

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

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 dovrebbe mostrare tutte le istanze EC2 che si trovano nella regione eu-west-1. Il comando aws rds describe-db-instances deve generare un messaggio di errore di accesso negato, perché Bob non ha accesso ad Amazon RDS.

Assumi il ruolo IAM

Effettua una delle seguenti operazioni:

Usa un ruolo IAM creando un profilo nel file ~/.aws/config. Per ulteriori informazioni, consulta la sezione Usa un ruolo IAM nel AWS CLI.

-oppure-

Assumi il ruolo IAM effettuando le seguenti operazioni:

1.    Ottieni l'ARN del ruolo eseguendo 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

Il comando AWS CLI genera 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: è possibile aumentare la durata massima della sessione per le credenziali temporanee per i ruoli IAM utilizzando 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 vengono compilate con il seguente output:

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.    Verifica di aver assunto il ruolo IAM eseguendo il comando seguente:

aws sts get-caller-identity

Il comando AWS CLI dovrebbe restituire l'ARN come arn:aws:sts::123456789012:assumed-role/example-role/AWSCLI-Session invece di arn:aws:iam::123456789012:user/Bob per verificare che abbia assunto il ruolo-esempio.

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

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 dovrebbe generare un messaggio di errore di accesso negato. Il comando aws rds describe-db-instances dovrebbe restituire 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