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 integrierte Operatoren für Richtlinien zur automatischen Genehmigung und Zugriffsverweigerung
Die folgende Tabelle zeigt die Struktur der Richtlinien für automatische Genehmigung und Zugriffsverweigerung.
Komponente | Syntax |
---|---|
Auswirkung |
|
scope |
|
Bedingungsklausel |
|
Komponenten der Richtlinie
Eine Richtlinie zur automatischen Genehmigung oder Zugriffsverweigerung umfasst die folgenden Komponenten:
-
Auswirkung — Zugriff entweder
permit
(zulassen) oderforbid
(verweigern). -
Geltungsbereich — Die Prinzipien, Aktionen und Ressourcen, für die der Effekt gilt. Sie können den Geltungsbereich in Cedar undefiniert lassen, indem Sie keine bestimmten Prinzipale, Aktionen oder Ressourcen angeben. In diesem Fall gilt die Richtlinie für alle möglichen Prinzipale, Aktionen und Ressourcen. Für den just-in-time Knotenzugriff
action
gilt das immerAWS::SSM::Action::"getTokenForInstanceAccess"
. -
Bedingungsklausel — Der Kontext, in dem der Effekt gilt.
Kommentare
Sie können Kommentare in Ihre Richtlinien aufnehmen. Kommentare sind als Zeilen definiert, die mit einem Zeilenumbruchzeichen beginnen //
und damit 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
Mithilfe des &&
Operators können Sie in einer Richtlinienerklärung mehr als eine Bedingungsklausel verwenden.
// 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, was ein reserviertes Zeichen in der Richtliniensprache ist.
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 Richtlinienerklärungen.
Just-in-time Knotenzugriffsschema
Das Folgende ist 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 den &&
Operator verwenden, um zusätzliche Bedingungen hinzuzufügen. Es gibt auch viele andere integrierte Operatoren, mit denen Sie Ihren Versicherungsbedingungen zusätzliche Aussagekraft verleihen können. Die folgende Tabelle enthält alle integrierten Operatoren als Referenz.
Operator | Typen und Überladungen | Beschreibung |
---|---|---|
! |
Boolean → Boolean |
Logisch nicht. |
== |
beliebig → beliebig |
Gleichheit. Funktioniert mit Argumenten aller Art, auch wenn die Typen nicht übereinstimmen. Werte verschiedener Typen sind einander niemals gleich. |
!= | beliebig → beliebig |
Ungleichheit; das genaue Gegenteil von Gleichheit (siehe oben). |
< |
(lang, lang) → Boolesch |
Lange Ganzzahl kleiner als. |
<= |
(lang, lang) → Boolesch |
Lange Ganzzahl -to less-than-or-equal. |
> |
(lang, lang) → Boolean |
Lange Ganzzahl größer als. |
>= |
(lang, lang) → Boolesch |
Lange Ganzzahl -to greater-than-or-equal. |
in | (Entität, Entität) → Boolean | Hierarchiezugehörigkeit (reflexiv: A in A ist immer wahr). |
(Entität, Menge (Entität)) → Boolean | Hierarchiezugehörigkeit: A in [B, C,...] ist wahr, wenn (A und B) || (A in C) ||... ein Fehler auftritt, wenn die Menge eine Nicht-Entität enthält. | |
&& | (Boolean, Boolean) → Boolean |
Logisch und (kurzschließend). |
|| | (Boolean, Boolean) → Boolean |
Logisch oder (Kurzschluss). |
.existiert () | Entität → Boolean | Existenz einer Entität. |
hat | (Entität, Attribut) → Boolean | Infix-Operator. e has f testet, ob der Datensatz oder die Entität eine Bindung für das Attribut e f hat. Gibt zurückfalse , ob es nicht e existiert oder ob e es existiert, aber das Attribut nicht hatf . Attribute können als Bezeichner oder Zeichenkettenliterale ausgedrückt werden. |
like | (Zeichenfolge, Zeichenfolge) → Boolean | Infix-Operator. t like p prüft, ob der Text dem Muster t entsprichtp , das Platzhalterzeichen enthalten kann* , die 0 oder mehr eines beliebigen Zeichens entsprechen. Um einem buchstäblichen Sternzeichen in zu entsprechent , können Sie die spezielle Escape-Zeichenfolge \* in verwenden. p |
.hasTag () | (Entität, Zeichenfolge) → Boolean | Prüft, ob auf die Entität das angegebene Tag angewendet wurde. |
.getTag () | (Entität, Zeichenfolge) → Boolean | Gibt den Wert des angegebenen Tag-Schlüssels zurück. |
.enthält () | (gesetzt, beliebig) → Boolean | Mitgliedschaft festlegen (ist B ein Element von A). |
. enthält Alle () | (set, set) → Boolean | Testet, ob Satz A alle Elemente in Satz B enthält. |
. enthält Any () | (Satz, Satz) → Boolean | Testet, ob Satz A eines der Elemente in Satz B enthält. |
Beispiele für Richtlinienerklärungen
Im Folgenden finden Sie Beispiele für Grundsatzerklärungen.
// 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"
};