View a markdown version of this page

Agregar contexto - Amazon Verified Permissions

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Agregar contexto

El contexto es la información que es relevante para las decisiones políticas, pero no forma parte de la identidad del director, la acción o el recurso. Las reclamaciones del token de acceso son de contexto. Es posible que desee permitir una acción solo desde un conjunto de direcciones IP de origen o solo si el usuario ha iniciado sesión con MFA. La aplicación tiene acceso a estos datos contextuales de sesión y debe rellenarlos para las solicitudes de autorización. Los datos de contexto de una solicitud de autorización de permisos verificados deben estar JSON-formatted en un contextMap elemento.

Los ejemplos que ilustran este contenido provienen de un ejemplo de un almacén de políticas. Para continuar, cree el almacén de políticas de DigitalPetStore ejemplo en su entorno de prueba.

El siguiente objeto de contexto declara uno de cada tipo de datos de Cedar para una aplicación en función del almacén de DigitalPetStore políticas de ejemplo.

"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" } } }
Tipos de datos en el contexto de autorización
Booleano

Un binario true o un false valor. En el ejemplo, el valor booleano de true for MfaAuthenticated indica que el cliente ha realizado una autenticación multifactor antes de solicitar la visualización de su pedido.

Establezca

Una colección de elementos de contexto. Los miembros del conjunto pueden ser todos del mismo tipo, como en este ejemplo, o de tipos diferentes, incluido un conjunto anidado. En el ejemplo, el cliente está asociado a 3 cuentas diferentes.

Cadena

Secuencia de letras, números o símbolos encerrados en " caracteres. En el ejemplo, la UserAgent cadena representa el navegador que el cliente utilizó para solicitar la visualización de su pedido.

Largo

Un número entero. En el ejemplo, RequestedOrderCount indica que esta solicitud forma parte de un lote que se produjo cuando el cliente solicitó ver cuatro de sus pedidos anteriores.

Registro

Una colección de atributos. Debe declarar estos atributos en el contexto de la solicitud. Un almacén de políticas con un esquema debe incluir esta entidad y los atributos de la entidad en el esquema. En el ejemplo, el NetworkInfo registro contiene información sobre la IP de origen del usuario, la geolocalización de esa IP según lo determine el cliente y el cifrado en tránsito.

EntityIdentifier

Referencia a una entidad y a los atributos declarados en el entities elemento de la solicitud. En el ejemplo, el pedido del usuario fue aprobado por el empleadoBob.

Para probar este contexto de ejemplo en la DigitalPetStore aplicación de ejemplo, debes actualizar tu solicitudentities, tu esquema de almacenamiento de políticas y la política estática con la descripción Customer Role: Get Order.

Modificar DigitalPetStore para aceptar el contexto de autorización

Inicialmente, no DigitalPetStore es un almacén de políticas muy complejo. No incluye políticas ni atributos de contexto preconfigurados para respaldar el contexto que hemos presentado. Para evaluar un ejemplo de solicitud de autorización con esta información de contexto, realiza las siguientes modificaciones en tu almacén de políticas y en tu solicitud de autorización. Para ver ejemplos de contexto con la información de los tokens de acceso como contexto, consulte Mapear los tokens de Amazon Cognito acceso y Mapear los tokens de acceso de OIDC.

Schema

Aplica las siguientes actualizaciones al esquema de tu almacén de políticas para admitir los nuevos atributos de contexto. GetOrderActualízalo de la actions siguiente manera.

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

Para hacer referencia al tipo de record datos mencionado NetworkInfo en el contexto de tu solicitud, crea una construcción CommonType en tu esquema añadiendo anteriormente actions lo siguiente a tu esquema. Una commonType construcción es un conjunto compartido de atributos que puedes aplicar a diferentes entidades.

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

La siguiente política establece las condiciones que deben cumplir cada uno de los elementos de contexto proporcionados. Se basa en la política estática existente con la descripción Customer Role: Get Order. Inicialmente, esta política solo requiere que el principal que hace una solicitud sea el propietario del recurso.

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

Ahora exigimos que la solicitud para recuperar un pedido cumpla con las condiciones de contexto adicionales que agregamos a la solicitud.

  1. El usuario debe haber iniciado sesión con MFA.

  2. El navegador web del usuario User-Agent debe contener la cadenaMy UserAgent.

  3. El usuario debe haber solicitado ver 4 pedidos o menos.

  4. Uno de los códigos de cuenta del usuario debe ser111122223333.

  5. La dirección IP del usuario debe originarse en los Estados Unidos, debe estar en una sesión cifrada y su dirección IP debe empezar por192.0.2..

  6. Un empleado debe haber aprobado su pedido. En el entities elemento de la solicitud de autorización, declararemos a un usuario Bob que tiene la función deEmployee.

Request body

Tras configurar tu almacén de políticas con el esquema y la política adecuados, puedes presentar esta solicitud de autorización a la operación de la API de permisos verificados IsAuthorized. Ten en cuenta que el entities segmento contiene una definición de Bob usuario con un rol 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" }