Chiavi di contesto a valore singolo vs multivalore - AWS Identity and Access Management

Chiavi di contesto a valore singolo vs multivalore

La differenza tra le chiavi di contesto a valore singolo e multivalore dipende dal numero di valori nel contesto della richiesta 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 aggiungi un tag alle risorse in 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 è 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 aggiungi tag alle risorse in AWS puoi includere più coppie chiave-valore di tag in una singola richiesta. Pertanto, aws: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 è 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 è 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

  • Le classificazione valore singolo e multivalore sono incluse nella descrizione di ciascuna chiave di contesto della condizione come tipo di valore nell'AWSChiavi di contesto della condizione globale di argomento.

  • Le chiavi di contesto multivalore nella documentazione di riferimento per l'autorizzazione del servizio utilizzano un prefisso ArrayOf seguito dal tipo di categoria dell'operatore di condizione, come ArrayOfString oArrayOfARN, 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.

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

  • 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

Per confrontare la chiave di contesto della condizione con una chiave di contesto di richiesta 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 StringLike. I valori multipli delle chiavi di condizione devono essere racchiusi tra parentesi quadre come in un array, ad esempio "Key2":["Value2A", "Value2B"].

ForAllValues

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

Esempio di operatore dell'insieme ForAllValues

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 policy in base ai valori della chiave di condizione nella richiesta.

Condizione della policy Contesto della richiesta Risultato
"ForAllValues:StringEquals": { "aws:TagKeys": [ "environment", "cost-center" ] }, "Null": { "aws:TagKeys": "false" }
aws:TagKeys: – environment

Match

"ForAllValues:StringEquals": { "aws:TagKeys": [ "environment", "cost-center" ] }, "Null": { "aws:TagKeys": "false" }
aws:TagKeys: – cost-center

Match

"ForAllValues:StringEquals": { "aws:TagKeys": [ "environment", "cost-center" ] }, "Null": { "aws:TagKeys": "false" }
aws:TagKeys: – environment – cost-center

Match

"ForAllValues:StringEquals": { "aws:TagKeys": [ "environment", "cost-center" ] }, "Null": { "aws:TagKeys": "false" }
aws:TagKeys: – environment – dept

Nessuna corrispondenza

"ForAllValues:StringEquals": { "aws:TagKeys": [ "environment", "cost-center" ] }, "Null": { "aws:TagKeys": "false" }

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

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

Esempio di operatore dell'insieme ForAnyValue

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 policy in base ai valori della chiave di condizione nella richiesta.

Condizione della policy Contesto della richiesta Risultato
"ForAnyValue:StringEquals": { "aws:TagKeys": [ "environment", "cost-center" ] }
aws:TagKeys: – environment

Match

"ForAnyValue:StringEquals": { "aws:TagKeys": [ "environment", "cost-center" ] }
aws:TagKeys: – cost-center

Match

"ForAnyValue:StringEquals": { "aws:TagKeys": [ "environment", "cost-center" ] }
aws:TagKeys: – environment – cost-center

Match

"ForAnyValue:StringEquals": { "aws:TagKeys": [ "environment", "cost-center" ] }
aws:TagKeys: – environment – dept

Match

"ForAnyValue:StringEquals": { "aws:TagKeys": [ "environment", "cost-center" ] }
aws:TagKeys: – dept

Nessuna corrispondenza

"ForAnyValue:StringEquals": { "aws:TagKeys": [ "environment", "cost-center" ] }

aws:TagKeys non è presente nel contesto della richiesta.

Nessuna corrispondenza