IAMJSONelementi politici: Condition Operators - 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à.

IAMJSONelementi politici: Condition Operators

Utilizzare gli operatori di condizione nell'elemento Condition per confrontare chiave e valore nella policy con i valori nel contesto della richiesta. Per ulteriori informazioni sull'elemento Condition, consultare IAMJSONelementi politici: Condition.

L'operatore di condizione che è possibile utilizzare in una policy dipende dalla chiave di condizione scelta. È possibile scegliere una chiave di condizione globale o una chiave di condizione specifica del servizio. Per informazioni su quale operatore di condizione è possibile utilizzare per una chiave di condizione globale, consultare AWS chiavi di contesto della condizione globale. Per sapere quale operatore di condizione è possibile utilizzare per una chiave di condizione specifica del servizio, vedere Azioni, risorse e chiavi di condizione per AWS Servizi e scegli il servizio che desideri visualizzare.

Importante

Se la chiave specificata in una condizione di policy non è presente nel contesto della richiesta, i valori non corrispondono e la condizione è false. Se la condizione di policy richiede che la chiave sia non abbinata, ad esempio StringNotLike o ArnNotLike e la chiave giusta non è presente, la condizione è true. Questa logica si applica a tutti gli operatori di condizione tranne... IfExistse Null check. Questi operatori testano se la chiave è presente (esiste) nel contesto della richiesta.

Gli operatori di condizione possono essere raggruppati nelle seguenti categorie:

Operatori di condizione stringa

Gli operatori di condizioni stringa consentono di creare elementi Condition che limitano l'accesso in base al confronto con una chiave con un valore di stringa.

Operatore di condizione Descrizione

StringEquals

Corrispondenza esatta, con distinzione maiuscole/minuscole

StringNotEquals

Corrispondenza negativa

StringEqualsIgnoreCase

Corrispondenza esatta, senza distinzione maiuscole/minuscole

StringNotEqualsIgnoreCase

Corrispondenza negativa, senza distinzione maiuscole/minuscole

StringLike

Corrispondenza con distinzione maiuscole/minuscole. I valori possono includere una corrispondenza con più caratteri jolly (*) e un singolo carattere jolly (?) in qualsiasi punto della stringa. Per ottenere corrispondenze di stringhe parziali devi specificare caratteri jolly.

Nota

Se una chiave contiene più valori, StringLike può essere qualificato con gli operatori su set: ForAllValues:StringLike e ForAnyValue:StringLike. Per ulteriori informazioni, consulta Chiavi di contesto multivalore.

StringNotLike

Corrispondenza negativa, con distinzione maiuscole/minuscole. I valori possono includere una corrispondenza con più caratteri jolly (*) o un singolo carattere jolly (?) in qualsiasi punto della stringa.

Ad esempio, l'istruzione seguente contiene un elemento Condition che utilizza la chiave aws:PrincipalTag per specificare che il principale che effettua la richiesta deve essere contrassegnato con la categoria di processo iamuser-admin.

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "iam:*AccessKey*", "Resource": "arn:aws:iam::account-id:user/*", "Condition": {"StringEquals": {"aws:PrincipalTag/job-category": "iamuser-admin"}} } }

Se la chiave specificata in una condizione di policy non è presente nel contesto della richiesta, i valori non corrispondono. In questo esempio, la aws:PrincipalTag/job-category chiave è presente nel contesto della richiesta se il principale utilizza un IAM utente con tag allegati. È inclusa anche per un principale che utilizza un IAM ruolo con tag allegati o tag di sessione. Se un utente senza il tag tenta di visualizzare o modificare una chiave di accesso, la condizione restituisce false e la richiesta viene negata implicitamente da questa istruzione.

Puoi utilizzare una variabile di policy con l'operatore di condizione String.

L'esempio seguente utilizza l'operatore StringLike condition per eseguire la corrispondenza di stringhe con una variabile di policy per creare una policy che consenta a un IAM utente di utilizzare la console Amazon S3 per gestire la propria «home directory» in un bucket Amazon S3. La policy consente le operazioni specificate in un bucket S3 a condizione che s3:prefix corrisponda a uno qualsiasi dei modelli specificati.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::*" }, { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket", "Condition": {"StringLike": {"s3:prefix": [ "", "home/", "home/${aws:username}/" ]}} }, { "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/home/${aws:username}", "arn:aws:s3:::amzn-s3-demo-bucket/home/${aws:username}/*" ] } ] }

