Elementi delle policy IAM: variabili e tag - AWS Identity and Access Management

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Elementi delle policy IAM: variabili e tag

Usa le variabili di policy AWS Identity and Access Management (IAM) come segnaposto quando non conosci il valore esatto di una risorsa o di una chiave di condizione quando scrivi la policy.

Nota

Se AWS non riesci a risolvere una variabile, l'intera istruzione potrebbe non essere valida. Ad esempio, se utilizzi la variabile aws:TokenIssueTime, questa viene risolta in un valore solo quando il richiedente è stato autenticato tramite le credenziali temporanee (un ruolo IAM). Per evitare che le variabili causino istruzioni non valide, usa il... IfExists operatore di condizione.

Introduzione

Nelle policy IAM, numerose operazioni consentono di assegnare un nome a risorse specifiche per le quali si desidera controllare l'accesso. Ad esempio, la policy di seguito consente all'utente di elencare, leggere e scrivere gli oggetti nel bucket S3 DOC-EXAMPLE-BUCKET per i progetti marketing.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET"], "Condition": {"StringLike": {"s3:prefix": ["marketing/*"]}} }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET/marketing/*"] } ] }

In alcuni casi, potresti non conoscere il nome esatto della risorsa al momento di scrivere la policy. Puoi generalizzare la policy per renderla utilizzabile da molti utenti senza bisogno di effettuare una copia univoca per ciascun utente. Invece di creare una policy separata per ciascun utente, consigliamo di creare una singola policy di gruppo che funzioni per tutti gli utenti che appartengono a tale gruppo.

Utilizzo delle variabili nelle policy

È possibile definire valori dinamici all'interno delle policy utilizzando variabili di policy che impostano i segnaposti in una policy.

Le variabili sono contrassegnate utilizzando un prefisso $seguito da una coppia di parentesi graffe ({ }) che includono il nome della variabile del valore della richiesta.

Quando la policy viene valutata, le variabili di policy vengono sostituite con valori provenienti dalle chiavi di contesto condizionali inoltrate nella richiesta. Le variabili possono essere utilizzate nelle policy basate sull'identità, nelle policy delle risorse, nelle policy di controllo dei servizi, nelle policy di sessione e nelle policy degli endpoint VPC. Anche le policy basate sull'identità utilizzate come limiti delle autorizzazioni supportano le variabili di policy.

Le chiavi di contesto delle condizioni globali possono essere utilizzate come variabili nelle richieste tra AWS i servizi. Anche le chiavi di condizione specifiche del servizio possono essere utilizzate come variabili quando interagiscono con le risorse AWS , ma sono disponibili soltanto quando le richieste vengono effettuate su risorse che le supportano. Per un elenco delle chiavi di contesto disponibili per ogni AWS servizio e risorsa, consulta il Service Authorization Reference. In determinate circostanze, non è possibile inserire un valore nelle chiavi di contesto delle condizioni globali. Per ulteriori informazioni su ciascuna chiave, consulta la pagina AWS Chiavi di contesto delle condizioni globali .

Importante
  • I nomi delle chiavi non fanno distinzione tra maiuscole e minuscole. Ad esempio, aws:CurrentTime è uguale a AWS:currenttime.

  • È possibile utilizzare qualsiasi chiave di condizione a valore singolo come variabile. Non è possibile utilizzare una chiave della condizione multi-valore come variabile.

L'esempio seguente mostra una policy per un utente o un ruolo IAM che sostituisce il nome di una risorsa specifica con una variabile di policy. Puoi riutilizzare questa policy sfruttando i vantaggi della chiave di condizione aws:PrincipalTag. Quando questa policy viene valutata, ${aws:PrincipalTag/team} consente le operazioni solo se il nome del bucket termina con il nome del team dal tag del principale team.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET"], "Condition": {"StringLike": {"s3:prefix": ["${aws:PrincipalTag/team}/*"]}} }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET/${aws:PrincipalTag/team}/*"] } ] }

La variabile viene contrassegnata utilizzando un prefisso $ seguito da una coppia di parentesi graffe ({ }). All'interno dei caratteri ${ } è possibile includere il nome del valore ricavato dalla richiesta da utilizzare nella policy. I valori che possono essere utilizzati sono descritti più avanti in questa pagina.

Per maggiori dettagli su questa chiave di condizione globale, consulta aws:PrincipalTag//tag-key nell'elenco di chiavi di condizioni globali.

Nota

Per usare le variabili di policy, è necessario che l'elemento Version sia incluso in una dichiarazione. Inoltre, la versione deve essere impostata su una versione che supporti le variabili di policy. Le variabili sono state introdotte a partire dalla versione 2012-10-17. Le versioni precedenti del linguaggio di policy non supportano le variabili. Se l'elemento Version non viene incluso e impostato su una data appropriata, alcune variabili, come ad esempio ${aws:username}, saranno trattate come stringhe letterali nella policy.

Un elemento di policy Version è diverso da una versione di policy. L'elemento di policy Version viene utilizzato all'interno di una policy e definisce la versione del linguaggio di policy. Diversamente, viene creata una versione della policy quando si modifica una policy gestita dal cliente in IAM. La policy modificata non viene sovrascritta a quella precedente. IAM crea invece una nuova versione della policy gestita. Per ulteriori informazioni sull'elemento di policy Version, consultare Elementi delle policy JSON IAM: Version. Per ulteriori informazioni sulle versioni di policy, consultare Controllo delle versioni delle policy IAM.

Una policy che consente a un principale di ottenere oggetti dal percorso /David di un bucket S3 è simile alla seguente:

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": ["arn:aws:s3::DOC-EXAMPLE-BUCKET/David/*"] }] }

Se questa policy è collegata all'utente David, tale utente ottiene gli oggetti dal proprio bucket S3, ma potrebbe essere necessario creare una policy separata per ogni utente che include il nome dell'utente. Ciascuna policy dovrà quindi essere collegata ai singoli utenti.

Utilizzando una variabile di policy, è possibile creare policy che possono essere riutilizzate. La seguente policy consente a un utente di ottenere oggetti da un bucket Amazon S3 se il valore tag-chiave per aws:PrincipalTag corrisponde al valore del owner tag-chiave inviato nella richiesta.

{ "Version": "2012-10-17", "Statement": [{ "Sid": "AllowUnlessOwnedBySomeoneElse", "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": ["*"], "Condition": { "StringEquals": { "s3:ExistingObjectTag/owner": "${aws:PrincipalTag/owner}" } } } ] }

Se utilizzi una variabile di policy al posto di un utente di questo tipo, non è necessaria una policy separata per ogni singolo utente. Nell'esempio seguente, la policy è collegata a un ruolo IAM assunto dai Product Manager tramite credenziali di sicurezza temporanee. Quando un utente richiede di aggiungere un oggetto Amazon S3, IAM sostituisce il valore del tag dept della richiesta corrente per la variabile ${aws:PrincipalTag} e valuta la policy.

{ "Version": "2012-10-17", "Statement": [{ "Sid": "AllowOnlyDeptS3Prefix", "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET/${aws:PrincipalTag/dept}/*"], } ] }

Tag come variabili di policy

In alcuni AWS servizi è possibile associare attributi personalizzati alle risorse create da tali servizi. Ad esempio, puoi applicare tag a bucket Amazon S3 o a utenti IAM. Questi tag sono coppie chiave-valore. È possibile definire il nome della chiave di tag e il valore associato al nome della chiave. Ad esempio, puoi creare un tag con una chiave department e un valore Human Resources. Per ulteriori informazioni sul tagging delle entità IAM, consulta Tagging delle risorse IAM. Per informazioni sul tagging delle risorse create da altri servizi AWS , consulta la documentazione di tali servizi. Per ulteriori informazioni sull'utilizzo dell'editor di tag, consulta l'articolo relativo all'utilizzo dell'editor di tag nella Guida per l'utente della AWS Management Console .

Puoi applicare tag alle risorse IAM per semplificare il rilevamento, l'organizzazione e il monitoraggio delle risorse IAM. Puoi inoltre applicare tag alle identità IAM per controllare l'accesso alle risorse o al tagging. Per ulteriori informazioni sull'uso dei tag per controllare l'accesso, consulta Controllo dell'accesso a e per utenti e ruoli IAM mediante i tag.

Casi in cui è possibile utilizzare le variabili di policy

Le variabili di policy possono essere utilizzate nell'elemento Resource e per confrontare stringhe nell'elemento Condition.

Elemento risorsa

È possibile utilizzare una variabile criterio nell'elemento Resource, ma solo nella parte risorsa dell'ARN. Questa parte dell'ARN appare dopo i quinti due punti (:). Non è possibile utilizzare una variabile per sostituire parti dell'ARN prima dei quinti due punti, ad esempio il servizio o l'account. Per ulteriori informazioni sul formato ARN, consulta ARN IAM.

Per sostituire una parte di un ARN con un valore di tag, inserisci il prefisso e il nome della chiave in ${ }. Ad esempio, il seguente elemento Risorsa si riferisce solo a un bucket con lo stesso nome del valore nel tag department dell'utente richiedente.

"Resource": ["arn:aws::s3:::bucket/${aws:PrincipalTag/department}"]

Molte AWS risorse utilizzano ARN che contengono un nome creato dall'utente. La seguente policy IAM garantisce che solo gli utenti voluti con i valori di tag access-project, access-application e  access-environment corrispondenti possono modificare le relative risorse. Inoltre, utilizzando le corrispondenze con carattere jolly *, sono in grado di consentire suffissi personalizzati per i nomi delle risorse.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccessBasedOnArnMatching", "Effect": "Allow", "Action": [ "sns:CreateTopic", "sns:DeleteTopic"], "Resource": ["arn:aws:sns:*:*:${aws:PrincipalTag/access-project}-${aws:PrincipalTag/access-application}-${aws:PrincipalTag/access-environment}-*" ] } ] }

Elemento condizione

È possibile utilizzare una variabile di criterio per i valori Condition in qualsiasi condizione che coinvolga gli operatori stringa o gli operatori ARN. Gli operatori stringa includono StringEquals, StringLike e StringNotLike. Gli operatori ARN includono ArnEquals e ArnLike. Non è possibile utilizzare una variabile di criterio con altri operatori, ad esempio Numeric, Date, Boolean, Binary, IP Address o Null. Per ulteriori informazioni sugli operatori delle condizioni, vedere Elementi della policy JSON IAM: operatori di condizione.

Quando fai riferimento a un tag in un'espressione dell'elemento Condition, utilizza il prefisso e il nome della chiave pertinenti come chiave di condizione. Quindi utilizza il valore che desideri testare nel valore della condizione.

Ad esempio, la seguente policy di esempio consente l'accesso completo agli utenti; ma solo se il tag costCenter è collegato all'utente. Il tag deve inotlre avere un valore pari a 12345 o 67890. Se il tag non ha nessun valore o ha qualsiasi altro valore, la richiesta ha esito negativo.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:*user*" ], "Resource": "*", "Condition": { "StringLike": { "iam:ResourceTag/costCenter": [ "12345", "67890" ] } } } ] }

Variabili di policy senza valore

Quando le variabili di policy fanno riferimento a una chiave di contesto delle condizioni che non ha valore o non è presente nel contesto di autorizzazione per una richiesta, il valore è effettivamente nullo. Non esiste un valore uguale o simile. Le chiavi di contesto delle condizioni potrebbero non essere presenti nel contesto di autorizzazione quando:

  • Si utilizzano le chiavi di contesto delle condizioni specifiche del servizio nelle richieste inviate a risorse che non supportano tale chiave di condizione.

  • I tag sulle sessioni, sulle risorse, sulle richieste o sui principali IAM non sono presenti.

  • Altre circostanze, come specificate per ogni chiave di contesto delle condizioni globali alla pagina AWS chiavi di contesto della condizione globale.

Quando si utilizza una variabile senza valore nell'elemento della condizione di una policy IAM, gli Elementi della policy JSON IAM: operatori di condizione come StringEquals o StringLike non corrispondono e l'istruzione della policy non ha effetto.

Gli operatori di condizione invertiti come StringNotEquals o StringNotLike corrispondono a un valore nullo, poiché il valore della chiave di condizione che stanno verificando non corrisponde o non è uguale al valore effettivamente nullo.

Nel seguente esempio, per consentire l'accesso aws:principaltag/Team deve essere uguale a s3:ExistingObjectTag/Team. L'accesso è esplicitamente negato quando aws:principaltag/Team non è impostato. Se una variabile che non ha valore nel contesto di autorizzazione viene utilizzata come parte dell'elemento Resource o NotResource di una policy, la risorsa che include una variabile di policy senza valore non corrisponderà ad alcuna risorsa.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::/example-bucket/*", "Condition": { "StringNotEquals": { "s3:ExistingObjectTag/Team": "${aws:PrincipalTag/Team}" } } } ] }

Richiesta di informazioni utilizzabili per le variabili di policy

È possibile utilizzare l'elemento Condition di una policy JSON per confrontare le chiavi nel contesto della richiesta con i valori chiave specificati nella policy. Quando si utilizza una variabile di policy, AWS sostituisce un valore della chiave di contesto della richiesta al posto della variabile nella policy.

Valori della chiave dell'entità principale

I valori per aws:username, aws:userid e aws:PrincipalType dipendono dal tipo di principale che ha avviato la richiesta. Ad esempio, la richiesta può essere effettuata utilizzando le credenziali di un utente IAM, di un ruolo IAM o dell' Utente root dell'account AWS. La seguente tabella mostra i valori di tali chiavi per i diversi tipi di principale.

Principale aws:username aws:userid aws:PrincipalType
Utente root dell'account AWS (non presente) Account AWS ID Account
Utente IAM nome-utente-IAM ID univoco User
Utente federato (non presente) conto: caller-specified-name FederatedUser
Utente federato Web (Login with Amazon, Amazon Cognito, Facebook, Google)

Per informazioni sulle chiavi di policy disponibili quando utilizzi la federazione delle identità Web, consultare Identifica gli utenti con la federazione OIDC.

(non presente)

identificativo del ruolo: caller-specified-role-name

dove role-id è l'id univoco del ruolo ed caller-specified-role-name è specificato dal RoleSessionName parametro passato alla AssumeRoleWithWebIdentity richiesta.

AssumedRole
Utente federato SAML

Per informazioni sulle chiavi di policy disponibili quando si usa la federazione SAML, consultare Identificazione univoca degli utenti nella federazione basata su SAML.

(non presente)

ID del ruolo: caller-specified-role-name

dove role-id è l'id univoco del ruolo e caller-specified-role-name viene specificato dall'elemento Attribute con l'attributo Name impostato su https://aws.amazon.com/SAML/attributes/. RoleSessionName

AssumedRole
Ruolo assunto (non presente)

id del ruolo: caller-specified-role-name

dove role-id è l'id univoco del ruolo ed caller-specified-role-name è specificato dal RoleSessionName parametro passato alla AssumeRole richiesta.

AssumedRole
Ruolo assegnato a un'istanza Amazon EC2 (non presente)

id-ruolo:id-istanza-ec2

dove role-id è l'id univoco del ruolo e l'id-istanza-ec2 è l'identificativo univoco dell'istanza EC2.

AssumedRole
Chiamante anonimo (solo Amazon SQS, Amazon SNS e Amazon S3) (non presente) anonymous Anonymous

Per gli elementi di questa tabella, nota quanto segue:

  • non presente significa che il valore non è riportato nelle informazioni della richiesta corrente e qualsiasi tentativo di trovare una corrispondenza avrà esito negativo e l'istruzione viene considerata non valida.

  • id-ruolo è un identificatore univoco assegnato a ciascun ruolo al momento della creazione. È possibile visualizzare l'ID del ruolo con il AWS CLI comando: aws iam get-role --role-name rolename

  • caller-specified-namee caller-specified-role-namesono nomi che vengono passati dal processo chiamante (ad esempio un'applicazione o un servizio) quando effettua una chiamata per ottenere credenziali temporanee.

  • ec2-instance-id è un valore assegnato all'istanza all'avvio e viene visualizzato nella pagina Istanzedella console Amazon EC2. È inoltre possibile visualizzare l'ID dell'istanza eseguendo il AWS CLI comando: aws ec2 describe-instances

Informazioni disponibili nelle richieste per gli utenti federati

Gli utenti federati vengono autenticati utilizzando un sistema diverso da IAM. Ad esempio, un'azienda potrebbe disporre di un'applicazione da utilizzare internamente che effettua chiamate verso AWS. Fornire un'identità IAM a ogni utente dell'azienda che utilizza l'applicazione potrebbe risultare poco pratico. Al contrario, l'azienda può utilizzare un'applicazione proxy (livello intermedio) con una singola identità IAM, oppure un provider di identità (IdP) SAML. L'applicazione proxy o l'IdP SAML autentica i singoli utenti individuali tramite la rete aziendale. Un'applicazione proxy può quindi utilizzare la propria identità di IAM per ottenere credenziali di sicurezza provvisorie per i singoli utenti. Un IdP SAML può in effetti scambiare informazioni sull'identità AWS per credenziali di sicurezza temporanee. Le credenziali temporanee possono quindi essere utilizzate per accedere alle risorse. AWS

Allo stesso modo, potresti creare un'applicazione per dispositivi mobili che richiede l'accesso alle risorse AWS . In tal caso, puoi utilizzare la federazione OIDC, in cui l'app autentica l'utente utilizzando un provider di identità noto come Login with Amazon, Amazon Cognito, Facebook o Google. A questo punto, l'applicazione potrà utilizzare le informazioni di autenticazione dell'utente fornite da tali provider per ottenere le credenziali di sicurezza temporanee per l'accesso alle risorse AWS .

Il modo consigliato per utilizzare la federazione OIDC consiste nello sfruttare Amazon Cognito e AWS gli SDK per dispositivi mobili. Per ulteriori informazioni, consulta gli argomenti seguenti:

Caratteri speciali

Alcune variabili di policy speciali e predefinite hanno valori fissi che consentono di rappresentare caratteri che altrimenti avrebbero un significato diverso. Se tali caratteri speciali fanno parte della stringa per cui stai cercando una corrispondenza e vengono inseriti letteralmente, il loro significato sarebbe frainteso. Ad esempio, se nella stringa inserisci un asterisco (*), questo non sarà interpretato come un semplice asterisco, ma come un carattere jolly corrispondente a tutti i caratteri. In tali casi, puoi utilizzare le seguenti variabili di policy predefinite:

  • ${*} - da usare quando devi inserire un asterisco (*).

  • ${?} - da usare quando devi inserire un punto interrogativo (?).

  • ${$} - da usare quando devi inserire il simbolo del dollaro ($).

Queste variabili di policy predefinite possono essere inserite in qualsiasi stringa in cui è possibile utilizzare le normali variabili di policy.

Specifica dei valori di default

Per aggiungere un valore di default a una variabile, racchiudi il valore di default tra virgolette singole (' ') e separa il testo della variabile e il valore di default con una virgola e uno spazio (, ).

Ad esempio, se a un principale è applicato un tagteam=yellow, è possibile accedere al bucket Amazon S3 ExampleCorp's denominato DOC-EXAMPLE-BUCKET-yellow. Una policy con questa risorsa consente ai membri del team di accedere al bucket del team, ma non a quelli di altri team. Per gli utenti senza tag team, la policy imposta un valore di default di company-wide per il nome del bucket. Questi utenti possono accedere solo al bucket DOC-EXAMPLE-BUCKET-company-wide dove possono visualizzare informazioni generali, come le istruzioni per entrare a far parte di un team.

"Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET-${aws:PrincipalTag/team, 'company-wide'}"

Ulteriori informazioni

Per ulteriori informazioni sulle policy, consultare: