Elementi delle policy JSON IAM: Condition - AWS Identity and Access Management

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 Chiavi del contesto di condizione IAM e AWS STS.

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 john. Agli utenti denominati John viene negato l'accesso.

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

Le seguenti condizione utilizza l'operatore StringEqualsIgnoreCase per corrispondere agli utenti denominati john o John.

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

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. Il contesto della richiesta include informazioni sul principale, sulle risorse, sulle operazioni e su altre proprietà dell'ambiente. La valutazione delle policy confronta le proprietà nella policy con le proprietà inviate nella richiesta per valutare e autorizzare le operazioni che è possibile eseguire in AWS.

È 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.

L'esempio seguente mostra una rappresentazione del contesto della richiesta quando Martha Rivera invia una richiesta per disattivare il suo dispositivo MFA.

Principal: AROA123456789EXAMPLE Action: iam:DeactivateMFADevice Resource: arn:aws:iam::user/martha Context: – aws:UserId=AROA123456789EXAMPLE:martha – aws:PrincipalAccount=1123456789012 – aws:PrincipalOrgId=o-example – aws:PrincipalARN=arn:aws:iam::1123456789012:assumed-role/TestAR – aws:MultiFactorAuthPresent=true – aws:MultiFactorAuthAge=2800 – aws:CurrentTime=... – aws:EpochTime=... – aws:SourceIp=...

Il contesto della richiesta viene confrontato con una policy che consente agli utenti di rimuovere il proprio dispositivo di autenticazione a più fattori (MFA), ma solo se è stato effettuato l'accesso utilizzando l'MFA nell'ultima ora (3600 secondi).

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

In questo esempio, la policy corrisponde al contesto della richiesta: l'operazione è la stessa, la risorsa corrisponde al carattere jolly “*” e il valore per aws:MultiFactorAuthAge è 2800, che è inferiore a 3600, quindi la policy consente questa richiesta di autorizzazione.

AWS valuta ogni chiave di contesto nella policy e restituisce un valore True o False. Una chiave di contesto che non è presente nella richiesta è considerata una mancata corrispondenza.

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.

Nota

In alcuni casi, quando il valore della chiave della condizione non è presente, la condizione può comunque restituire True. Ad esempio, se si aggiunge il qualificatore ForAllValues, la richiesta restituisce True se la chiave di contesto non è inclusa nella richiesta. Per evitare che le chiavi di contesto mancanti o con valori vuoti vengano valutate come True, puoi includere l'Operatore di condizione Null nella tua policy con un valore false per verificare che la chiave di contesto esista e che il suo valore non sia Null.

Il blocco condizione

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

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

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 jane/*. 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 Operatori dell'insieme per le 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 Operatori dell'insieme per le chiavi di contesto multivalore.