Per un esempio di policy che mostra come utilizzare l'Conditionelemento per limitare l'accesso alle risorse in base all'ID dell'applicazione e all'ID utente per la OIDC federazione, consulta. Amazon S3: consente agli utenti di Amazon Cognito di accedere a oggetti nel relativo bucket

Corrispondenza dei caratteri jolly

Gli operatori di condizioni di stringa eseguono una corrispondenza senza modello che non impone un formato predefinito. ARNe gli operatori di condizione Date sono un sottoinsieme di operatori di stringa che applicano una struttura sul valore della chiave di condizione. Quando si utilizzano StringNotLike gli operatori StringLike or per le corrispondenze parziali di una data ARN or, la corrispondenza ignora quale parte della struttura è contrassegnata da caratteri speciali.

Ad esempio, le seguenti condizioni cercano una corrispondenza parziale di una ARN utilizzando operatori di condizione diversi.

Quando ArnLike viene utilizzato, le parti partition, service, account-id, resource-type e resource-id parziale di devono corrispondere esattamente a quelle presenti nel contesto della ARN richiesta. ARN La corrispondenza parziale è consentita solo per la regione e il percorso della risorsa.

"Condition": {"ArnLike": {"aws:SourceArn": "arn:aws:cloudtrail:*:111122223333:trail/*"}}

Quando StringLike viene utilizzata al posto di ArnLike, la corrispondenza ignora la ARN struttura e consente la corrispondenza parziale, indipendentemente dalla parte che è stata aggiunta ai caratteri speciali.

"Condition": {"StringLike": {"aws:SourceArn": "arn:aws:cloudtrail:*:111122223333:trail/*"}}
ARN ArnLike StringLike

arn:aws:cloudtrail:us-west-2:111122223333:trail/finance

Match

Match

arn:aws:cloudtrail:us-east-2:111122223333:trail/finance/archive

Match

Match

arn:aws:cloudtrail:us-east-2:444455556666:user/111122223333:trail/finance

Nessuna corrispondenza

Match

Operatori di condizione numerici

Gli operatori di condizione numerici consentono di creare elementi Condition che limitano l'accesso in base al confronto di una chiave con un valore intero o decimale.

Operatore di condizione Descrizione

NumericEquals

Corrispondenza

NumericNotEquals

Corrispondenza negativa

NumericLessThan

Corrispondenza "Minore di"

NumericLessThanEquals

Corrispondenza "Minore di o uguale a"

NumericGreaterThan

Corrispondenza "Maggiore di"

NumericGreaterThanEquals

Corrispondenza "Maggiore di o uguale a"

Ad esempio, la seguente istruzione contiene un elemento Condition che utilizza l'operatore di condizione NumericLessThanEquals con la chiave s3:max-keys per specificare che il richiedente può elencare fino a oggetti in amzn-s3-demo-bucket alla volta.

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket", "Condition": {"NumericLessThanEquals": {"s3:max-keys": "10"}} } }

Se la chiave specificata in una condizione di policy non è presente nel contesto della richiesta, i valori non corrispondono. In questo esempio, la chiave s3:max-keys è sempre presente nella richiesta quando si esegue l'operazione ListBucket. Se questa policy consentiva tutte le operazioni Amazon S3, saranno consentite solo le operazioni che includono la chiave di contesto max-keys con un valore minore o uguale a 10.

Puoi utilizzare una variabile di policy con l'operatore di condizione Numeric.

Operatori di condizione data

Gli operatori di condizione data consentono di creare elementi Condition che limitano l'accesso in base al confronto con una chiave con un valore data/ora. Utilizza questi operatori di condizione con la chiave aws:CurrentTime o la chiave aws:EpochTime. È necessario specificare i valori di data/ora con una delle implementazioni W3C dei formati di data ISO 8601 o in epoch () time. UNIX

Nota

Per gli operatori di condizione data, non sono ammessi caratteri jolly.

Operatore di condizione Descrizione

DateEquals

Corrispondenza con una data specifica

DateNotEquals

Corrispondenza negativa

DateLessThan

Corrispondenza prima di una determinata data e ora

DateLessThanEquals

Corrispondenza a una determinata data e ora

DateGreaterThan

Corrispondenza dopo una determinata data e ora

DateGreaterThanEquals

Corrispondenza a una determinata data e ora o successiva

