Autorizzazioni per GetFederationToken - AWS Identity and Access Management

Autorizzazioni per GetFederationToken

L'operazione GetFederationToken viene chiamata da un utente IAM e restituisce le credenziali temporanee per tale utente. Questa operazione consolida l'utente. Le autorizzazioni assegnate a una sessione di un utente federato AWS STS sono definite in uno dei due seguenti punti:

  • Le policy di sessione passate come un parametro della chiamata API GetFederationToken. (Questo è più comune).

  • Una policy basata sulle risorse che nomina esplicitamente la sessione dell'utente federato AWS STS nell'elemento Principal della policy. (Questo è meno comune).

Le policy di sessione sono policy avanzate che vengono passate come parametri quando si crea una sessione temporanea a livello di programma. Quando crei una sessione per l'utente federato AWS STS e passi le policy di sessione, le autorizzazioni della sessione risultante sono l'intersezione della policy basata su identità dell'utente e le policy di sessione. Non puoi utilizzare la policy di sessione per concedere autorizzazioni maggiori rispetto a quelle consentite dalla policy basata su identità dell'utente che viene federato.

Nella maggior parte dei casi, se non si passa una policy con la chiamata API GetFederationToken, le credenziali di sicurezza temporanee risultanti non dispongono di autorizzazioni. Tuttavia, una policy basata sulle risorse è in grado di fornire ulteriori autorizzazioni per la sessione. Puoi accedere a una risorsa con una policy basata sulle risorse che specifica la sessione come l'entità principale consentita.

Le seguenti immagini mostrano una rappresentazione visiva di come le policy interagiscono per determinare le autorizzazioni per le credenziali di sicurezza provvisorie restituite da una chiamata a GetFederationToken.

Utente IAMLe seguenti illustrazioni mostrano i segni di spunta per indicare che le autorizzazioni di sessione sono l'intersezione della policy basata sull'identità dell'utente e le policy di sessione. Le autorizzazioni di sessione possono inoltre essere l'intersezione delle policy basate sulle identità e delle policy basate sulle risorse dell'utente.

Esempio: assegnazione delle autorizzazioni tramite GetFederationToken

È possibile utilizzare l'operazione API GetFederationToken con diversi tipi di policy. Di seguito sono illustrati alcuni esempi.

Policy collegata all'utente IAM

In questo esempio, disponi di un'applicazione client basata sul browser che si avvale di due servizi Web di backend. Un servizio di backend è il tuo server di autenticazione che utilizza un sistema di identità per autenticare l'applicazione client. L'altro servizio di backend è un servizio AWS che fornisce alcune delle funzionalità dell'applicazione client. L'applicazione client viene autenticata mediante il tuo server, il quale crea o recupera la policy di autorizzazione appropriata. Il server chiama l'API GetFederationToken per ottenere le credenziali di sicurezza provvisorie e restituisce tali credenziali all'applicazione client. L'applicazione client può quindi effettuare richieste direttamente al servizio AWS con le credenziali di sicurezza provvisorie. Questa architettura permette all'applicazione client di effettuare richieste AWS senza integrare le credenziali AWS a lungo termine.

Il tuo server di autenticazione chiama l'API GetFederationToken con le credenziali di sicurezza a lungo termine di un utente IAM denominato token-app. Tuttavia, le credenziali utente IAM a lungo termine rimangono nel server e non vengono mai distribuite al client. La seguente policy di esempio è collegata all'utente IAM token-app e definisce la più ampia gamma di autorizzazioni di cui gli utenti federati AWS STS (client) avranno bisogno. Si noti che l'autorizzazione sts:GetFederationToken è necessaria affinché il servizio di autenticazione possa ottenere le credenziali di sicurezza provvisorie per gli utenti federati AWS STS.

Esempio di policy collegata all'utente IAM token-app che chiama GetFederationToken
JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:GetFederationToken", "Resource": "*" }, { "Effect": "Allow", "Action": "dynamodb:ListTables", "Resource": "*" }, { "Effect": "Allow", "Action": "sqs:ReceiveMessage", "Resource": "*" }, { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "*" }, { "Effect": "Allow", "Action": "sns:ListSubscriptions", "Resource": "*" } ] }

