Ajouter du contexte - Amazon Verified Permissions

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Ajouter du contexte

Le contexte est l'information pertinente pour les décisions politiques, mais qui ne fait pas partie de l'identité de votre principal, de votre action ou de votre ressource. Les demandes de jetons d'accès sont contextuelles. Vous souhaiterez peut-être autoriser une action uniquement à partir d'un ensemble d'adresses IP sources, ou uniquement si votre utilisateur s'est connecté avecMFA. Votre application a accès à ces données de session contextuelles et doit les renseigner pour répondre aux demandes d'autorisation. Les données contextuelles d'une demande d'autorisation d'autorisations vérifiées doivent être JSON formatées dans un contextMap élément.

Les exemples illustrant ce contenu proviennent d'un exemple de magasin de politiques. Pour suivre, créez le magasin DigitalPetStored'exemples de règles dans votre environnement de test.

L'objet de contexte suivant déclare un type de données Cedar pour chaque type de données pour une application en fonction de l'exemple de magasin DigitalPetStorede politiques.

"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" } } } }
Types de données dans le contexte des autorisations
Booléen

Un binaire true ou une false valeur. Dans l'exemple, la valeur booléenne de true for MfaAuthenticated indique que le client a effectué une authentification multifactorielle avant de demander à consulter sa commande.

Définir

Un ensemble d'éléments contextuels. Les membres de l'ensemble peuvent être tous du même type, comme dans cet exemple, ou de types différents, y compris un ensemble imbriqué. Dans l'exemple, le client est associé à 3 comptes différents.

Chaîne

Séquence de lettres, de chiffres ou de symboles entourée de " caractères. Dans l'exemple, la UserAgent chaîne représente le navigateur que le client a utilisé pour demander à consulter sa commande.

Long

Un entier. Dans l'exemple, cela RequestedOrderCount indique que cette demande fait partie d'un lot résultant du fait que le client a demandé à consulter quatre de ses commandes passées.

Enregistrer

Une collection d'attributs. Vous devez déclarer ces attributs dans le contexte de la demande. Un magasin de politiques doté d'un schéma doit inclure cette entité et ses attributs dans le schéma. Dans l'exemple, l'NetworkInfoenregistrement contient des informations sur l'adresse IP d'origine de l'utilisateur, la géolocalisation de cette adresse IP telle que déterminée par le client et le chiffrement en cours de transit.

EntityIdentifier

Référence à une entité et à des attributs déclarés dans l'entitiesélément de la demande. Dans l'exemple, la commande de l'utilisateur a été approuvée par l'employéBob.

Pour tester cet exemple de contexte dans l'exemple d'DigitalPetStoreapplication, vous devez mettre à jour votre demandeentities, le schéma de votre magasin de politiques et la politique statique avec la description Customer Role - Get Order.

Modifier DigitalPetStore pour accepter le contexte d'autorisation

Au départ, DigitalPetStorece n'est pas un magasin de politiques très complexe. Il n'inclut aucune politique ou attribut de contexte préconfiguré pour prendre en charge le contexte que nous avons présenté. Pour évaluer un exemple de demande d'autorisation avec ces informations contextuelles, apportez les modifications suivantes à votre magasin de politiques et à votre demande d'autorisation. Pour des exemples de contexte avec les informations du jeton d'accès comme contexte, voirCartographie des jetons d'accès.

Schema

Appliquez les mises à jour suivantes au schéma de votre magasin de politiques pour prendre en charge les nouveaux attributs de contexte. Effectuez GetOrder la mise à jour actions comme suit.

"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" ] } }

Pour référencer le type de record données nommé NetworkInfo dans le contexte de votre demande, créez une commonTypeconstruction dans votre schéma comme suit. Une commonType construction est un ensemble partagé d'attributs que vous pouvez appliquer à différentes entités.

Note

L'éditeur de schéma visuel Verified Permissions ne prend actuellement pas en charge commonType les constructions. Lorsque vous les ajoutez à votre schéma, vous ne pouvez plus le visualiser en mode visuel.

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

La politique suivante définit les conditions qui doivent être remplies par chacun des éléments de contexte fournis. Il s'appuie sur la politique statique existante avec la description Customer Role - Get Order. Au départ, cette politique exige uniquement que le principal qui fait une demande soit le propriétaire de la ressource.

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

Nous avons maintenant exigé que la demande de récupération d'une commande réponde aux conditions contextuelles supplémentaires que nous avons ajoutées à la demande.

  1. L'utilisateur doit s'être connecté avecMFA.

  2. Le navigateur Web de l'utilisateur User-Agent doit contenir la chaîneMy UserAgent.

  3. L'utilisateur doit avoir demandé à consulter 4 commandes ou moins.

  4. L'un des codes de compte de l'utilisateur doit être111122223333.

  5. L'adresse IP de l'utilisateur doit provenir des États-Unis d'Amérique, sa session doit être cryptée et son adresse IP doit commencer par. 192.0.2.

  6. Un employé doit avoir approuvé sa commande. Dans l'entitiesélément de la demande d'autorisation, nous déclarerons un utilisateur Bob ayant le rôle deEmployee.

Request body

Après avoir configuré votre magasin de politiques avec le schéma et la politique appropriés, vous pouvez présenter cette demande d'autorisation à l'APIopération Autorisations vérifiées IsAuthorized. Notez que le entities segment contient une définition deBob, un utilisateur avec un rôle deEmployee.

{ "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" }