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

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

Composantes de la politique

Une politique d'approbation automatique ou de refus d'accès contient les éléments suivants :

  • Effet : soit permit (autoriser) soit forbid (refuser) l'accès.

  • Champ d'application — Les principes, les actions et les ressources auxquels s'applique l'effet. Vous pouvez laisser le champ d'application indéfini dans Cedar en n'identifiant pas de principes, d'actions ou de ressources spécifiques. Dans ce cas, la politique s'applique à tous les principes, actions et ressources possibles. Pour l'accès aux just-in-time nœuds, action c'est toujours le casAWS::SSM::Action::"getTokenForInstanceAccess".

  • Clause de condition : 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 montre les commentaires d'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" };

Personnages 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 stratégie.

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.

Just-in-time schéma d'accès aux nœuds

Voici le schéma Cedar pour l'accès aux just-in-time nœuds.

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

C'est logique, non.

==

n'importe lequel → n'importe quel

É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.

!= n'importe lequel → n'importe quel

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

<

(long, long) → booléen

Nombre entier long inférieur à.

<=

(long, long) → booléen

Entier long less-than-or-equal -to.

>

(long, long) → booléen

Nombre entier long supérieur à.

>=

(long, long) → booléen

Entier long greater-than-or-equal -to.

dans (entité, entité) → Booléen Appartenance à la hiérarchie (réflexive : 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

Logique et (court-circuit).

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

Logique ou (court-circuit).

.existe () entité → Booléen Existence de l'entité.
a (entité, attribut) → Booléen Opérateur Infix. e has fteste si l'enregistrement ou l'entité e possède une liaison pour l'attributf. Renvoie false s'il e n'existe pas ou s'eil existe mais n'a pas l'attributf. 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 pvérifie si le texte t correspond au modèlep, 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 danst, vous pouvez utiliser la séquence spéciale de caractères échappés \* dansp.
.hashtag () (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.
.contient () (ensemble, n'importe lequel) → Booléen Définissez l'appartenance (B est-il un élément de A).
. Contient tout () (set, set) → Booléen Teste si l'ensemble A contient tous les éléments de l'ensemble B.
. Contient n'importe quel () (set, set) → Booléen Teste si l'ensemble A contient l'un des éléments de l'ensemble B.

Exemples de déclarations de politique

Vous trouverez ci-dessous des exemples de déclarations 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" };