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

Hinzufügen von Kontext

Kontext sind die Informationen, die für Richtlinienentscheidungen relevant sind, aber nicht Teil der Identität Ihres Prinzipals, Ihrer Aktion oder Ihrer Ressource sind. Möglicherweise möchten Sie eine Aktion nur von einer Reihe von Quell-IP-Adressen zulassen oder nur, wenn sich Ihr Benutzer mit MFA angemeldet hat. Ihre Anwendung hat Zugriff auf diese kontextbezogenen Sitzungsdaten und muss sie für Autorisierungsanforderungen ausfüllen. Die Kontextdaten in einer Autorisierungsanforderung für verifizierte Berechtigungen müssen in einem -contextMapElement JSON-formatiert sein.

Die Beispiele, die diesen Inhalt veranschaulichen, stammen aus einem Beispielrichtlinienspeicher . Erstellen Sie als Nächstes den DigitalPetStore Beispielrichtlinienspeicher in Ihrer Testumgebung.

Das folgende Kontextobjekt deklariert einen der einzelnen Cedar-Datentypen für eine Anwendung basierend auf dem DigitalPetStore Beispielrichtlinienspeicher.

"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. Im Beispiel MfaAuthenticated gibt der boolesche Wert true für an, dass der Kunde eine Multi-Faktor-Authentifizierung durchgeführt hat, bevor er auffordert, seine Bestellung anzuzeigen.

Einstellen

Eine Sammlung von Kontextelementen. Satzmitglieder können denselben Typ haben, wie in diesem Beispiel, oder von verschiedenen Typen, einschließlich eines verschachtelten Satzes. Im Beispiel ist der Kunde mit 3 verschiedenen Konten verknüpft.

String

Eine Folge von Buchstaben, Zahlen oder Symbolen, eingeschlossen in " Zeichen. Im Beispiel stellt die UserAgent Zeichenfolge den Browser dar, den der Kunde zum Anzeigen seiner Bestellung verwendet hat.

Long

Als ganze Zahl. In dem Beispiel RequestedOrderCount zeigt die an, dass diese Anfrage Teil eines Batches ist, der dazu geführt hat, dass der Kunde vier seiner früheren Bestellungen anfragt.

Datensatz

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 des Benutzers, die vom Client festgelegte Geolokalisierung dieser IP und die Verschlüsselung während der Übertragung.

EntityIdentifier

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

Um diesen Beispielkontext in der Beispiel-DigitalPetStoreApp zu testen, müssen Sie Ihre Anfrage entities, Ihr Richtlinienspeicherschema und die statische Richtlinie mit der Beschreibung Customer Role - Get Order aktualisieren.

Ändern, DigitalPetStore um Autorisierungskontext zu akzeptieren

Anfänglich DigitalPetStore ist kein sehr komplexer Richtlinienspeicher. Es enthält keine vorkonfigurierten Richtlinien oder Kontextattribute zur Unterstützung des von uns vorgestellten Kontextes. Um eine Beispielautorisierungsanforderung mit diesen Kontextinformationen auszuwerten, nehmen Sie die folgenden Änderungen an Ihrem Richtlinienspeicher und Ihrer Autorisierungsanforderung vor.

Schema

Wenden Sie die folgenden Aktualisierungen auf Ihr Richtlinienspeicherschema an, um die neuen Kontextattribute zu unterstützen. Aktualisieren Sie GetOrder in 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 record Datentyp namens NetworkInfo in Ihrem Anforderungskontext zu verweisen, erstellen Sie wie folgt ein commonType-Konstrukt in Ihrem Schema. Ein commonTypeKonstrukt ist ein gemeinsam genutzter Satz von Attributen, die Sie auf verschiedene Entitäten anwenden können.

Anmerkung

Der visuelle Schemaeditor für Verified Permissions unterstützt derzeit keine commonTypeKonstrukte. Wenn Sie sie 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 richtet Bedingungen ein, die von jedem der bereitgestellten Kontextelemente erfüllt werden müssen. Es baut auf der vorhandenen statischen Richtlinie mit der Beschreibung Customer Role – Get Order auf. Diese Richtlinie erfordert zunächst nur, dass der Prinzipal, der eine Anforderung 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 Anforderung zum Abrufen einer Bestellung die zusätzlichen Kontextbedingungen erfüllt, die wir der Anforderung hinzugefügt haben.

  1. Der Benutzer muss sich mit MFA angemeldet haben.

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

  3. Der Benutzer muss aufgefordert haben, 4 oder weniger Bestellungen anzuzeigen.

  4. Einer der Kontocodes des Benutzers muss sein111122223333.

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

Request body

Nachdem Sie Ihren Richtlinienspeicher mit dem entsprechenden Schema und der entsprechenden Richtlinie konfiguriert haben, können Sie diese Autorisierungsanforderung der API-Operation Verified Permissions vorlegenIsAuthorized. Beachten Sie, dass das entities Segment eine Definition von Bob, einem Benutzer mit der Rolle , 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" }