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