Ermöglicht den Zugriff auf Attribute einer Entität (ABAC) - Amazon Verified Permissions

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.

Ermöglicht den Zugriff auf Attribute einer Entität (ABAC)

Die attributbasierte Zugriffskontrolle (ABAC) ist eine Autorisierungsstrategie, bei der Berechtigungen basierend auf Attributen definiert werden. Verifizierte Berechtigungen ermöglichen das Anhängen von Attributen an Prinzipale, Aktionen und Ressourcen. Auf diese Attribute kann dann in den Richtlinienklauseln when und unless -klauseln verwiesen werden, in denen die Attribute der Prinzipale, Aktionen und Ressourcen bewertet werden, die den Kontext der Anfrage bilden.

In den folgenden Beispielen werden die Attribute verwendet, die in der hypothetischen Anwendung definiert sind, die im Abschnitt Beispielschema des Cedar Policy Language Reference Guide PhotoFlash beschrieben wird.

Dieses Beispiel zeigt, wie Sie eine Richtlinie erstellen könnten, die es jedem Schulleiter in der HardwareEngineering Abteilung mit einem Stellenlevel von mindestens 5 ermöglicht, Fotos im Album anzusehen und aufzulisten. device_prototypes

permit( principal, action in [Action::"listPhotos", Action::"view"], resource in Album::"device_prototypes" ) when { principal.department == "HardwareEngineering" && principal.jobLevel >= 5 };

Dieses Beispiel zeigt, wie Sie eine Richtlinie erstellen könnten, die es dem Benutzer alice ermöglicht, jede Ressource eines Dateityps anzuzeigenJPEG.

permit( principal == User::"alice", action == Action::"view", resource ) when { resource.fileType == "JPEG" };

Aktionen haben Kontext-Attribute. Sie müssen diese Attribute in einer Autorisierungsanfrage übergeben. context Dieses Beispiel zeigt, wie Sie eine Richtlinie erstellen könnten, die es dem Benutzer alice ermöglicht, jede readOnly Aktion auszuführen. Sie können auch eine appliesTo Eigenschaft für Aktionen in Ihrem Schema festlegen. Dies gibt gültige Aktionen für eine Ressource an, wenn Sie sicherstellen möchten, dass Benutzer beispielsweise nur versuchen können, sich ViewPhoto für eine Ressource des Typs PhotoFlash::Photo zu autorisieren.

permit( principal == PhotoFlash::User::"alice", action, resource ) when { context has readOnly && context.readOnly == true };

Eine bessere Methode, die Eigenschaften von Aktionen in Ihrem Schema festzulegen, besteht jedoch darin, sie in funktionalen Aktionsgruppen anzuordnen. Sie können beispielsweise eine Aktion mit dem Namen einer Aktionsgruppe erstellen ReadOnlyPhotoAccess und festlegenPhotoFlash::Action::"ViewPhoto", dass ReadOnlyPhotoAccess sie Mitglied dieser Aktion ist. Dieses Beispiel zeigt, wie Sie eine Richtlinie erstellen könnten, die Alice Zugriff auf die schreibgeschützten Aktionen in dieser Gruppe gewährt.

permit( principal == PhotoFlash::User::"alice", action, resource ) when { action in PhotoFlash::Action::"ReadOnlyPhotoAccess" };

Dieses Beispiel zeigt, wie Sie eine Richtlinie erstellen könnten, die es allen Prinzipalen ermöglicht, jede Aktion mit Ressourcen durchzuführen, für die sie ein Attribut haben. owner

permit( principal, action, resource ) when { principal == resource.owner };

Dieses Beispiel zeigt, wie Sie eine Richtlinie erstellen könnten, die es jedem Prinzipal ermöglicht, jede Ressource anzuzeigen, wenn das department Attribut für den Prinzipal mit dem department Attribut der Ressource übereinstimmt.

Anmerkung

Wenn für eine Entität kein Attribut in einer Richtlinienbedingung erwähnt wird, wird die Richtlinie ignoriert, wenn eine Autorisierungsentscheidung getroffen wird und die Bewertung dieser Richtlinie für diese Entität fehlschlägt. Beispielsweise kann einem Prinzipal, der kein department Attribut hat, durch diese Richtlinie kein Zugriff auf eine Ressource gewährt werden.

permit( principal, action == Action::"view", resource ) when { principal.department == resource.owner.department };

Dieses Beispiel zeigt, wie Sie eine Richtlinie erstellen könnten, die es jedem Prinzipal ermöglicht, jede Aktion an einer Ressource auszuführen, wenn der Principal owner der Ressource ist ODER wenn der Principal Teil der admins Gruppe für die Ressource ist.

permit( principal, action, resource, ) when { principal == resource.owner || resource.admins.contains(principal) };