Utilizzare un ruolo IAM per concedere autorizzazioni alle applicazioni in esecuzione su istanze Amazon EC2 - AWS Identity and Access Management

Utilizzare un ruolo IAM per concedere autorizzazioni alle applicazioni in esecuzione su istanze Amazon EC2

Le applicazioni eseguite su un'istanza Amazon EC2 devono includere le credenziali AWS nelle richieste di API AWS. Puoi chiedere agli sviluppatori di salvare le credenziali AWS direttamente nell'istanza Amazon EC2, perché possano essere utilizzate dalle applicazioni di tale istanza. Tuttavia, in questo caso, gli sviluppatori dovrebbero gestire le credenziali, accertarsi che vengano passate in modo sicuro a ciascuna istanza e aggiornare ogni istanza Amazon EC2 al momento di aggiornare le credenziali. Si tratta di una notevole quantità di lavoro aggiuntivo.

In alternativa, puoi (e devi) utilizzare un ruolo IAM per gestire credenziali temporanee per le applicazioni eseguite in un'istanza Amazon EC2. Quando utilizzi un ruolo, non occorre distribuire credenziali a lungo termine (come, ad esempio, credenziali di accesso oppure chiavi di accesso) per un'istanza Amazon EC2. Al contrario, il ruolo fornisce autorizzazioni provvisorie che possono essere utilizzate dalle applicazioni durante le chiamate ad altre risorse AWS. Quando avvii un'istanza Amazon EC2, devi specificare un ruolo IAM da associare ad essa. Le applicazioni eseguite nell'istanza possono quindi utilizzare le credenziali provvisorie fornite dal ruolo per firmare le richieste API.

L'utilizzo dei ruoli per concedere autorizzazioni alle applicazioni eseguite nelle istanze Amazon EC2 richiede una configurazione leggermente più elaborata Un'applicazione eseguita in un'istanza Amazon EC2 viene astratta da AWS dal sistema operativo virtualizzato. A causa di questa ulteriore separazione, è necessario un passaggio aggiuntivo per assegnare un ruolo AWS e le relative autorizzazioni a un'istanza Amazon EC2 e renderli disponibili per le applicazioni. Tale passaggio aggiuntivo prevede la creazione di un profilo dell'istanza collegato all'istanza. Il profilo dell'istanza contiene il ruolo e può fornire le credenziali provvisorie del ruolo a un'applicazione eseguita nell'istanza. Le credenziali provvisorie possono essere utilizzate nelle chiamate dell'API dell'applicazione per accedere alle risorse e limitare l'accesso alle sole risorse specificate dal ruolo.

Nota

A un'istanza Amazon EC2 può essere assegnato soltanto un ruolo alla volta e tutte le applicazioni dell'istanza condividono lo stesso ruolo e le stesse autorizzazioni. Quando si utilizza Amazon ECS per gestire le istanze Amazon EC2, alle attività di Amazon ECS è possibile assegnare dei ruoli che possono essere distinti dal ruolo dell'istanza Amazon EC2 su cui è in esecuzione. L'assegnazione di un ruolo a ciascuna attività è conforme al principio dell'accesso con privilegi minimi e consente un controllo più granulare su operazioni e risorse.

Per ulteriori informazioni, consulta la pagina Utilizzo dei ruoli IAM con le attività Amazon ECS nella Guida alle best practice per Amazon Elastic Container Service.

Questo tipo di utilizzo dei ruoli offre diversi vantaggi. Dato che le credenziali dei ruoli sono temporanee e vengono aggiornate automaticamente, non dovrai preoccuparti della gestione né dei rischi di sicurezza a lungo termine. Inoltre, se utilizzi un singolo ruolo per più istanze, quando apporti una modifica a un ruolo, queste si propaga automaticamente a tutte le istanze.

Nota

Anche se in genere un ruolo viene assegnato a un'istanza Amazon EC2 all'avvio, puoi comunque effettuare il collegamento anche a un'istanza Amazon EC2 già in esecuzione. Per informazioni sul collegamento di un ruolo a un'istanza in esecuzione, consulta Ruoli IAM per Amazon EC2.

Funzionamento dei ruoli per le istanze Amazon EC2

