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 qui est 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 réclamations relatives aux 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é avec MFA. Votre application a accès à ces données de session contextuelles et doit les renseigner lors des demandes d'autorisation. Les données contextuelles d'une demande d'autorisation Verified Permissions doivent figurer JSON-formatted dans un contextMap élément.
Les exemples illustrant ce contenu proviennent d'un exemple de magasin de politiques. Pour suivre, créez l'DigitalPetStoreexemple de magasin de règles dans votre environnement de test.
L'objet de contexte suivant déclare l'un de chaque type de données Cedar pour une application en fonction de l'exemple de magasin DigitalPetStore de politiques.
"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"
}
}
}
Types de données dans un contexte d'autorisation
- 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és 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 précédentes.
- Record
-
Un ensemble 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 les attributs de l'entité 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 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'DigitalPetStoreapplication d'exemple, vous devez mettre à jour votre demandeentities, le schéma de votre magasin de politiques et la politique statique avec la description Rôle du client - Obtenir la commande.
Modifier DigitalPetStore pour accepter le contexte d'autorisation
Au départ, DigitalPetStore ce n'est pas un magasin de polices très complexe. Il n'inclut aucune politique préconfigurée ni aucun attribut de contexte pour prendre en charge le contexte que nous avons présenté. Pour évaluer un exemple de demande d'autorisation à l'aide de ces informations contextuelles, apportez les modifications suivantes à votre magasin de politiques et à votre demande d'autorisation. Pour des exemples de contexte utilisant les informations relatives aux jetons d'accès comme contexte, consultez Mappage des jetons Amazon Cognito d'accès et Mappage des jetons d'accès OIDC.
- Schema
-
Appliquez les mises à jour suivantes au schéma de votre magasin de politiques afin de prendre en charge les nouveaux attributs de contexte. Mettez GetOrder à jour actions comme suit.
"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"
]
}
}
Pour référencer le type de record données nommé NetworkInfo dans le contexte de votre demande, créez une construction commonType dans votre schéma en ajoutant ce qui suit à votre schéma au préalableactions. Une commonType construction est un ensemble partagé d'attributs que vous pouvez appliquer à différentes entités.
"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. Elle s'appuie sur la politique statique existante avec la description Rôle du client - Get Order. Cette politique exige initialement 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.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*"
};
Nous exigeons désormais que la demande de récupération d'une commande réponde aux conditions contextuelles supplémentaires que nous avons ajoutées à la demande.
-
L'utilisateur doit s'être connecté avec MFA.
-
Le navigateur Web de l'utilisateur User-Agent doit contenir la chaîneMy UserAgent.
-
L'utilisateur doit avoir demandé à consulter 4 commandes ou moins.
-
L'un des codes de compte de l'utilisateur doit être111122223333.
-
L'adresse IP de l'utilisateur doit provenir des États-Unis, sa session doit être cryptée et son adresse IP doit commencer par192.0.2..
-
Un employé doit avoir approuvé sa commande. Dans l'entitiesélément de la demande d'autorisation, nous allons déclarer un utilisateur Bob ayant le rôle deEmployee.
- Request body
-
Après avoir configuré votre magasin de politiques avec le schéma et la stratégie appropriés, vous pouvez présenter cette demande d'autorisation à l'opération de l'API Verified Permissions IsAuthorized. Notez que le entities segment contient une définition deBob, un utilisateur ayant un rôle deEmployee.
{
"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"
}