Ad esempio, l'istruzione seguente contiene un elemento Condition che utilizza l'operatore di condizione DateGreaterThan con la chiave aws:TokenIssueTime. Questa condizione specifica che le credenziali di sicurezza temporanee utilizzate per effettuare la richiesta sono state emesse nel 2020. Questa policy può essere aggiornata ogni giorno a livello di codice per garantire che i membri dell'account utilizzino nuove credenziali.

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "iam:*AccessKey*", "Resource": "arn:aws:iam::account-id:user/*", "Condition": {"DateGreaterThan": {"aws:TokenIssueTime": "2020-01-01T00:00:01Z"}} } }

Se la chiave specificata in una condizione di policy non è presente nel contesto della richiesta, i valori non corrispondono. La chiave aws:TokenIssueTime è presente nel contesto della richiesta solo quando il principale utilizza le credenziali temporanee per effettuare la richiesta. La chiave non è presente in AWS CLI, AWS API, oppure AWS SDKrichieste effettuate utilizzando le chiavi di accesso. In questo esempio, se un IAM utente tenta di visualizzare o modificare una chiave di accesso, la richiesta viene rifiutata.

Puoi utilizzare una variabile di policy con l'operatore di condizione Date.

Operatori di condizione booleani

Le condizioni booleane consentono di creare elementi Condition che limitano l'accesso in base al confronto con una chiave con valore "vero" o "falso".

Operatore di condizione Descrizione

Bool

Corrispondenza booleana

Ad esempio, questa politica basata sull'identità utilizza l'operatore Bool condition con la aws:SecureTransportchiave per negare la replica di oggetti e tag degli oggetti nel bucket di destinazione e nel relativo contenuto se la richiesta non è terminata. SSL

Importante

Questa policy non consente alcuna operazione. Utilizza questa policy in combinazione con altre policy che consentono operazioni specifiche.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "BooleanExample", "Action": "s3:ReplicateObject", "Effect": "Deny", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ], "Condition": { "Bool": { "aws:SecureTransport": "false" } } } ] }

Se la chiave specificata in una condizione di policy non è presente nel contesto della richiesta, i valori non corrispondono. Il contesto della richiesta aws:SecureTransport restituisce vero o faso.

Puoi utilizzare una variabile di policy con l'operatore di condizione Boolean.

Operatori di condizione binari

L'operatore di condizione BinaryEquals consente di creare elementi Condition che testano i valori di chiave in formato binario. Viene effettuato un confronto del valore del byte di chiave specificato per il byte con una rappresentazione codificata in base 64 nella policy.

"Condition" : { "BinaryEquals": { "key" : "QmluYXJ5VmFsdWVJbkJhc2U2NA==" } }

Se la chiave specificata in una condizione di policy non è presente nel contesto della richiesta, i valori non corrispondono.

Puoi utilizzare una variabile di policy con l'operatore di condizione Binary.

Operatori di condizione con indirizzo IP

Gli operatori di condizione degli indirizzi IP consentono di creare Condition elementi che limitano l'accesso in base al confronto di una chiave con un indirizzo IPv4 o o IPv6 un intervallo di indirizzi IP. È possibile utilizzare questi operatori con la chiave aws:SourceIp. Il valore deve essere nel CIDR formato standard (ad esempio, 203.0.113.0/24 o 2001:: 1234:5678: :/64). DB8 Se si specifica un indirizzo IP senza il prefisso di routing associato, utilizza il valore del prefisso predefinito di. IAM /32

Medio AWS service supportIPv6, utilizzando:: per rappresentare un intervallo di 0. Per sapere se un servizio supportaIPv6, consulta la documentazione relativa a quel servizio.

Operatore di condizione Descrizione

IpAddress

L'indirizzo o l'intervallo IP specificato

NotIpAddress

Tutti gli indirizzi IP tranne l'indirizzo o l'intervallo IP specificato

Ad esempio, la seguente istruzione utilizza l'operatore di condizione IpAddress con la chiave aws:SourceIp per specificare che la richiesta deve provenire dall'intervallo IP da 203.0.113.0 a 203.0.113.255.

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "iam:*AccessKey*", "Resource": "arn:aws:iam::account-id:user/*", "Condition": {"IpAddress": {"aws:SourceIp": "203.0.113.0/24"}} } }

