View a markdown version of this page

Kontext hinzufügen - 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.

Kontext hinzufügen

Kontext sind die Informationen, die für politische Entscheidungen relevant sind, aber nicht Teil der Identität Ihres Auftraggebers, Ihrer Maßnahme oder Ihrer Ressource sind. Zugriffstoken-Ansprüche sind Kontext. Möglicherweise möchten Sie eine Aktion nur von einer Reihe von Quell-IP-Adressen aus zulassen oder nur, wenn sich Ihr Benutzer mit MFA angemeldet hat. Ihre Anwendung hat Zugriff auf diese kontextbezogenen Sitzungsdaten und muss sie für Autorisierungsanfragen ausfüllen. Die Kontextdaten in einer Autorisierungsanfrage für verifizierte Berechtigungen müssen sich JSON-formatted in einem contextMap Element befinden.

Die Beispiele, die diesen Inhalt veranschaulichen, stammen aus einem Beispiel-Richtlinienspeicher. Erstellen Sie zur Veranschaulichung den DigitalPetStore Beispiel-Richtlinienspeicher in Ihrer Testumgebung.

Das folgende Kontextobjekt deklariert einen der einzelnen Cedar-Datentypen für eine Anwendung, die auf dem DigitalPetStore Beispiel-Richtlinienspeicher basiert.

"context": { "contextMap": { "AccountCodes": { "set": [ { "long": 111122223333 }, { "long": 444455556666 }, { "long": 123456789012 } ] }, "approvedBy": { "entityIdentifier": { "entityId": "Bob", "entityType": "DigitalPetStore::User" } }, "MfaAuthorized": { "boolean": true }, "NetworkInfo": { "record": { "IPAddress": { "string": "192.0.2.178" }, "Country": { "string": "United States of America" }, "SSL": { "boolean": true } } }, "RequestedOrderCount": { "long": 4 }, "UserAgent": { "string": "My UserAgent 1.12" } } }
Datentypen im Autorisierungskontext
Boolesch

Eine Binärdatei true oder ein false Wert. In diesem Beispiel MfaAuthenticated gibt der boolesche Wert von true for an, dass der Kunde eine mehrstufige Authentifizierung durchgeführt hat, bevor er die Anzeige seiner Bestellung angefordert hat.

Einstellen

Eine Sammlung von Kontextelementen. Set-Mitglieder können alle vom gleichen Typ sein, wie in diesem Beispiel, oder von unterschiedlichen Typen, einschließlich einer verschachtelten Menge. Im Beispiel ist der Kunde mit 3 verschiedenen Konten verknüpft.

Zeichenfolge

Eine Folge von Buchstaben, Zahlen oder Symbolen, die in " Zeichen eingeschlossen sind. Im Beispiel steht die UserAgent Zeichenfolge für den Browser, den der Kunde verwendet hat, um seine Bestellung einzusehen.

Long

Als ganze Zahl. Im Beispiel RequestedOrderCount gibt der an, dass diese Anfrage Teil eines Batches ist, der darauf zurückzuführen ist, dass der Kunde vier seiner vergangenen Bestellungen einsehen wollte.

Aufzeichnen

Eine Sammlung von Attributen. Sie müssen diese Attribute im Anforderungskontext deklarieren. Ein Richtlinienspeicher mit einem Schema muss diese Entität und die Attribute der Entität im Schema enthalten. Im Beispiel enthält der NetworkInfo Datensatz Informationen über die ursprüngliche IP-Adresse des Benutzers, die vom Client ermittelte Geolokalisierung dieser IP-Adresse und die Verschlüsselung während der Übertragung.

EntityIdentifier

Ein Verweis auf eine Entität und Attribute, die im entities Element der Anfrage deklariert sind. Im Beispiel wurde die Bestellung des Benutzers vom Mitarbeiter genehmigtBob.

Um diesen Beispielkontext in der DigitalPetStore Beispiel-App zu testen, müssen Sie Ihre Anfrageentities, Ihr Policy Store-Schema und die statische Richtlinie mit der Beschreibung Customer Role — Get Order aktualisieren.

Ändern DigitalPetStore , um den Autorisierungskontext zu akzeptieren

Anfänglich DigitalPetStore handelt es sich nicht um einen sehr komplexen Richtlinienspeicher. Er enthält keine vorkonfigurierten Richtlinien oder Kontextattribute, um den von uns vorgestellten Kontext zu unterstützen. Um ein Beispiel für eine Autorisierungsanfrage mit diesen Kontextinformationen auszuwerten, nehmen Sie die folgenden Änderungen an Ihrem Richtlinienspeicher und Ihrer Autorisierungsanfrage vor. Kontextbeispiele mit Zugriffstoken-Informationen als Kontext finden Sie unter Zuordnen von Amazon Cognito Zugriffstoken und Zuordnen von OIDC-Zugriffstoken.

Schema

Wenden Sie die folgenden Aktualisierungen auf Ihr Policy Store-Schema an, um die neuen Kontextattribute zu unterstützen. Aktualisieren Sie GetOrder actions wie folgt.

