Añadir 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.

Añadir contexto

El contexto es la información relevante para las decisiones políticas, pero no forma parte de la identidad del director, la acción o el recurso. 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. Su aplicación tiene acceso a estos datos de sesión contextuales y debe rellenarlos para las solicitudes de autorización. Los datos de contexto de una solicitud de autorización de permisos verificados deben tener formato JSON en un elemento. contextMap

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

El siguiente objeto de contexto declara uno de cada tipo de datos de Cedar para una aplicación según el almacén de DigitalPetStorepolíticas de muestra.

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

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

Establezca

Colección de elementos contextuales. 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 entre " caracteres. En el ejemplo, la UserAgent cadena representa el navegador que el cliente utilizó para solicitar ver su pedido.

Largo

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

Registro

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 determinada por el cliente y el cifrado en tránsito.

EntityIdentifier

Una referencia a una entidad y a los atributos declarados en el entities elemento de la solicitud. En el ejemplo, el empleado aprobó el pedido del usuarioBob.

Para probar este contexto de ejemplo en la DigitalPetStoreaplicación de ejemplo, debes actualizar tu solicitudentities, el esquema del almacén 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 DigitalPetStorees 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 contextual, realice las siguientes modificaciones en su almacén de políticas y en su solicitud de autorización.

Schema

Aplique las siguientes actualizaciones al esquema del almacén de políticas para admitir los nuevos atributos de contexto. Actualice GetOrder de actions la siguiente manera.

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

Para hacer referencia al tipo de record datos mencionado NetworkInfo en el contexto de la solicitud, cree una construcción CommonType en el esquema de la siguiente manera. Una commonType construcción es un conjunto compartido de atributos que se pueden aplicar a distintas entidades.

nota

El editor de esquemas visuales de permisos verificados actualmente no admite commonType construcciones. Al añadirlos al esquema, ya no podrá ver el esquema en modo visual.

"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 debe 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 realiza una solicitud sea el propietario del recurso.

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

Ahora exigimos que la solicitud de recuperación de un pedido cumpla con las condiciones de contexto adicionales que añadimos 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 tener su origen 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 un usuario Bob que tiene la función deEmployee.

Request body

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