La chiave di condizione aws:SourceIp risolve l'indirizzo IP da cui ha origine la richiesta. Se le richieste provengono da un'EC2istanza Amazon, aws:SourceIp restituisce l'indirizzo IP pubblico dell'istanza.

Se la chiave specificata in una condizione di policy non è presente nel contesto della richiesta, i valori non corrispondono. La aws:SourceIp chiave è sempre presente nel contesto della richiesta, tranne quando il richiedente utilizza un VPC endpoint per effettuare la richiesta. In questo caso, la condizione restituisce false e la richiesta è implicitamente rifiutata da questa istruzione.

Puoi utilizzare una variabile di policy con l'operatore di condizione IpAddress.

L'esempio seguente mostra come combinare IPv4 più IPv6 indirizzi per coprire tutti gli indirizzi IP validi dell'organizzazione. Ti consigliamo di aggiornare le politiche della tua organizzazione con gli intervalli di IPv6 indirizzi in aggiunta agli IPv4 intervalli di indirizzi già disponibili per garantire che i criteri continuino a funzionare durante la transizioneIPv6.

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "someservice:*", "Resource": "*", "Condition": { "IpAddress": { "aws:SourceIp": [ "203.0.113.0/24", "2001:DB8:1234:5678::/64" ] } } } }

La chiave aws:SourceIp condizionale funziona solo in una JSON politica se chiami il testato API direttamente come utente. Se si utilizza invece un servizio per chiamare il servizio di destinazione per conto dell'utente, il servizio di destinazione visualizza l'indirizzo IP del servizio chiamante anziché l'indirizzo IP dell'utente originario. Ciò può accadere, ad esempio, se si utilizza AWS CloudFormation per chiamare Amazon EC2 per creare istanze per te. Al momento non è possibile passare l'indirizzo IP di origine tramite un servizio di chiamata al servizio di destinazione per la valutazione in una politica. JSON Per questi tipi di API chiamate di servizio, non utilizzate la chiave di aws:SourceIp condizione.

Operatori di condizioni Amazon Resource Name (ARN)

Gli operatori di condizione di Amazon Resource Name (ARN) consentono di creare Condition elementi che limitano l'accesso in base al confronto di una chiave con unaARN. ARNÈ considerata una stringa.

Operatore di condizione Descrizione

ArnEquals, ArnLike

Corrispondenza tra maiuscole e minuscole di. ARN Ciascuno dei sei componenti delimitati da due punti di ARN è controllato separatamente e ciascuno può includere caratteri jolly per partite a più caratteri (*) o caratteri jolly per partite con un solo carattere (?). Gli operatori di condizione ArnEquals e ArnLike si comportano allo stesso modo.

ArnNotEquals, ArnNotLike

Corrispondenza negata per. ARN Gli operatori di condizione ArnNotEquals e ArnNotLike si comportano allo stesso modo.

Puoi utilizzare una variabile di policy con l'operatore di condizione ARN.

Il seguente esempio di policy basata sulle risorse mostra una policy allegata a una SQS coda Amazon a cui desideri inviare messaggi. SNS SNSAutorizza Amazon a inviare messaggi alla coda (o alle code) di tua scelta, ma solo se il servizio invia i messaggi per conto di un particolare SNS argomento (o argomenti) di Amazon. Specificate la coda nel Resource campo e l'SNSargomento Amazon come valore per la SourceArn chiave.

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": {"AWS": "123456789012"}, "Action": "SQS:SendMessage", "Resource": "arn:aws:sqs:REGION:123456789012:QUEUE-ID", "Condition": {"ArnEquals": {"aws:SourceArn": "arn:aws:sns:REGION:123456789012:TOPIC-ID"}} } }

Se la chiave specificata in una condizione di policy non è presente nel contesto della richiesta, i valori non corrispondono. La chiave aws:SourceArn è presente nel contesto della richiesta solo se una risorsa attiva un servizio per chiamare un altro servizio per conto del proprietario della risorsa. Se un IAM utente tenta di eseguire direttamente questa operazione, la condizione viene restituita false e la richiesta viene implicitamente negata da questa dichiarazione.

... IfExists operatori di condizionamento