Nella figura di seguito, uno sviluppatore esegue un'applicazione su un'istanza Amazon EC2 che richiede l'accesso al bucket S3 denominato amzn-s3-demo-bucket-photos. Un amministratore crea il ruolo di servizio Get-pics e lo collega all'istanza Amazon EC2. Il ruolo include una policy di autorizzazione che consente l'accesso in sola lettura al bucket S3 specificato. Include anche una policy di affidabilità che consente all'istanza Amazon EC2 di assumere il ruolo e recuperare le credenziali provvisorie. Quando l'applicazione viene eseguita sull'istanza, può utilizzare le credenziali provvisorie del ruolo per accedere al bucket delle foto. L'amministratore non ha bisogno di concedere allo sviluppatore l'autorizzazione di accedere al bucket delle foto e lo sviluppatore non si trova mai nella necessità di condividere o gestire credenziali.

Applicazione in un'istanza Amazon EC2 che accede a una risorsa AWS
  1. L'amministratore utilizza IAM per creare il ruolo Get-pics. Nella policy di affidabilità del ruolo l'amministratore specifica che solo le istanze Amazon EC2 possono assumere quel ruolo. Nella policy di autorizzazione del ruolo l'amministratore specifica autorizzazioni di sola lettura per il bucket amzn-s3-demo-bucket-photos.

  2. Uno sviluppatore avvia un'istanza Amazon EC2 e assegna il ruolo Get-pics all'istanza.

    Nota

    Se utilizzi la console IAM, il profilo dell'istanza viene gestito in automatico, con un processo quasi completamente trasparente. Se invece utilizzi AWS CLI o API per creare e gestire il ruolo e l'istanza Amazon EC2, dovrai creare il profilo dell'istanza e assegnare il ruolo con una serie di passaggi separati. Quindi, quando avvii l'istanza dovrai specificare il nome del profilo dell'istanza anziché il nome del ruolo.

  3. Quando l'applicazione è in esecuzione, raccoglie le credenziali di sicurezza provvisorie dai metadati dell'istanza Amazon EC2, come descritto in Recupero delle credenziali di sicurezza dai metadati delle istanze. Si tratta di credenziali di sicurezza provvisorie che rappresentano il ruolo e hanno un periodo di validità limitato.

    Con alcuni AWS SDK, lo sviluppatore può utilizzare un provider per la gestione trasparente delle credenziali di sicurezza provvisorie. (La documentazione per singoli AWS SDK descrive le caratteristiche supportate dall'SDK per la gestione delle credenziali).

    In alternativa, l'applicazione può ottenere le credenziali provvisorie direttamente dai metadati dell'istanza Amazon EC2. Le credenziali e i valori correlati sono disponibili nella categoria iam/security-credentials/role-name (in questo caso iam/security-credentials/Get-pics) dei metadati. Se l'applicazione ottiene le credenziali dai metadati dell'istanza, può memorizzarle nella cache.

  4. Grazie all'utilizzo delle credenziali provvisorie recuperate, l'applicazione può accedere al bucket delle foto. In virtù della policy collegata al ruolo Get-pics (Ottieni foto), l'applicazione dispone di autorizzazioni di sola lettura.

    Le credenziali di sicurezza temporanee disponibili nell'istanza vengono aggiornate automaticamente prima della scadenza, in modo da avere un set valido sempre disponibile. L'applicazione deve solo assicurarsi di ottenere un nuovo set di credenziali dai metadati dell'istanza prima della scadenza di quelle esistenti. È possibile utilizzare l'AWSSDK per gestire le credenziali in modo che l'applicazione non debba includere una logica aggiuntiva per aggiornare le credenziali. Ad esempio, creando istanze di client con provider di credenziali del profilo dell'istanza. Tuttavia, se l'applicazione ottiene le credenziali di sicurezza provvisorie dai metadati dell'istanza e le memorizza nella cache, è necessario fornire un set di credenziali aggiornato ogni ora o almeno 15 minuti prima della scadenza del set corrente. L'ora di scadenza è indicata nelle informazioni restituite nella categoria iam/security-credentials/role-name.

Autorizzazioni richieste per l'utilizzo dei ruoli con Amazon EC2

Per avviare un'istanza con un ruolo, lo sviluppatore deve avere l'autorizzazione per avviare le istanze Amazon EC2 e per passare i ruoli IAM.

I seguenti esempi di policy consentono agli utenti di utilizzare la AWS Management Console per avviare un'istanza con un ruolo. La policy include caratteri jolly (*) per consentire a un utente di passare qualsiasi ruolo ed eseguire tutte le operazioni di Amazon EC2 elencate. L'operazione ListInstanceProfiles consente agli utenti di visualizzare tutti i ruoli disponibili nell'Account AWS.

Esempio di policy che concede a un utente l'autorizzazione di utilizzare la console Amazon EC2 per avviare un'istanza con qualsiasi ruolo
{ "Version": "2012-10-17", "Statement": [ { "Sid": "IamPassRole", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "*", "Condition": { "StringEquals": { "iam:PassedToService": "ec2.amazonaws.com" } } }, { "Sid": "ListEc2AndListInstanceProfiles", "Effect": "Allow", "Action": [ "iam:ListInstanceProfiles", "ec2:Describe*", "ec2:Search*", "ec2:Get*" ], "Resource": "*" } ] }

Limitazione dei ruoli che possono essere passati alle istanze Amazon EC2 (tramite PassRole)

È possibile utilizzare l'autorizzazione PassRole per limitare i ruoli che un utente può passare a un'istanza Amazon EC2 quando avvia l'istanza. In questo modo si impedisce all'utente di eseguire le applicazioni che dispongono di più autorizzazioni rispetto a quelle concesse all'utente (ovvero di ottenere privilegi elevati). Ad esempio, immaginiamo che l'utente Alice disponga solo delle autorizzazioni per avviare le istanze Amazon EC2 e per operare con i bucket di Amazon S3, ma che passi a un'istanza Amazon EC2 un ruolo con autorizzazioni per operare con IAM e Amazon DynamoDB. In questo caso, Alice potrebbe essere in grado di avviare l'istanza, accedere a essa, ottenere credenziali di sicurezza temporanee e quindi eseguire operazioni IAM o DynamoDB per cui non dispone dell'autorizzazione.

Per limitare i ruoli che un utente può passare a un'istanza Amazon EC2, devi creare una policy che consenta l'operazione PassRole. A quel punto, puoi collegare la policy all'utente (o a un gruppo IAM a cui l'utente appartiene) che avvierà le istanze Amazon EC2. Nell'elemento Resource della policy devi elencare il ruolo o i ruoli che l'utente può passare alle istanze Amazon EC2. Quando l'utente avvia un'istanza e la associa a un ruolo, Amazon EC2 verifica se l'utente è autorizzato a inviare quel ruolo. Ovviamente, devi anche accertarti che il ruolo passato dall'utente non includa un numero di autorizzazioni maggiore di quello consentito all'utente.

