Kontext wird hinzugefügt - 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 wird hinzugefügt

Kontext ist die Information, die für politische Entscheidungen relevant ist, aber nicht Teil der Identität Ihres Auftraggebers, Ihrer Aktion oder Ihrer Ressource ist. Der Anspruch auf Zugriffstoken ist 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 mit verifizierten Berechtigungen müssen in einem Element im JSON-Format vorliegen. contextMap

Die Beispiele, die diesen Inhalt veranschaulichen, stammen aus einem Beispielrichtlinienspeicher. Um dem nachzugehen, erstellen Sie den DigitalPetStoreBeispiel-Richtlinienspeicher in Ihrer Testumgebung.

Das folgende Kontextobjekt deklariert einen von jedem Cedar-Datentyp für eine Anwendung auf der Grundlage des DigitalPetStoreBeispielrichtlinienspeichers.

"context": { "contextMap": { "MfaAuthorized": { "boolean": true }, "AccountCodes": { "set": [ { "long": 111122223333 }, { "long": 444455556666 }, { "long": 123456789012 } ] }, "UserAgent": { "string": "My UserAgent 1.12" }, "RequestedOrderCount": { "long": 4 }, "NetworkInfo": { "record": { "IPAddress": { "string": "192.0.2.178" }, "Country": { "string": "United States of America" }, "SSL": { "boolean": true } } }, "approvedBy": { "entityIdentifier": { "entityId": "Bob", "entityType": "DigitalPetStore::User" } } } }
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 Multi-Faktor-Authentifizierung durchgeführt hat, bevor er die Anzeige seiner Bestellung angefordert hat.

Einstellen

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

String

Eine Folge von Buchstaben, Zahlen oder Symbolen, die in " Zeichen eingeschlossen sind. In diesem Beispiel steht die UserAgent Zeichenfolge für den Browser, mit dem der Kunde die Anzeige seiner Bestellung angefordert hat.

Long

Als ganze Zahl. Im Beispiel RequestedOrderCount gibt das an, dass diese Anfrage Teil eines Stapels ist, der darauf zurückzuführen ist, dass der Kunde darum gebeten hat, vier seiner vergangenen Bestellungen einzusehen.

Rekord

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. In diesem Beispiel enthält der NetworkInfo Datensatz Informationen über die ursprüngliche IP-Adresse des Benutzers, die vom Client festgelegte Geolokalisierung dieser IP und die Verschlüsselung bei der Übertragung.

EntityIdentifier

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

Um diesen Beispielkontext in der DigitalPetStoreBeispiel-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 DigitalPetStorehandelt es sich nicht um einen sehr komplexen Richtlinienspeicher. Er enthält keine vorkonfigurierten Richtlinien oder Kontextattribute zur Unterstützung des von uns vorgestellten Kontextes. 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 unterZugriffstoken zuordnen.

Schema

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

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

Um auf den NetworkInfo in Ihrem Anforderungskontext genannten record Datentyp zu verweisen, erstellen Sie in Ihrem Schema wie folgt ein CommonType-Konstrukt. Ein commonType Konstrukt ist ein gemeinsam genutzter Satz von Attributen, den Sie auf verschiedene Entitäten anwenden können.

Anmerkung

Der visuelle Schema-Editor Verified Permissions unterstützt derzeit keine commonType Konstrukte. Wenn Sie sie zu Ihrem Schema hinzufügen, können Sie Ihr Schema nicht mehr im visuellen Modus anzeigen.

"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 bestehenden statischen Richtlinie mit der Beschreibung Customer Role — Get Order auf. Diese Richtlinie verlangt zunächst nur, dass der Principal, 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.MfaAuthorized == true && context.UserAgent like "*My UserAgent*" && context.RequestedOrderCount <= 4 && context.AccountCodes.contains(111122223333) && context.NetworkInfo.Country like "*United States*" && context.NetworkInfo.SSL == true && context.NetworkInfo.IPAddress like "192.0.2.*" && context.approvedBy in DigitalPetStore::Role::"Employee" };

Wir haben nun 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 mit 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 sein111122223333.

  5. Die IP-Adresse des Benutzers muss aus den Vereinigte 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 deklarieren wir einen Bob Benutzer mit der Rolle vonEmployee.

Request body

Nachdem Sie Ihren Richtlinienspeicher mit dem entsprechenden Schema und der entsprechenden Richtlinie konfiguriert haben, können Sie diese Autorisierungsanfrage dem API-Vorgang „Verified Permissions“ vorlegen IsAuthorized. Beachten Sie, dass das entities Segment eine Definition vonBob, einem Benutzer 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": { "MfaAuthorized": { "boolean": true }, "UserAgent": { "string": "My UserAgent 1.12" }, "RequestedOrderCount":{ "long": 4 }, "AccountCodes": { "set": [ {"long": 111122223333}, {"long": 444455556666}, {"long": 123456789012} ] }, "NetworkInfo": { "record": { "IPAddress": {"string": "192.0.2.178"}, "Country": {"string": "United States of America"}, "SSL": {"boolean": true} } }, "approvedBy": { "entityIdentifier": { "entityId": "Bob", "entityType": "DigitalPetStore::User" } } } }, "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" }