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 si utilizza la aws:TokenIssueTime variabile, la variabile si risolve in un valore solo quando il richiedente si è autenticato utilizzando credenziali temporanee (un ruolo). IAM Per evitare che le variabili causino istruzioni non valide, usa... IfExists operatore di condizione.

Introduzione

Nelle IAM politiche, molte azioni consentono di fornire un nome per le risorse specifiche a cui 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 politiche basate sull'identità, nelle politiche delle risorse, nelle politiche di controllo dei servizi, nelle politiche di sessione e VPC nelle politiche degli endpoint. 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 i servizi. AWS 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 politica per un IAM ruolo o un utente che sostituisce un nome di risorsa specifico 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. Una versione della politica, invece, viene creata quando si modifica una politica gestita dal cliente inIAM. La policy modificata non viene sovrascritta a quella precedente. IAMCrea invece una nuova versione della politica gestita. Per ulteriori informazioni sull'elemento di policy Version, consultare IAMJSONelementi politici: Version. Per ulteriori informazioni sulle versioni di policy, consultare Funzione Versioni multiple di 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 è associata a un IAM ruolo assunto dai Product Manager che utilizzano credenziali di sicurezza temporanee. Quando un utente richiede di aggiungere un oggetto Amazon S3, IAM sostituisce la ${aws:PrincipalTag} variabile con il valore del dept tag della richiesta corrente 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 ai bucket Amazon S3 o agli 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 sull'etichettatura delle IAM entità, consulta. Tag per AWS Identity and Access Management le risorse 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 etichettare IAM le risorse per semplificare la scoperta, l'organizzazione e il monitoraggio IAM delle risorse. Puoi anche etichettare IAM le identità per controllare l'accesso alle risorse o per etichettare se stessi. 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 di policy nell'Resourceelemento, ma solo nella parte relativa alle risorse di. ARN Questa parte di viene ARN visualizzata dopo i cinque punti (:). Non è possibile utilizzare una variabile per sostituire parti di quelle ARN che precedono i cinque punti, ad esempio il servizio o l'account. Per ulteriori informazioni sul ARN formato, vedereARN IAM.

Per sostituire parte di an ARN con un valore di tag, racchiudi il prefisso e il nome della chiave con. ${ } 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 lo utilizzano ARNs contenente un nome creato dall'utente. La seguente IAM politica garantisce che solo gli utenti previsti con valori dei tag access-project, access-application e access-environment corrispondenti possano modificare le proprie 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 policy per Condition i valori in qualsiasi condizione che coinvolga gli operatori di stringa o gli operatori. ARN Gli operatori stringa includono StringEquals, StringLike e StringNotLike. ARNgli operatori includono ArnEquals eArnLike. 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 IAMJSONelementi politici: Condition Operators.

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.

  • IAMI tag sui principali, sulle sessioni, sulle risorse o sulle richieste 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 condition di una IAM policy, IAMJSONelementi politici: Condition Operators like StringEquals o StringLike not match, e l'informativa sulla 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'Conditionelemento di una JSON politica per confrontare le chiavi nel contesto della richiesta con i valori chiave specificati nella politica. Quando si utilizza una variabile di politica, AWS sostituisce un valore della chiave di contesto della richiesta al posto della variabile nella politica.

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 potrebbe essere effettuata utilizzando le credenziali di un IAM utente, un IAM ruolo o il. 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
IAMutente IAM-user-name ID univoco User
Utente federato (non presente) account:caller-specified-name FederatedUser
OIDCutente federato

Per informazioni sulle chiavi di policy disponibili quando utilizzi la federazione delle identità Web, consultare Chiavi disponibili per la AWS OIDC federazione.

(non presente)

role-id: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
SAMLutente federato

Per informazioni sulle chiavi politiche disponibili quando si utilizza la SAML federazione, vedereIdentificazione univoca degli utenti nella federazione basata SAML.

(non presente)

role-id: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/ RoleSessionName attributes/.

AssumedRole
Ruolo assunto (non presente)

role-id:caller-specified-role-name

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

AssumedRole
Ruolo assegnato a un'EC2istanza Amazon (non presente)

role-id:ec2-instance-id

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

AssumedRole
Chiamante anonimo (solo Amazon SQSSNS, Amazon 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.

  • role-id è 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-name e caller-specified-role-name sono 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 al momento dell'avvio e viene visualizzato nella pagina Istanze della EC2 console Amazon. Puoi anche 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 sono utenti autenticati utilizzando un sistema diverso da. IAM Ad esempio, un'azienda potrebbe disporre di un'applicazione da utilizzare internamente che effettua chiamate verso. AWS Potrebbe non essere pratico fornire un'IAMidentità a ogni utente aziendale che utilizza l'applicazione. L'azienda potrebbe invece utilizzare un'applicazione proxy (di livello intermedio) con un'unica IAM identità oppure un provider di SAML identità (IdP). L'applicazione proxy o SAML IdP autentica i singoli utenti utilizzando la rete aziendale. Un'applicazione proxy può quindi utilizzare la propria IAM identità per ottenere credenziali di sicurezza temporanee per singoli utenti. Un SAML IdP può in effetti scambiare informazioni sull'identità con credenziali di sicurezza AWS 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, potresti utilizzare la OIDCfederazione, 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 OIDC federazione è sfruttare Amazon Cognito e i AWS dispositivi mobili. SDKs 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 amzn-s3-demo-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 amzn-s3-demo-bucket-company-wide dove possono visualizzare informazioni generali, come le istruzioni per entrare a far parte di un team.

"Resource":"arn:aws:s3:::amzn-s3-demo-bucket-${aws:PrincipalTag/team, 'company-wide'}"

Ulteriori informazioni

Per ulteriori informazioni sulle policy, consultare: