Struktur der Anweisungen und integrierten Operatoren für automatische Genehmigungs- und Zugriffsverweigerungsrichtlinien - AWS Systems Manager

AWS Systems ManagerChange Managersteht neuen Kunden nicht mehr offen. Bestandskunden können den Service weiterhin wie gewohnt nutzen. Weitere Informationen finden Sie unter Änderung der AWS Systems ManagerChange Manager Verfügbarkeit.

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Struktur der Anweisungen und integrierten Operatoren für automatische Genehmigungs- und Zugriffsverweigerungsrichtlinien

Die folgende Tabelle enthält die Struktur der Richtlinien für automatische Genehmigung und Zugriffsverweigerung.

Komponente Syntax
Auswirkung

permit | forbid

scope

(principal, action, resource)

Bedingungsklausel
when { principal or resource has attribute name };

Richtlinienkomponenten

Eine Richtlinie für automatische Genehmigung oder Zugriffsverweigerung umfasst die folgenden Komponenten:

  • Effekt: entweder permit (zulassen) oder forbid (verweigern).

  • Umfang: Die Prinzipale, Aktionen und Ressourcen, für die der Effekt gilt. Sie können den Umfang in Cedar undefiniert lassen, indem Sie keine Prinzipale, Aktionen oder Ressourcen angeben. Die Richtlinie gilt dann für alle möglichen Prinzipale, Aktionen und Ressourcen. Für den Just-in-Time-Knotenzugriff ist action immer AWS::SSM::Action::"getTokenForInstanceAccess".

  • Bedingungsklausel: Der Kontext, in dem der Effekt gilt.

Kommentare

Sie können Kommentare in Ihre Richtlinien einfügen. Kommentare sind als Zeilen definiert, die mit // beginnen und mit einem Zeilenumbruchzeichen enden.

Das folgende Beispiel zeigt Kommentare in einer Richtlinie:

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

Mehrere Klauseln

Mit dem Operator && können Sie in einer Richtlinienanweisung mehrere Bedingungsklauseln angeben.

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

Reservierte Zeichen

Das folgende Beispiel zeigt, wie eine Richtlinie geschrieben wird, wenn eine Kontexteigenschaft ein : (Semikolon) verwendet – ein reserviertes Zeichen in der Richtliniensprache.

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

Weitere Beispiele finden Sie unter Beispiele für Richtlinienanweisungen.

Schema für den Just-in-Time-Knotenzugriff

Das Cedar-Schema für den Just-in-Time-Knotenzugriff:

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

Integrierte Operatoren

Wenn Sie den Kontext einer Richtlinie für automatische Genehmigung oder Zugriffsverweigerung unter Verwendung verschiedener Bedingungen erstellen, können Sie mit dem Operator && zusätzliche Bedingungen angeben. Es gibt viele andere integrierte Operatoren, mit denen Sie Ihren Richtlinienbedingungen zusätzliche Aussagekraft verleihen können. Die folgende Tabelle enthält alle integrierten Operatoren zur Referenz.

Operator Typen und Überladungen Beschreibung

!

Boolean → boolescher Wert

Logisches Nicht.

==

any → any

Gleichheit. Kann in Argumenten jedes Typs verwendet werden, auch wenn die Typen nicht übereinstimmen. Werte verschiedener Typen sind einander niemals gleich.

!= any → any

Ungleichheit; das genaue Gegenteil von Gleichheit (siehe oben).

<

(long, long) → boolescher Wert

Lange Ganzzahl kleiner als.

<=

(long, long) → boolescher Wert

Lange Ganzzahl kleiner-gleich.

>

(long, long) → boolescher Wert

Lange Ganzzahl größer als.

>=

(long, long) → boolescher Wert

Lange Ganzzahl größer-gleich.

in (entity, entity) → boolescher Wert Hierarchiezugehörigkeit (reflexiv: A in A ist immer wahr).
(entity, set(entity)) → boolescher Wert Hierarchiezugehörigkeit: A in [B, C, …] ist wahr, wenn (A und B) || (A in C) || … Fehler, wenn die Menge eine Nicht-Entität enthält.
&& (Boolean, Boolean) → boolescher Wert

Logisches Und (Kurzschließen).

|| (Boolean, Boolean) → boolescher Wert

Logisches Oder (Kurzschließen).

.exists() entity → boolescher Wert Vorhandensein einer Entität.
has (entity, attribute) → boolescher Wert Infix-Operator. e has f testet, ob der Datensatz oder die Entität e eine Bindung für das Attribut f hat. Gibt false zurück, wenn e nicht existiert oder wenn e existiert, aber nicht das Attribut f hat. Attribute können als Bezeichner oder Zeichenfolgeliterale ausgedrückt werden.
like (string, string) → boolescher Wert Infix-Operator. t like p prüft, ob der Text t dem Muster p entspricht, das Platzhalterzeichen * enthalten kann, die 0 oder mehr eines beliebigen Zeichens entsprechen. Um in t ein tatsächliches Sternzeichen abzugleichen, können Sie die Escape-Zeichenfolge \* in p verwenden.
.hasTag() (entity, string) → boolescher Wert Prüft, ob das angegebene Tag auf die Entität angewendet wurde.
.getTag() (entity, string) → boolescher Wert Gibt den Wert des angegebenen Tag-Schlüssels zurück.
.contains() (set, any) → boolescher Wert Mitgliedschaft festlegen (ist B ein Element von A).
.containsAll() (set, set) → boolescher Wert Testet, ob Menge A alle Elemente in Menge B enthält.
.containsAny() (set, set) → boolescher Wert Testet, ob Menge A beliebige Elemente aus Menge B enthält.

Beispiele für Richtlinienanweisungen

Nachfolgend finden Sie beispielhafte Richtlinienanweisungen.

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