La policy precedente concede diverse autorizzazioni all'utente IAM. Tuttavia, questa policy da sola non concede alcuna autorizzazione all'utente federato AWS STS. Se questo utente IAM chiama GetFederationToken e non passa una policy come un parametro della chiamata API, l'utente federato AWS STS risultante non disporrà di autorizzazioni valide.

Policy di sessione passata come parametro

Il modo più comune per assicurare che all'utente federato AWS STS vengano assegnate le autorizzazioni appropriate è quello di passare una policy di sessione nella chiamata API GetFederationToken. Sulla base dell'esempio precedente, immagina che GetFederationToken venga chiamato con le credenziali dell'utente IAM token-app. Quindi, immagina che la policy di sessione seguente venga passata come un parametro della chiamata API. L'utente federato AWS STS risultante dispone dell'autorizzazione per elencare i contenuti del bucket Amazon S3 denominato productionapp. L'utente non può eseguire le operazioni GetObject, PutObject e DeleteObject di Amazon S3 su elementi nel bucket productionapp.

All'utente federato vengono assegnate queste autorizzazioni perché le autorizzazioni sono l'intersezione delle policy utente IAM e delle policy di sessione che vengono passate.

L'utente federato AWS STS non potrebbe eseguire operazioni in Amazon SNS, Amazon SQS, Amazon DynamoDB o qualsiasi bucket S3 tranne productionapp. Queste operazioni sono rifiutate anche se tali autorizzazioni sono concesse all'utente IAM associato alla chiamata GetFederationToken.

Esempio di policy di sessione passata come parametro della chiamata API GetFederationToken.
JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::productionapp"] }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Resource": ["arn:aws:s3:::productionapp/*"] } ] }

Policy basate sulle risorse

Alcune risorse AWS supportano le policy basate sulle risorse, queste policy forniscono un altro meccanismo per concedere le autorizzazioni direttamente a un utente federato AWS STS. Solo alcuni servizi AWS supportano le policy basate su risorse. Ad esempio, Amazon S3 ha i bucket, Amazon SNS ha gli argomenti e Amazon SQS ha le code, tutti elementi ai quali è possibile collegare le policy. Per un elenco di tutti i servizi che supportano le policy basate su risorse, consulta AWSServizi che funzionano con IAM e analizza la colonna "Policy basate su risorse" delle tabelle. Puoi usare policy basate sulle risorse per assegnare le autorizzazioni direttamente a un utente federato AWS STS. A questo scopo, specifica il nome della risorsa Amazon (ARN) dell'utente federato AWS STS nell'elemento Principal della policy basata sulle risorse. Ciò viene illustrato nell'esempio seguente espandendo gli esempi precedenti e utilizzando un bucket S3 denominato productionapp.

La policy basata sulle risorse riportata di seguito è collegata al bucket. Questa policy di bucket consente a un utente federato AWS STS di nome Carol di accedere al bucket. Quando la policy di esempio descritta in precedenza è collegata all'utente IAM token-app, l'utente federato AWS STS di nome Carol dispone dell'autorizzazione per eseguire le operazioni s3:GetObject, s3:PutObject e s3:DeleteObject sul bucket denominato productionapp. Questo vale anche quando nessuna policy di sessione viene passata come parametro della chiamata API GetFederationToken. Questo perché, in questo caso, l'utente federato AWS STS di nome Carol ha ottenuto esplicitamente le autorizzazioni dalla seguente policy basata sulle risorse.

Ricorda che a un utente federato AWS STS vengono concesse le autorizzazioni solo quando tali autorizzazioni vengono concesse esplicitamente sia all'utente IAM sia all'utente federato AWS STS. Possono essere concesse (all'interno dell'account) anche da una policy basata sulle risorse che nomini esplicitamente l'utente federato AWS STS nell'elemento Principal della policy, come nell'esempio seguente.

Esempio di policy del bucket che consente l'accesso all'utente federato
JSON
{ "Version":"2012-10-17", "Statement": { "Principal": { "AWS": "arn:aws:sts::111122223333:federated-user/Carol" }, "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::productionapp/*" ] } }

Per ulteriori informazioni su come vengono valutate le policy, consulta la sezione Logica di valutazione delle policy.