

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

# Chiavi di contesto a valore singolo vs multivalore
<a name="reference_policies_condition-single-vs-multi-valued-context-keys"></a>

La differenza tra le chiavi di contesto a valore singolo e multivalore dipende dal numero di valori nel [contesto della richiesta](intro-structure.md#intro-structure-request) e non dal numero di valori nella condizione della policy.
+ Le chiavi del contesto con condizione *a valore singolo* hanno al massimo un valore nel contesto della richiesta. Ad esempio, quando si etichettano le risorse AWS, ogni tag di risorsa viene memorizzato come coppia chiave-valore. Poiché una chiave di tag di risorsa può avere un solo valore di tag, [aws:ResourceTag/*tag-key*](reference_policies_condition-keys.md#condition-keys-resourcetag) è una chiave di contesto a valore singolo. Non utilizzare operatori con una chiave di contesto a valore singolo.
+ Le chiavi di contesto con condizione *multivalore* possono avere più di un valore nel contesto della richiesta. Ad esempio, quando tagghi le risorse AWS, puoi includere più coppie chiave-valore di tag in un'unica richiesta. Pertanto, [aws:TagKeys](reference_policies_condition-keys.md#condition-keys-tagkeys) è una chiave di contesto multivalore. Le chiavi di contesto multivalore richiedono un operatore di condizione.

Ad esempio, una richiesta può provenire al massimo da un endpoint VPC, quindi [aws:SourceVpce](reference_policies_condition-keys.md#condition-keys-sourcevpce) è una chiave di contesto a valore singolo. Poiché un servizio può avere più di un nome del principale di servizio appartenente al servizio, [aws:PrincipalServiceNamesList](reference_policies_condition-keys.md#condition-keys-principalservicenameslist) è una chiave di contesto multivalore.

**Importante**  
La differenza tra le chiavi di contesto della condizione a valore singolo e multivalore dipende dal numero di valori nel contesto della richiesta e non dal numero di valori nella condizione della policy.

## Punti chiave
<a name="reference_policies_condition-key-points"></a>
+ Le classificazione *valore singolo* e *multivalore* sono incluse nella descrizione di ciascuna chiave di contesto della condizione come *tipo di valore* nell'[AWS chiavi di contesto della condizione globale](reference_policies_condition-keys.md)argomento.
+ Le chiavi di contesto multivalore nella [documentazione di riferimento per l’autorizzazione del servizio](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html) utilizzano un prefisso `ArrayOf` seguito dal tipo di categoria dell’operatore di condizione, come `ArrayOfString` o`ArrayOfARN`, che indica che la richiesta può includere più valori per una chiave di contesto della condizione.
+ Puoi utilizzare qualsiasi chiave di contesto a valore singolo disponibile come variabile di policy, ma non è possibile utilizzare una chiave di contesto multivalore come variabile di policy. Per ulteriori informazioni sulle variabili di policy, consultare [Elementi delle policy IAM: variabili e tag](reference_policies_variables.md).
+ Quando si utilizzano chiavi di contesto che includono coppie chiave-valore, è importante notare che anche se possono esserci più valori tag-chiave, ogni `tag-key` può avere un solo valore.
  + [aws:PrincipalTag/*tag-key*](reference_policies_condition-keys.md#condition-keys-principaltag), [aws:RequestTag/*tag-key*](reference_policies_condition-keys.md#condition-keys-requesttag) e [aws:ResourceTag/*tag-key*](reference_policies_condition-keys.md#condition-keys-resourcetag) sono chiavi di contesto a valore singolo.
  + [aws:TagKeys](reference_policies_condition-keys.md#condition-keys-tagkeys) definisce quali tag-chiavi sono consentiti in una richiesta ma non include i valori tag-chiave. Poiché è possibile includere più coppie chiave-valore dei tag in una richiesta, `aws:TagKeys` è una chiave di contesto multivalore.
+ Le chiavi di contesto multivalore richiedono un operatore di condizione. Non utilizzare operatori di condizione `ForAllValues` o `ForAnyValue` chiavi di contesto a valore singolo. L'utilizzo di operatori di set di condizioni con chiavi di contesto a valore singolo può portare a policy eccessivamente permissive.

## Operatori dell’insieme per le chiavi di contesto multivalore
<a name="reference_policies_condition-multi-valued-context-keys"></a>

Per confrontare la chiave di contesto della condizione con una chiave di [contesto di richiesta](intro-structure.md#intro-structure-request) con più valori chiave, devi utilizzare gli operatori di insiemi `ForAllValues` o `ForAnyValue`. Questi operatori di insieme sono usati per paragonare due insiemi di valori, ad esempio il set di tag in una richiesta e il set di tag in una condizione della policy.

I qualificatori `ForAllValues` e `ForAnyValue` aggiungono funzionalità di operazione di insieme all'operatore di condizione, in modo che tu possa testare chiavi di contesto della richiesta multivalore con più chiavi di contesto multiple in una condizione della policy. Inoltre, se includi una chiave di contesto di stringa multivalore nella policy con un carattere jolly o una variabile, devi utilizzare anche l'[operatore di condizione](reference_policies_elements_condition_operators.md#Conditions_String) `StringLike`. I valori multipli delle chiavi di condizione devono essere racchiusi tra parentesi quadre come in un [array](reference_policies_grammar.md#policies-grammar-json), ad esempio `"Key2":["Value2A", "Value2B"]`.

### ForAllValues
<a name="reference_policies_condition-forallvalues"></a>

Il qualificatore `ForAllValues` verifica se il valore di ogni membro del contesto della richiesta è corrispondente all’operatore di condizione che segue il qualificatore. La condizione restituisce `true` se ogni valore della chiave di contesto nella richiesta corrisponde a un valore della chiave di contesto nella policy. Restituisce `true` anche se non ci sono chiavi di contesto nella richiesta.

**Importante**  
Fai attenzione se usi `ForAllValues` con un effetto `Allow` perché ciò può essere eccessivamente permissivo se la presenza di chiavi di contesto mancanti nel contesto della richiesta è imprevista. Dovresti sempre includere l’operatore di condizione [`Null`](reference_policies_elements_condition_operators.md#Conditions_Null) nella tua policy con un valore `false` per verificare se la chiave di contesto esiste e il suo valore non è Null. Per vedere un esempio, consulta [Controllo dell'accesso in base alle chiavi di tag](access_tags.md#access_tags_control-tag-keys).

#### Esempio ForAllValues di operatore set
<a name="reference_policies_condition-forallvalues-example"></a>

Nell'esempio seguente, ForAllValues viene utilizzato con aws: TagKeys per consentire agli utenti di eliminare tag specifici assegnati a un'istanza EC2. Questa policy consente agli utenti di eliminare solo i tag `environment` e `cost-center`. Puoi eliminarli separatamente o insieme. I tag-chiavi nella richiesta devono corrispondere esattamente alle chiavi specificate nella policy.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ec2:DeleteTags",
            "Resource": "arn:aws:ec2:us-east-1:111122223333:instance/*",
            "Condition": {
                "ForAllValues:StringEquals": {
                    "aws:TagKeys": [
                        "environment",
                        "cost-center"
                    ]
                },
                "Null": {
                    "aws:TagKeys": "false"
                }
            }
        }
    ]
}
```

------

La tabella seguente mostra come AWS valuta questa politica in base ai valori della chiave di condizione nella richiesta.


| Condizione della policy | Contesto della richiesta | Risultato | 
| --- | --- | --- | 
|  <pre>"ForAllValues:StringEquals": {<br />  "aws:TagKeys": [<br />    "environment",<br />    "cost-center"<br />  ]<br />},<br />"Null": {<br />  "aws:TagKeys": "false"<br />}</pre>  | <pre>aws:TagKeys:<br />  – environment</pre>  |  **Partita**  | 
|  <pre>"ForAllValues:StringEquals": {<br />  "aws:TagKeys": [<br />    "environment",<br />    "cost-center"<br />  ]<br />},<br />"Null": {<br />  "aws:TagKeys": "false"<br />}</pre>  | <pre>aws:TagKeys:<br />  – cost-center</pre>  |  **Incontro**  | 
|  <pre>"ForAllValues:StringEquals": {<br />  "aws:TagKeys": [<br />    "environment",<br />    "cost-center"<br />  ]<br />},<br />"Null": {<br />  "aws:TagKeys": "false"<br />}</pre>  | <pre>aws:TagKeys:<br />  – environment<br />  – cost-center</pre>  |  **Incontro**  | 
|  <pre>"ForAllValues:StringEquals": {<br />  "aws:TagKeys": [<br />    "environment",<br />    "cost-center"<br />  ]<br />},<br />"Null": {<br />  "aws:TagKeys": "false"<br />}</pre>  | <pre>aws:TagKeys:<br />  – environment<br />  – dept</pre>  |  **Nessuna corrispondenza**  | 
|  <pre>"ForAllValues:StringEquals": {<br />  "aws:TagKeys": [<br />    "environment",<br />    "cost-center"<br />  ]<br />},<br />"Null": {<br />  "aws:TagKeys": "false"<br />}</pre>  |  `aws:TagKeys` non è presente nel contesto della richiesta.  |  **Nessuna corrispondenza**  | 

Nota che nell’ultimo esempio, il risultato è “No Match” perché il controllo della condizione Null impedisce la corrispondenza quando manca la chiave di contesto. Questa è una best practice per evitare policy eccessivamente permissive.

### ForAnyValue
<a name="reference_policies_condition-foranyvalue"></a>

Il qualificatore `ForAnyValue` verifica se almeno un membro del set di valori di richiesta è corrispondente ad almeno un membro del set di valori delle chiavi di condizione della policy. La condizione restituisce `true` se uno qualsiasi dei valori della chiave di contesto nella richiesta corrisponde a un valore qualsiasi della chiave di contesto nella policy. Se non esiste alcuna chiave di contesto corrispondente o se la chiave non esiste, la condizione restituisce `false`.

**Importante**  
Quando si usa `ForAnyValue` con un effetto `Deny`, se la chiave di contesto non è presente nella richiesta, la policy viene valutata come **Nessuna corrispondenza**. Per un comportamento coerente, aggiungi un controllo esplicito [`Null`](reference_policies_elements_condition_operators.md#Conditions_Null) delle condizioni nella tua policy per verificare se la chiave di contesto esiste. Per informazioni dettagliate, vedi [Operatore di condizione per verificare la presenza di chiavi di condizione](reference_policies_elements_condition_operators.md#Conditions_Null).

#### Esempio ForAnyValue di operatore di set
<a name="reference_policies_condition-foranyvalue-example"></a>

Nell'esempio seguente, ForAnyValue viene utilizzato con aws: TagKeys per consentire agli utenti di eliminare tag specifici assegnati a un'istanza EC2. Questa policy consente agli utenti di eliminare i tag di un’istanza se le chiavi di tag specificate nella richiesta includono `environment` o `cost-center`. La richiesta può includere chiavi di tag aggiuntive oltre a quelle specificate nella policy, ma deve includere almeno una delle chiavi specificate per soddisfare la condizione.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ec2:DeleteTags",
            "Resource": "arn:aws:ec2:us-east-1:111122223333:instance/*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "aws:TagKeys": [
                        "environment",
                        "cost-center"
                    ]
                }
            }
        }
    ]
}
```

------

La tabella seguente mostra come AWS valuta questa politica in base ai valori della chiave di condizione nella richiesta.


| Condizione della policy | Contesto della richiesta | Risultato | 
| --- | --- | --- | 
|  <pre>"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": [<br />    "environment",<br />    "cost-center"<br />  ]<br />}</pre>  | <pre>aws:TagKeys:<br />  – environment</pre>  |  **Partita**  | 
|  <pre>"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": [<br />    "environment",<br />    "cost-center"<br />  ]<br />}</pre>  | <pre>aws:TagKeys:<br />  – cost-center</pre>  |  **Incontro**  | 
|  <pre>"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": [<br />    "environment",<br />    "cost-center"<br />  ]<br />}</pre>  | <pre>aws:TagKeys:<br />  – environment<br />  – cost-center</pre>  |  **Incontro**  | 
|  <pre>"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": [<br />    "environment",<br />    "cost-center"<br />  ]<br />}</pre>  | <pre>aws:TagKeys:<br />  – environment<br />  – dept</pre>  |  **Incontro**  | 
|  <pre>"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": [<br />    "environment",<br />    "cost-center"<br />  ]<br />}</pre>  | <pre>aws:TagKeys:<br />  – dept</pre>  |  **Nessuna corrispondenza**  | 
|  <pre>"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": [<br />    "environment",<br />    "cost-center"<br />  ]<br />}</pre>  |  `aws:TagKeys` non è presente nel contesto della richiesta.  |  **Nessuna corrispondenza**  | 