Nota

PassRole non è un'operazione API pari a RunInstances o ListInstanceProfiles. Si tratta invece di un'autorizzazione che AWS controlla ogni volta che un utente (o la console) passa l'ARN di un ruolo a un'API come parametro. In questo modo, un amministratore ha la possibilità di controllare quali ruoli possono essere passati dai vari utenti. In questo caso, garantisce che l'utente abbia l'autorizzazione per collegare un ruolo specifico a un'istanza Amazon EC2.

Esempio policy che concede a un utente l'autorizzazione di avviare un'istanza Amazon EC2 con un ruolo specifico

Il seguente esempio di policy consente agli utenti di utilizzare l'API Amazon EC2 per avviare un'istanza con un ruolo. L'elemento Resource specifica l'Amazon Resource Name (ARN) di un ruolo. Specificando l'ARN, la policy concede all'utente l'autorizzazione di passare solo il ruolo Get-pics. Se, all'avvio di un'istanza, l'utente cerca di specificare un ruolo diverso, l'operazione ha esito negativo. L'utente non è autorizzato a eseguire alcuna istanza, indipendentemente dal passaggio di un ruolo.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::account-id:role/Get-pics" } ] }

Consentire a un ruolo del profilo dell'istanza di passare a un ruolo in un altro account

Puoi consentire a un'applicazione in esecuzione su un'istanza Amazon EC2 di eseguire comandi in un altro account. A tale scopo, devi consentire al ruolo dell'istanza Amazon EC2 nel primo account di passare a un ruolo nel secondo account.

