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 |
|
| scope |
|
| clause de condition |
|
Composants de politique
Une politique d’approbation automatique ou de refus d’accès contient les composants suivants :
-
Effet :
permit(autoriser) ouforbid(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’
actionest toujoursAWS::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"
};