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 |
|
scope |
|
clause de condition |
|
Composantes de la politique
Une politique d'approbation automatique ou de refus d'accès contient les éléments suivants :
-
Effet : soit
permit
(autoriser) soitforbid
(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 f teste si l'enregistrement ou l'entité e possède une liaison pour l'attributf . Renvoie false s'il e n'existe pas ou s'e il 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 p vé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"
};