Struttura dell'istruzione e operatori integrati per le policy di approvazione automatica e di diniego dell'accesso - AWS Systems Manager

AWS Systems ManagerChange Managernon è più aperto a nuovi clienti. I clienti esistenti possono continuare a utilizzare il servizio normalmente. Per ulteriori informazioni, consulta AWS Systems ManagerChange Managerla pagina Modifica della disponibilità.

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 dell'istruzione e operatori integrati per le policy di approvazione automatica e di diniego dell'accesso

La tabella seguente mostra la struttura delle policy di approvazione automatica e diniego dell'accesso.

Componente Sintassi
effetto

permit | forbid

scope

(principal, action, resource)

clausola condizionale
when { principal or resource has attribute name };

Componenti della policy

Una policy di approvazione automatica o diniego dell'accesso contiene i seguenti componenti:

  • Effetto: sia permit (consenti) che forbid (nega) l'accesso.

  • Ambito: i principali, le azioni e le risorse a cui si applica l'effetto. È possibile lasciare indefinito l'ambito in Cedar non identificando principali, azioni o risorse specifici. In questo caso, la policy si applica a tutti i possibili principali, operazioni e risorse. Per l'accesso al nodo just-in-time, action è sempre AWS::SSM::Action::"getTokenForInstanceAccess".

  • Clausola condizionale: il contesto in cui si applica l'effetto.

Commenti

Puoi includere commenti nelle tue policy. I commenti sono definiti come una riga che inizia con // e termina con un carattere a capo.

Di seguito viene illustrato un esempio di commenti in una policy.

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

Puoi utilizzare più clausole condizionali in un'istruzione di policy tramite 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" };

Caratteri riservati

L'esempio seguente mostra come scrivere una policy, se una proprietà di contesto utilizza un : (punto e virgola), che è un carattere riservato nel linguaggio delle policy.

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 Esempio di istruzioni di policy .

Schema di accesso al nodo Just-in-Time

Di seguito è riportato lo schema Cedar per l'accesso al nodo just-in-time.

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 policy di approvazione automatica o di diniego dell'accesso utilizzando varie condizioni, è possibile utilizzare l'operatore &&, per aggiungere ulteriori condizioni. Esistono anche molti altri operatori integrati che puoi utilizzare per aggiungere ulteriore forza espressiva alle condizioni della tua policy. La tabella seguente contiene tutti gli operatori integrati 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 contrario di uguaglianza (vedi sopra).

<

(long, long) → Booleano

Intero lungo minore di.

<=

(long, long) → Booleano

Intero lungo minore di o uguale a.

>

(long, long) → Booleano

Intero lungo maggiore di.

>=

(long, long) → Booleano

Intero lungo maggiore di o uguale a.

in (entity, entity) → Booleano Appartenenza alla gerarchia (riflessiva: A in A è sempre vero).
(entity, set(entity)) → Booleano Appartenenza alla gerarchia: A in [B, C, ...] è vero se (A e B) || (A in C) || ... errore, se l'insieme contiene una non entità.
&& (Boolean, Boolean) → Booleano

Logico e (short-circuiting).

|| (Boolean, Boolean) → Booleano

Logico o (short-circuiting).

.exists() entità → Booleano Esistenza dell'entità.
has (entity, attribute) → Booleano L'operator. Infix e has f verifica se il record o l'entità e ha un'associazione per l'attributo f. Restituisce false, se e non esiste o se e esiste, ma non ha l'attributo f. Gli attributi possono essere espressi come identificatori o stringhe letterali.
like (string, string) → Booleano L'operator. Infix t like p verifica se il testo t corrisponde allo schema p, che può includere caratteri jolly *, che corrispondono a 0 o a più caratteri di qualche carattere. Per far corrispondere un personaggio stellare letterale a t, puoi usare la speciale sequenza \* di escape di caratteri in p.
.hasTag() (entity, string) → Booleano Verifica se all'entità è applicato il tag specificato.
.getTag() (entity, string) → Booleano Restituisce il valore della chiave del tag specificata.
.contains() (set, any) → Booleano Appartenenza al set (se B è un elemento di A).
.containsAll() (set, set) → Booleano Verifica se la serie A contiene tutti gli elementi della serie B.
.containsAny() (set, set) → Booleano Verifica se la serie A contiene tutti gli elementi della serie B.

Esempio di istruzioni di policy

Di seguito sono mostrati esempi di istruzioni della policy.

// 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" };