Immaginiamo di utilizzare due Account AWS e di voler consentire a un'applicazione in esecuzione su un'istanza Amazon EC2 di eseguire i comandi AWS CLI in entrambi gli account. Supponiamo che l'istanza Amazon EC2 esista nell'account 111111111111. Tale istanza include il ruolo del profilo dell'istanza abcd che consente all'applicazione di eseguire attività Amazon S3 di sola lettura nel bucket amzn-s3-demo-bucket1 all'interno dello stesso account 111111111111. Tuttavia, l'applicazione deve anche poter assumere il ruolo tra account efgh per accedere al bucket amzn-s3-demo-bucket2 di Amazon S3 nell'account 222222222222.

Il diagramma mostra come uno sviluppatore avvia un'istanza Amazon EC2 con il ruolo per accedere alle foto in un bucket Amazon S3.

Il ruolo del profilo dell'istanza Amazon EC2 abcd deve disporre della policy di autorizzazioni seguente per consentire all'applicazione di accedere al bucket amzn-s3-demo-bucket1 di Amazon S3:

Policy di autorizzazioni del ruolo abcd 111111111111 dell'account

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccountLevelS3Actions", "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetAccountPublicAccessBlock", "s3:ListAccessPoints", "s3:ListAllMyBuckets" ], "Resource": "arn:aws:s3:::*" }, { "Sid": "AllowListAndReadS3ActionOnMyBucket", "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket1/*", "arn:aws:s3:::amzn-s3-demo-bucket1" ] }, { "Sid": "AllowIPToAssumeCrossAccountRole", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::222222222222:role/efgh" } ] }

Il ruolo abcd deve considerare il servizio Amazon EC2 come attendibile ad assumere il ruolo. A tale scopo, il ruolo abcd deve disporre della seguente policy di attendibilità:

Policy di attendibilità del ruolo abcd dell'account 111111111111

{ "Version": "2012-10-17", "Statement": [ { "Sid": "abcdTrustPolicy", "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": {"Service": "ec2.amazonaws.com"} } ] }

Supponiamo che il ruolo tra account efgh consenta attività Amazon S3 di sola lettura nel bucket amzn-s3-demo-bucket2 all'interno dello stesso account 222222222222. A tale scopo, il ruolo tra account efgh deve disporre della seguente policy di autorizzazioni:

Policy di autorizzazioni del ruolo efgh 222222222222 dell'account

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccountLevelS3Actions", "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetAccountPublicAccessBlock", "s3:ListAccessPoints", "s3:ListAllMyBuckets" ], "Resource": "arn:aws:s3:::*" }, { "Sid": "AllowListAndReadS3ActionOnMyBucket", "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket2/*", "arn:aws:s3:::amzn-s3-demo-bucket2" ] } ] }

Il ruolo efgh deve consentire al ruolo del profilo dell'istanza abcd di assumerlo. A tale scopo, il ruolo efgh deve disporre della seguente policy di attendibilità:

Policy di attendibilità del ruolo efgh dell'account 222222222222

{ "Version": "2012-10-17", "Statement": [ { "Sid": "efghTrustPolicy", "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": {"AWS": "arn:aws:iam::111111111111:role/abcd"} } ] }

Come si inizia?

Per comprendere come funzionano i ruoli nelle istanze Amazon EC2, crea un ruolo con la console IAM, avvia un'istanza Amazon EC2 che usi tale ruolo e quindi osserva l'istanza in esecuzione. Puoi prendere in esame i metadati dell'istanza per consultare in che modo le credenziali provvisorie del ruolo vengano rese disponibili a un'istanza. Potrai anche consultare il modo in cui un'applicazione eseguita in un'istanza può utilizzare tale ruolo. Per ottenere ulteriori informazioni, usare le risorse indicate di seguito.

Per ulteriori informazioni sulla creazione di ruoli o di ruoli per le istanze Amazon EC2, consulta la seguente documentazione: