Structure de déclaration et opérateurs intégrés pour les politiques d’approbation automatique et de refus d’accès - AWS Systems Manager

AWS Systems ManagerChange Managern'est plus ouvert aux nouveaux clients. Les clients existants peuvent continuer à utiliser le service normalement. Pour plus d'informations, consultez AWS Systems ManagerChange Managerla section Modification de la disponibilité.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Structure de déclaration et opérateurs intégrés pour les politiques d’approbation automatique et de refus d’accès

Le tableau suivant montre la structure des politiques d’approbation automatique et de refus d’accès.

Composant Syntaxe
effet

permit | forbid

scope

(principal, action, resource)

clause de condition
when { principal or resource has attribute name };

Composants de politique

Une politique d’approbation automatique ou de refus d’accès contient les composants suivants :

  • Effet : permit (autoriser) ou forbid (refuser) l’accès.

  • Portée : les principaux, actions et ressources auxquels s’applique l’effet. Vous pouvez laisser le champ de portée indéfini dans Cedar en n’identifiant pas de principaux, d’actions ou de ressources spécifiques. Dans ce cas, la politique s’applique à tous les principaux, actions et ressources possibles. Pour un accès aux nœuds à flux tendu, l’action est toujours AWS::SSM::Action::"getTokenForInstanceAccess".

  • Clause de condition : le contexte dans lequel l’effet s’applique.

Commentaires

Vous pouvez inclure des commentaires dans vos politiques. Les commentaires sont définis comme une ligne commençant par // et se terminant par un caractère de nouvelle ligne.

L’exemple suivant illustre les commentaires dans une politique.

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

Clauses multiples

Vous pouvez utiliser plusieurs clauses de condition dans une déclaration de politique à l’aide de l’opérateur &&.

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

Caractères réservés

L’exemple suivant montre comment écrire une politique si une propriété de contexte utilise un : (point-virgule), qui est un caractère réservé dans le langage de politique.

permit ( principal, action == AWS::SSM::Action::"getTokenForInstanceAccess", resource ) when { principal has employeeNumber && principal.employeeNumber like "E-1*" && resource.hasTag("Purpose") && resource.getTag("Purpose") == "Testing" }

Pour accéder à des exemples supplémentaires, consultez Exemples de déclarations de politique.

Schéma d’accès aux nœuds en flux tendu

Voici le schéma Cedar pour l’accès aux nœuds en flux tendu.

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

Opérateurs intégrés

Lorsque vous créez le contexte d’une politique d’approbation automatique ou de refus d’accès utilisant différentes conditions, vous pouvez utiliser l’opérateur && pour ajouter des conditions supplémentaires. Il existe également de nombreux autres opérateurs intégrés que vous pouvez utiliser pour ajouter un pouvoir d’expression supplémentaire à vos conditions de politique. Le tableau suivant contient tous les opérateurs intégrés à titre de référence.

Opérateur Types et surcharges Description

!

booléen → booléen

Non logique

==

tout → tout

Égalité. Fonctionne sur tous les types d’arguments, même si les types ne correspondent pas. Les valeurs de différents types ne sont jamais égales entre elles.

!= tout → tout

Inégalité ; l’exact inverse de l’égalité (voir ci-dessus).

<

(long, long) → booléen

Entier long inférieur à.

<=

(long, long) → booléen

Entier long inférieur ou égal à.

>

(long, long) → booléen

Entier long supérieur à.

>=

(long, long) → booléen

Entier long supérieur ou égal à.

dans (entité, entité) → booléen Appartenance à la hiérarchie (réflexif : A dans A est toujours vrai).
(entité, ensemble (entité)) → booléen Appartenance à la hiérarchie : A dans [B, C,...] est vrai si (A et B) || (A dans C) ||... erreur si l’ensemble contient une non-entité.
&& (booléen, booléen) → booléen

Et logique (court-circuit).

|| (booléen, booléen) → booléen

Ou logique (court-circuit).

.exists() entité → booléen Existence d’une entité.
has (entité, attribut) → booléen Opérateur Infix. e has f teste si l’enregistrement ou l’entité e possède une liaison pour l’attribut f. Renvoie false si e n’existe pas ou si e existe mais n’a pas l’attribut f. Les attributs peuvent être exprimés sous forme d’identifiants ou de chaînes littérales.
like (chaîne, chaîne) → booléen Opérateur Infix. t like p vérifie si le texte t correspond au modèle p, qui peut inclure des caractères génériques * correspondant à 0 ou plus de n’importe quel caractère. Pour faire correspondre un caractère étoile littéral dans t, vous pouvez utiliser la séquence spéciale de caractères échappés \* dans p.
.hasTag() (entité, chaîne) → booléen Vérifie si la balise spécifiée est appliquée à l’entité.
.getTag() (entité, chaîne) → booléen Renvoie la valeur de la clé de balise spécifiée.
.contains() (ensemble, tout) → booléen Appartenance de l’ensemble (B est-il un élément de A).
.containsAll() (ensemble, ensemble) → booléen Teste si l’ensemble A contient tous les éléments de l’ensemble B.
.containsAny() (ensemble, ensemble) → booléen Teste si l’ensemble A contient l’un des éléments de l’ensemble B.

Exemples de déclarations de politique

Voici des exemples de déclaration de politique.

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