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à.
Struttura delle dichiarazioni e operatori integrati per l'approvazione automatica e le politiche di negazione dell'accesso
La tabella seguente mostra la struttura delle politiche di approvazione automatica e di rifiuto dell'accesso.
Componente | Sintassi |
---|---|
effetto |
|
scope |
|
clausola condizionale |
|
Componenti della politica
Una politica di approvazione automatica o di rifiuto dell'accesso contiene i seguenti componenti:
-
Effetto:
permit
(consentire) oforbid
(negare) l'accesso. -
Ambito: i principi, le azioni e le risorse a cui si applica l'effetto. È possibile lasciare indefinito l'ambito in Cedar non identificando principi, azioni o risorse specifici. In questo caso, la politica si applica a tutti i possibili principi, azioni e risorse. Per l'accesso al just-in-time nodo,
action
è sempreAWS::SSM::Action::"getTokenForInstanceAccess"
. -
Clausola condizionale: il contesto in cui si applica l'effetto.
Commenti
Puoi includere commenti nelle tue politiche. I commenti sono definiti come una riga che inizia //
e termina con un carattere di nuova riga.
L'esempio seguente mostra i commenti in una politica.
// Allows users in the Engineering group from the Platform org to automatically connect to nodes tagged with Engineering and Production keys.
permit (
principal in AWS::IdentityStore::Group::"d4q81745-r081-7079-d789-14da1EXAMPLE",
action == AWS::SSM::Action::"getTokenForInstanceAccess",
resource
)
when {
principal has organization && resource.hasTag("Engineering") && resource.hasTag("Production") && principal.organization == "Platform"
};
Clausole multiple
È possibile utilizzare più di una clausola condizionale in una dichiarazione di politica utilizzando l'operatore. &&
// Allow access if node has tag where the tag key is Environment
// & tag value is Development
permit(principal, action == AWS::SSM::getTokenForInstanceAccess, resource)
when {
resource.hasTag("Environment") &&
resource.getTag("Environment") == "Development"
};
Personaggi riservati
L'esempio seguente mostra come scrivere una politica se una proprietà di contesto utilizza un :
(punto e virgola), che è un carattere riservato nel linguaggio delle politiche.
permit (
principal,
action == AWS::SSM::Action::"getTokenForInstanceAccess",
resource
)
when {
principal has employeeNumber && principal.employeeNumber like "E-1*" && resource.hasTag("Purpose") && resource.getTag("Purpose") == "Testing"
}
Per ulteriori esempi, consulta Esempi di dichiarazioni politiche.
Just-in-time schema di accesso al nodo
Di seguito è riportato lo schema Cedar per l'accesso ai just-in-time nodi.
namespace AWS::EC2 { entity Instance tags String; } namespace AWS::IdentityStore { entity Group; entity User in [Group] { employeeNumber?: String, costCenter?: String, organization?: String, division?: String, }; } namespace AWS::IAM { entity Role; type AuthorizationContext = { principalTags: PrincipalTags, }; entity PrincipalTags tags String; } namespace AWS::SSM { entity ManagedInstance tags String; action "getTokenForInstanceAccess" appliesTo { principal: [AWS::IdentityStore::User], resource: [AWS::EC2::Instance, AWS::SSM::ManagedInstance], context: { "iam": AWS::IAM::AuthorizationContext } }; }
Operatori integrati
Quando si crea il contesto di una politica di approvazione automatica o di rifiuto dell'accesso utilizzando varie condizioni, è possibile utilizzare l'&&
operatore per aggiungere condizioni aggiuntive. Esistono anche molti altri operatori integrati che puoi utilizzare per aggiungere ulteriore forza espressiva alle condizioni della tua polizza. La tabella seguente contiene tutti gli operatori incorporati come riferimento.
Operatore | Tipi e sovraccarichi | Descrizione |
---|---|---|
! |
Booleano → Booleano |
Logico no. |
== |
qualsiasi → qualsiasi |
Uguaglianza. Funziona su argomenti di qualsiasi tipo, anche se i tipi non corrispondono. I valori di tipi diversi non sono mai uguali tra loro. |
!= | qualsiasi → qualsiasi |
Disuguaglianza; l'esatto inverso dell'uguaglianza (vedi sopra). |
< |
(long, long) → Booleano |
Intero lungo minore di. |
<= |
(lungo, lungo) → Booleano |
Numero intero less-than-or-equal lungo -to. |
> |
(lungo, lungo) → Booleano |
Intero lungo maggiore di. |
>= |
(lungo, lungo) → Booleano |
Numero intero greater-than-or-equal lungo -to. |
in | (entità, entità) → Booleano | Appartenenza alla gerarchia (riflessiva: A in A è sempre vera). |
(entity, set (entity)) → Booleano | Appartenenza alla gerarchia: A in [B, C,...] è vera se (A e B) || (A in C) ||... errore se l'insieme contiene una non-entità. | |
&& | (Booleano, Booleano) → Booleano |
Logico e (cortocircuito). |
|| | (Booleano, Booleano) → Booleano |
Logico o (cortocircuito). |
.esiste () | entità → Booleano | esistenza di un'entità. |
ha | (entità, attributo) → Booleano | Operatore Infix. e has f verifica se il record o l'entità e ha un'associazione per l'attributof . e Restituisce false se non esiste o se e esiste ma non ha l'attributof . Gli attributi possono essere espressi come identificatori o stringhe letterali. |
like | (stringa, stringa) → Booleano | Operatore Infix. t like p controlla se il testo t corrisponde allo schemap , che può includere caratteri jolly * che corrispondono a 0 o più caratteri di qualsiasi carattere. Per far corrispondere un personaggio stellare letterale at , puoi usare la speciale sequenza di caratteri con escape in. \* p |
.hasTag () | (entità, stringa) → Booleano | Controlla se all'entità è applicato il tag specificato. |
.getTag () | (entità, stringa) → Booleano | Restituisce il valore della chiave del tag specificata. |
.contiene () | (set, qualsiasi) → Booleano | Appartenenza al set (se B è un elemento di A). |
. contiene tutto () | (set, set) → Booleano | Verifica se il set A contiene tutti gli elementi del set B. |
. contiene Any () | (set, set) → Booleano | Verifica se il set A contiene uno qualsiasi degli elementi del set B. |
Esempi di dichiarazioni politiche
Di seguito sono riportati alcuni esempi di dichiarazioni politiche.
// Users assuming IAM roles with a principal tag of "Elevated" can automatically access nodes tagged with the "Environment" key when the value equals "prod"
permit(principal, action == AWS::SSM::getTokenForInstanceAccess, resource)
when {
// Verify IAM role principal tag
context.iam.principalTags.getTag("AccessLevel") == "Elevated" &&
// Verify the node has a tag with "Environment" tag key and a tag value of "prod"
resource.hasTag("Environment") &&
resource.getTag("Environment") == "prod"
};
// Identity Center users in the "Contractor" division can automatically access nodes tagged with the "Environment" key when the value equals "dev"
permit(principal, action == AWS::SSM::getTokenForInstanceAccess, resource)
when {
// Verify that the user is part of the "Contractor" division
principal.division == "Contractor" &&
// Verify the node has a tag with "Environment" tag key and a tag value of "dev"
resource.hasTag("Environment") &&
resource.getTag("Environment") == "dev"
};
// Identity Center users in a specified group can automatically access nodes tagged with the "Environment" key when the value equals "Production"
permit(principal in AWS::IdentityStore::Group::"d4q81745-r081-7079-d789-14da1EXAMPLE",
action == AWS::SSM::getTokenForInstanceAccess,
resource)
when {
resource.hasTag("Environment") &&
resource.getTag("Environment") == "Production"
};