È possibile aggiungere IfExists alla fine di qualsiasi nome operatore di condizione ad eccezione della condizione Null, ad esempio StringLikeIfExists. Lo fai per dire «Se la chiave di condizione è presente nel contesto della richiesta, elabora la chiave come specificato nella politica. Se la chiave non è presente, l'elemento della condizione viene valutato come "true". Altri elementi di condizione nell'istruzione possono comunque risultare in una mancata corrispondenza, ma non una chiave mancante se verificata tramite ...IfExists. Se si utilizza un "Effect": "Deny" elemento con un operatore di condizione negata comeStringNotEqualsIfExists, la richiesta viene comunque rifiutata anche se la chiave di condizione non è presente.

Esempio di utilizzo di IfExists

Molte chiavi di condizione descrivono informazioni su un determinato tipo di risorsa e sono presenti solo quando si accede a tale tipo di risorsa. Queste chiavi di condizione non sono presenti in altri tipi di risorse. Questo non causa problemi se l'istruzione della policy si applica a un solo tipo di risorsa. Tuttavia, esistono casi in cui una singola istruzione può essere applicata a più tipi di risorse, ad esempio quando l'istruzione della policy fa riferimento a operazioni di più servizi o quando una determinata operazione all'interno di un servizio accede a diversi tipi di risorse all'interno dello stesso servizio. In questi casi, l'inclusione di una chiave di condizione che si applica solo a una delle risorse nell'istruzione della policy può causare un errore dell'elemento Condition nell'istruzione della policy in modo tale che l'elemento "Effect" dell'istruzione non si applichi.

Ad esempio, considerare il seguente esempio di policy:

{ "Version": "2012-10-17", "Statement": { "Sid": "THISPOLICYDOESNOTWORK", "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "*", "Condition": {"StringLike": {"ec2:InstanceType": [ "t1.*", "t2.*", "m3.*" ]}} } }

Lo scopo della policy precedente è di consentire all'utente di avviare qualsiasi istanza di tipo t1, t2 o m3. Tuttavia, l'avvio di un'istanza richiede l'accesso a molte risorse oltre all'istanza stessa; ad esempio, immagini, coppie di chiavi, gruppi di sicurezza e così via. L'intera istruzione viene valutata rispetto a ogni risorsa necessaria per avviare l'istanza. Queste risorse aggiuntive non includono la chiave di condizione ec2:InstanceType, pertanto il controllo StringLike ha esito negativo e all'utente non è concessa la possibilità di avviare nessun tipo di istanza.

Per risolvere questo problema, utilizzare l'operatore di condizione StringLikeIfExists. In questo modo, il test viene effettuato solo se la chiave di condizione esiste. È possibile leggere la policy seguente come: "Se la risorsa da verificare include una chiave di condizione "ec2:InstanceType", permettere l'operazione solo se il valore della chiave inizia con t1., t2. o m3.. Se la risorsa verificata non include quella chiave di condizione, non preoccuparti". L'asterisco (*) nei valori della chiave della condizione, se utilizzato con l'operatore di condizione StringLikeIfExists, viene interpretato come un jolly per ottenere corrispondenze parziali tra le stringhe. L'istruzione DescribeActions include le azioni necessarie per visualizzare l'istanza nella console.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "RunInstance", "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "*", "Condition": { "StringLikeIfExists": { "ec2:InstanceType": [ "t1.*", "t2.*", "m3.*" ]}} }, { "Sid": "DescribeActions", "Effect": "Allow", "Action": [ "ec2:DescribeImages", "ec2:DescribeInstances", "ec2:DescribeVpcs", "ec2:DescribeKeyPairs", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups" ], "Resource": "*" }] }

Operatore di condizione per verificare la presenza di chiavi di condizione

Utilizza un operatore di condizione Null per verificare se una chiave di condizione è presente o meno al momento dell'autorizzazione. Nell'istruzione della policy, utilizza true (la chiave non esiste, è null) o false (la chiave esiste e il suo valore non è null).

Puoi utilizzare una variabile di policy con l'operatore di condizione Null.

Ad esempio, è possibile utilizzare questo operatore di condizione per determinare se un utente sta utilizzando per l'operazione le proprie credenziali o le credenziali temporanee. Se l'utente utilizza credenziali temporanee, la chiave aws:TokenIssueTime è presente e ha un valore. L'esempio seguente mostra una condizione che stabilisce che l'utente non deve utilizzare credenziali temporanee (la chiave non deve esistere) affinché l'utente possa utilizzare Amazon EC2API.

{ "Version": "2012-10-17", "Statement":{ "Action":"ec2:*", "Effect":"Allow", "Resource":"*", "Condition":{"Null":{"aws:TokenIssueTime":"true"}} } }