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.
Argomenti
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.
-
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 bucketamzn-s3-demo-bucket-photos
. -
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.
-
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/
(in questo casorole-name
iam/security-credentials/Get-pics
) dei metadati. Se l'applicazione ottiene le credenziali dai metadati dell'istanza, può memorizzarle nella cache. -
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 CLI111111111111
. 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 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.
-
Tutorial di ruoli IAM per istanze Amazon EC2
. Il video collegato mostra come utilizzare un ruolo IAM con un'istanza Amazon EC2 per controllare ciò che un'applicazione può fare quando viene eseguita nell'istanza. Il video mostra il modo in cui l'applicazione (scritta nell'AWSSDK) può ottenere credenziali di sicurezza provvisorie tramite il ruolo. -
Procedure guidate sugli SDK. La documentazione relativa agli SDK AWS include spiegazioni passo per passo che mostrano un'applicazione eseguita in un'istanza Amazon EC2 che utilizza le credenziali temporanee per i ruoli per leggere un bucket Amazon S3. Ogni procedura guidata presenta passaggi simili, ma utilizza un linguaggio di programmazione diverso:
-
Configurazione dei ruoli IAM per Amazon EC2 con SDK per Java nella Guida per gli sviluppatori di AWS SDK for Java
-
Avvio di un'istanza Amazon EC2 utilizzando SDK per .NET nella Guida per gli sviluppatori di AWS SDK for .NET
-
Creazione di una istanza Amazon EC2 con SDK for Ruby nella Guida per gli sviluppatori di AWS SDK for Ruby
-
Informazioni correlate
Per ulteriori informazioni sulla creazione di ruoli o di ruoli per le istanze Amazon EC2, consulta la seguente documentazione:
-
Per ulteriori informazioni sull'utilizzo dei ruoli IAM con istanze Amazon EC2, consulta la Guida per l'utente di Amazon EC2.
-
Per creare un ruolo, consulta Creazione di ruoli IAM
-
Per ulteriori informazioni sull'utilizzo delle credenziali di sicurezza provvisorie, vedi Credenziali di sicurezza temporanee in IAM.
-
Se lavori con l'API IAM o la CLI, devi creare e gestire i profili delle istanze IAM. Per ulteriori informazioni sui profili delle istanze, consulta Usare profili dell'istanza.
-
Per ulteriori informazioni sulle credenziali di sicurezza provvisorie per i ruoli dei metadati dell'istanza, consulta Recupero delle credenziali di sicurezza dai metadati delle istanze nella Guida per l'utente di Amazon EC2.