Elementi delle policy JSON IAM: Condition - 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 JSON IAM: Condition

L'elemento Condition (o blocco Condition) consente di specificare le condizioni di attivazione di una policy. L'elemento Conditionè facoltativo. Nell'elemento Condition è possibile creare espressioni in cui utilizzare operatori condizionali (uguale a, meno di, e altri) per confrontare le chiavi di contesto e i valori della policy rispetto alle chiavi e ai valori del contesto della richiesta. Per ulteriori informazioni sul contesto della richiesta, consultare Componenti di una richiesta.

"Condition" : { "{condition-operator}" : { "{condition-key}" : "{condition-value}" }}

La chiave di contesto specificata in una condizione della policy può essere una chiave di contesto della condizione globale o una chiave di condizione specifica del servizio. Le chiavi di contesto della condizione globale presentano il prefisso aws:. Le chiavi di contesto specifiche del servizio presentano il prefisso del servizio. Ad esempio, Amazon EC2 consente di scrivere una condizione utilizzando la chiave di contesto ec2:InstanceType, univoca per quel servizio. Per visualizzare le chiavi di contesto IAM specifiche del servizio con il prefisso iam:, consulta IAMe chiavi di contesto delle AWS STS condizioni.

nomi delle chiavi di contesto non fanno distinzione tra maiuscole e minuscole. Ad esempio, se si include la chiave di contesto aws:SourceIP è identico al test per la chiave AWS:SourceIp. La distinzione tra maiuscole e minuscole dei valori delle chiavi di contesto dipende dall'operatore di condizione utilizzato. Ad esempio, la seguente condizione include l'operatore StringEquals per rendere possibile la corrispondenza solo delle richieste effettuate da johndoe. Agli utenti denominati JohnDoe viene negato l'accesso.

"Condition" : { "StringEquals" : { "aws:username" : "johndoe" }}

Le seguenti condizione utilizza l'operatore StringEqualsIgnoreCase per corrispondere agli utenti denominati johndoe o JohnDoe.

"Condition" : { "StringEqualsIgnoreCase" : { "aws:username" : "johndoe" }}

Alcune chiavi di contesto supportano le coppie chiave-valore che consentono di specificare parte del nome della chiave. Tra gli esempi troviamo la chiave di contesto globale aws:RequestTag/tag-key, la AWS KMS kms:EncryptionContext:encryption_context_key e la chiave di contesto ResourceTag/tag-key supportata da più servizi.

  • Se utilizzi la chiave di contesto ResourceTag/tag-key per un servizio come Amazon EC2, devi specificare un nome di chiave per la tag-key.

  • I nomi delle chiavi non fanno distinzione tra maiuscole e minuscole. Questo significa che se specifichi "aws:ResourceTag/TagKey1": "Value1" nell'elemento condizione della policy, la condizione corrisponderà a una chiave di tag della risorsa denominata TagKey1 o tagkey1, ma non a entrambe.

  • I servizi AWS che supportano questi attributi potrebbero consentire di creare più nomi chiave che differiscono solo per le lettere maiuscole o minuscole. Ad esempio, è possibile applicare un tag a un'istanza Amazon EC2 con ec2=test1 e EC2=test2. Quando utilizzi una condizione come "aws:ResourceTag/EC2": "test1" per consentire l'accesso alla risorsa, il nome della chiave corrisponde a entrambi i tag, ma solo a un valore. Questo può causare errori di condizione imprevisti.

Importante

Come best practice, verifica che i membri del tuo account seguano una convenzione di denominazione coerente quando assegnano nomi agli attributi di coppie chiave- valore. Alcuni esempi includono tag o contesti di crittografia AWS KMS. Puoi applicare questa opzione utilizzando la chiave di contesto aws:TagKeys per l'assegnazione di tag o kms:EncryptionContextKeys per il contesto di crittografia AWS KMS.

Il contesto della richiesta

Quando un'entità effettua una richiesta a AWS, AWS raccoglie le informazioni di richiesta in un contesto di richiesta. Le informazioni vengono utilizzate per valutare e autorizzare la richiesta. È possibile utilizzare l'elemento Condition di una policy JSON per testare chiavi di contesto specifiche rispetto al contesto della richiesta. Ad esempio, è possibile creare una policy che utilizza la chiave di contesto aws:CurrentTime per consentire a un utente di eseguire operazioni solo entro un intervallo specifico di date.

