

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
<a name="reference_policies_elements_condition"></a>

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](reference_policies_elements_condition_operators.md) (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](intro-structure.md#intro-structure-request).

```
"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](reference_policies_condition-keys.md) 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 contestuali IAM e AWS STS condition](reference_policies_iam-condition-keys.md).

I *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](reference_policies_elements_condition_operators.md) 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`](reference_policies_elements_condition_operators.md#Conditions_String) 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. Gli esempi includono la chiave di [`aws:RequestTag/{{tag-key}}`](reference_policies_condition-keys.md#condition-keys-requesttag)contesto AWS KMS [https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-encryption-context](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-encryption-context), la e la chiave di [`ResourceTag/{{tag-key}}`](reference_policies_condition-keys.md#condition-keys-resourcetag)contesto supportate da più servizi.
+ Se utilizzi la chiave di contesto `ResourceTag/{{tag-key}}` per un servizio come [Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-policy-structure.html#amazon-ec2-keys), 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.
+ AWS i servizi che supportano questi attributi potrebbero consentire di creare più nomi di chiavi che differiscono solo in base alle maiuscole e alle 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 . È possibile imporlo utilizzando la chiave di [`aws:TagKeys`](reference_policies_condition-keys.md#condition-keys-tagkeys)contesto per l'etichettatura o la [https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-encryption-context-keys](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-encryption-context-keys)per il contesto di AWS KMS crittografia.
+ Per un elenco di tutti gli operatori di condizione e per una descrizione del funzionamento di ciascun operatore, consulta [Operatori di condizione](reference_policies_elements_condition_operators.md)
+ Se non è diversamente specificato, tutte le chiavi di contesto possono avere valori multipli. Per ulteriori informazioni sulla gestione delle chiavi di contesto che dispongono di più valori, consulta [Operatori dell’insieme per le chiavi di contesto multivalore](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys)
+ Per un elenco di tutte le chiavi di contesto disponibili a livello globale, consulta [AWS chiavi di contesto della condizione globale](reference_policies_condition-keys.md).
+ Per le chiavi di contesto delle condizioni definite da ciascun servizio, consulta [Azioni, risorse e chiavi di condizione per i AWS](reference_policies_actions-resources-contextkeys.html) servizi.

## Il contesto della richiesta
<a name="AccessPolicyLanguage_RequestContext"></a>

Quando un [principale](https://docs.aws.amazon.com/glossary/latest/reference/glos-chap.html?icmpid=docs_homepage_addtlrcs#principal) effettua una [richiesta](intro-structure.md#intro-structure-request) a AWS, AWS raccoglie le informazioni sulla 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, puoi creare una policy che utilizzi la chiave [aws: CurrentTime](reference_policies_condition-keys.md#condition-keys-currenttime) context per [consentire a un utente di eseguire azioni solo entro un intervallo di date specifico](reference_policies_examples_aws-dates.md).

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 *vero* o *falso*. 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 utente IAM nell' AWS API AWS CLI or, 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](reference_policies_elements_condition_operators.md#Conditions_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
<a name="AccessPolicyLanguage_ConditionBlock"></a>

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](reference_policies_elements_condition_operators.md) (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](reference_policies_elements_condition_operators.md#Conditions_String) o [operatori ARN](reference_policies_elements_condition_operators.md#Conditions_ARN), puoi utilizzare una [variabile di policy](reference_policies_variables.md) 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](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys). 

Quando la policy viene valutata durante una richiesta, AWS sostituisce la chiave con il valore corrispondente della 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
<a name="Condition-multiple-conditions"></a>

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.](http://docs.aws.amazon.com/it_it/IAM/latest/UserGuide/images/AccessPolicyLanguage_Condition_Block.diagram.png)


Per ulteriori informazioni, consulta [Operatori dell’insieme per le chiavi di contesto multivalore](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys). 