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:
-
Amazon Resource Name (ARN) (disponibile solo per alcuni servizi).
-
... IfExists(verifica se il valore della chiave esiste come parte di un altro controllo)
-
Verifica Null (controlla se il valore della chiave esiste come controllo autonomo)
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 |
---|---|
|
Corrispondenza esatta, con distinzione maiuscole/minuscole |
|
Corrispondenza negativa |
|
Corrispondenza esatta, senza distinzione maiuscole/minuscole |
|
Corrispondenza negativa, senza distinzione maiuscole/minuscole |
|
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. NotaSe una chiave contiene più valori, |
|
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'Condition
elemento 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 |
---|---|
|
Corrispondenza |
|
Corrispondenza negativa |
|
Corrispondenza "Minore di" |
|
Corrispondenza "Minore di o uguale a" |
|
Corrispondenza "Maggiore di" |
|
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
Nota
Per gli operatori di condizione data, non sono ammessi caratteri jolly.
Operatore di condizione | Descrizione |
---|---|
|
Corrispondenza con una data specifica |
|
Corrispondenza negativa |
|
Corrispondenza prima di una determinata data e ora |
|
Corrispondenza a una determinata data e ora |
|
Corrispondenza dopo una determinata data e ora |
|
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 |
---|---|
|
Corrispondenza booleana |
Ad esempio, questa politica basata sull'identità utilizza l'operatore Bool
condition con la aws:SecureTransport
chiave 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
"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 |
---|---|
|
L'indirizzo o l'intervallo IP specificato |
|
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 |
---|---|
|
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 |
|
Corrispondenza negata per. ARN Gli operatori di condizione |
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"}} } }