Quando viene inviata una richiesta, AWS valuta ogni chiave di contesto nella policy e restituisce un valore true, false, non presente e, occasionalmente, null (una stringa di dati vuota). Una chiave di contesto che non è presente nella richiesta è considerata una mancata corrispondenza. Ad esempio, la policy seguente ti consente di rimuovere il tuo dispositivo di autenticazione a più fattori (MFA), ma solo se è stato effettuato l'accesso utilizzando MFA nell'ultima ora (3.600 secondi).

{ "Version": "2012-10-17", "Statement": { "Sid": "AllowRemoveMfaOnlyIfRecentMfa", "Effect": "Allow", "Action": [ "iam:DeactivateMFADevice" ], "Resource": "arn:aws:iam::*:user/${aws:username}", "Condition": { "NumericLessThanEquals": {"aws:MultiFactorAuthAge": "3600"} } } }

Il contesto della richiesta può restituire i seguenti valori:

  • True: se il richiedente ha effettuato l'accesso utilizzando MFA nell'ultima ora o meno, la condizione restituisce true.

  • False: se il richiedente ha effettuato l'accesso utilizzando MFA più di un'ora fa, la condizione restituisce false.

  • Non presente: se il richiedente ha effettuato una richiesta utilizzando le proprie chiavi di accesso dell'utente IAM nella AWS CLI o nell'API AWS, la chiave non è presente. In questo caso, la chiave non è presente e non viene restituita la corrispondenza.

  • Null: per le chiavi di contesto definite dall'utente, ad esempio passando tag in una richiesta, è possibile includere una stringa vuota. In questo caso, il valore nel contesto della richiesta è null. Un valore nullo potrebbe restituire true in alcuni casi. Ad esempio, se utilizzi l'operatore di condizione multivalore ForAllValues con la chiave di contesto aws:TagKeys, è possibile ottenere risultati imprevisti se il contesto della richiesta restituisce null. Per ulteriori informazioni, consulta aws:TagKeys e Chiavi di contesto multivalore.

Il blocco condizione

L'esempio seguente mostra il formato di base di un elemento Condition:

"Condition": {"StringLike": {"s3:prefix": ["janedoe/*"]}}

Un valore dalla richiesta è rappresentato da una chiave di contesto, in questo caso s3:prefix. Il valore della chiave di contesto viene confrontato con un valore specificato come valore letterale, ad esempio janedoe/*. Il tipo di confronto da eseguire viene specificato dall'operatore di condizione (in questo caso, StringLike). Puoi creare condizioni che confrontano stringhe, date, numeri e altro ancora, utilizzando tipiche comparazioni booleane come ad esempio "uguale a", "maggiore di" e "minore di". Se utilizzi operatori stringa o operatori ARN, puoi utilizzare una variabile di policy nel valore della chiave di contesto. L'esempio seguente include la variabile aws:username.

"Condition": {"StringLike": {"s3:prefix": ["${aws:username}/*"]}}

In alcuni casi, le chiavi di contesto possono contenere più valori. Ad esempio, una richiesta ad Amazon DynamoDB potrebbe richiedere la restituzione o l'aggiornamento di più attributi di una tabella. Una policy per l'accesso alle tabelle di DynamoDB può includere la chiave dynamodb:Attributes che contiene tutti gli attributi elencati nella richiesta. Puoi testare i vari attributi nella richiesta a fronte di un elenco di attributi consentiti in una policy, utilizzando operatori predefiniti nell'elemento Condition. Per ulteriori informazioni, consulta Chiavi di contesto multivalore.

Quando la policy viene valutata durante una richiesta, AWS sostituisce la chiave con il valore corrispondente dalla richiesta. (In questo esempio, AWS utilizzerebbe la data e l'ora della richiesta). Dopo la valutazione della condizione, viene restituito un risultato True o False, che viene poi utilizzato per decidere se la policy nel suo complesso deve consentire o rifiutare la richiesta.

Valori multipli in una condizione

Un elemento Condition può contenere più operatori di condizioni, ciascuno delle quali può includere a sua volta più coppie chiave-valore. L'immagine seguente illustra questo scenario.

diagrammi a blocchi dell'operatore a due condizioni. Il primo blocco include due segnaposto con chiavi di contesto, ciascuno con più valori. Il secondo blocco di condizione include una chiave di contesto con più valori.

Per ulteriori informazioni, consulta Chiavi di contesto multivalore.