"GetOrder": { "memberOf": [], "appliesTo": { "resourceTypes": [ "Order" ], "context": { "type": "Record", "attributes": { "AccountCodes": { "type": "Set", "required": true, "element": { "type": "Long" } }, "approvedBy": { "name": "User", "required": true, "type": "Entity" }, "MfaAuthorized": { "type": "Boolean", "required": true }, "NetworkInfo": { "type": "NetworkInfo", "required": true }, "RequestedOrderCount": { "type": "Long", "required": true }, "UserAgent": { "required": true, "type": "String" } } }, "principalTypes": [ "User" ] } }

Um auf den NetworkInfo in Ihrem Anforderungskontext genannten record Datentyp zu verweisen, erstellen Sie ein https://docs.cedarpolicy.com/schema/schema.html#schema-commonTypes CommonType-Konstrukt in Ihrem Schema, indem Sie Ihrem Schema zuvor actions Folgendes hinzufügen. Ein commonType Konstrukt ist ein gemeinsamer Satz von Attributen, den Sie auf verschiedene Entitäten anwenden können.

"commonTypes": { "NetworkInfo": { "attributes": { "IPAddress": { "type": "String", "required": true }, "SSL": { "required": true, "type": "Boolean" }, "Country": { "required": true, "type": "String" } }, "type": "Record" } },
Policy

Die folgende Richtlinie legt Bedingungen fest, die von jedem der bereitgestellten Kontextelemente erfüllt werden müssen. Sie baut auf der vorhandenen statischen Richtlinie mit der Beschreibung Customer Role — Get Order auf. Diese Richtlinie verlangt zunächst nur, dass der Prinzipal, der eine Anfrage stellt, der Eigentümer der Ressource ist.

permit ( principal in DigitalPetStore::Role::"Customer", action in [DigitalPetStore::Action::"GetOrder"], resource ) when { principal == resource.owner && context.AccountCodes.contains(111122223333) && context.approvedBy in DigitalPetStore::Role::"Employee" && context.MfaAuthorized == true && context.NetworkInfo.Country like "*United States*" && context.NetworkInfo.IPAddress like "192.0.2.*" && context.NetworkInfo.SSL == true && context.RequestedOrderCount <= 4 && context.UserAgent like "*My UserAgent*" };

Wir haben jetzt verlangt, dass die Anfrage zum Abrufen einer Bestellung die zusätzlichen Kontextbedingungen erfüllt, die wir der Anfrage hinzugefügt haben.

  1. Der Benutzer muss sich bei MFA angemeldet haben.

  2. Der Webbrowser des Benutzers User-Agent muss die Zeichenfolge My UserAgent enthalten.

  3. Der Benutzer muss die Ansicht von 4 oder weniger Bestellungen angefordert haben.

  4. Einer der Kontocodes des Benutzers muss lauten111122223333.

  5. Die IP-Adresse des Benutzers muss aus den Vereinigten Staaten stammen, er muss sich in einer verschlüsselten Sitzung befinden und seine IP-Adresse muss mit beginnen192.0.2..

  6. Ein Mitarbeiter muss seine Bestellung genehmigt haben. Im entities Element der Autorisierungsanfrage werden wir einen Benutzer angeben, der Bob die Rolle von hatEmployee.

Request body

Nachdem Sie Ihren Richtlinienspeicher mit dem entsprechenden Schema und der entsprechenden Richtlinie konfiguriert haben, können Sie diese Autorisierungsanfrage dem API-Vorgang für verifizierte Berechtigungen vorlegen IsAuthorized. Beachten Sie, dass das entities Segment die Definition eines Bob Benutzers mit der Rolle von enthältEmployee.

{ "principal": { "entityType": "DigitalPetStore::User", "entityId": "Alice" }, "action": { "actionType": "DigitalPetStore::Action", "actionId": "GetOrder" }, "resource": { "entityType": "DigitalPetStore::Order", "entityId": "1234" }, "context": { "contextMap": { "AccountCodes": { "set": [ {"long": 111122223333}, {"long": 444455556666}, {"long": 123456789012} ] }, "approvedBy": { "entityIdentifier": { "entityId": "Bob", "entityType": "DigitalPetStore::User" } }, "MfaAuthorized": { "boolean": true }, "NetworkInfo": { "record": { "Country": {"string": "United States of America"}, "IPAddress": {"string": "192.0.2.178"}, "SSL": {"boolean": true} } }, "RequestedOrderCount":{ "long": 4 }, "UserAgent": { "string": "My UserAgent 1.12" } } }, "entities": { "entityList": [ { "identifier": { "entityType": "DigitalPetStore::User", "entityId": "Alice" }, "attributes": { "memberId": { "string": "801b87f2-1a5c-40b3-b580-eacad506d4e6" } }, "parents": [ { "entityType": "DigitalPetStore::Role", "entityId": "Customer" } ] }, { "identifier": { "entityType": "DigitalPetStore::User", "entityId": "Bob" }, "attributes": { "memberId": { "string": "49d9b81e-735d-429c-989d-93bec0bcfd8b" } }, "parents": [ { "entityType": "DigitalPetStore::Role", "entityId": "Employee" } ] }, { "identifier": { "entityType": "DigitalPetStore::Order", "entityId": "1234" }, "attributes": { "owner": { "entityIdentifier": { "entityType": "DigitalPetStore::User", "entityId": "Alice" } } }, "parents": [] } ] }, "policyStoreId": "PSEXAMPLEabcdefg111111" }