Permite el acceso a los atributos de una entidad (ABAC) - 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.

Permite el acceso a los atributos de una entidad (ABAC)

El control de acceso basado en atributos (ABAC) es una estrategia de autorización que define permisos en función de atributos. Verified Permissions permite adjuntar atributos a las entidades principales, las acciones y los recursos. Después se puede hacer referencia a estos atributos en las cláusulas when y unless de las políticas que evalúan los atributos de las entidades principales, las acciones y los recursos que componen el contexto de la solicitud.

En los ejemplos siguientes se utilizan los atributos definidos en la aplicación hipotética denominada PhotoFlash descrita en la sección de ejemplos de esquemas de la Guía de referencia sobre el lenguaje normativo de Cedar.

En este ejemplo se muestra cómo puede crear una política que permita a cualquier entidad principal del departamento HardwareEngineering con un nivel de trabajo superior o igual a 5 ver y publicar las fotos del álbum device_prototypes.

permit( principal, action in [Action::"listPhotos", Action::"view"], resource in Album::"device_prototypes" ) when { principal.department == "HardwareEngineering" && principal.jobLevel >= 5 };

En este ejemplo, se muestra cómo puede crear una política que permita al usuario alice ver cualquier recurso de tipo de archivo JPEG.

permit( principal == User::"alice", action == Action::"view", resource ) when { resource.fileType == "JPEG" };

Las acciones tienen atributos de contexto. Debe incluir estos atributos en una solicitud context de autorización. En este ejemplo se muestra cómo se puede crear una política que permita alice al usuario realizar cualquier readOnly acción. También puede establecer una appliesTo propiedad para las acciones del esquema. Esto especifica las acciones válidas para un recurso cuando se quiere garantizar que, por ejemplo, los usuarios solo puedan intentar autorizar ViewPhoto un recurso de ese tipoPhotoFlash::Photo.

permit( principal == PhotoFlash::User::"alice", action, resource ) when { context has readOnly && context.readOnly == true };

Sin embargo, una forma mejor de establecer las propiedades de las acciones del esquema es organizarlas en grupos de acciones funcionales. Por ejemplo, puede crear una acción con el nombre de un grupo de acciones ReadOnlyPhotoAccess y PhotoFlash::Action::"ViewPhoto" configurarla ReadOnlyPhotoAccess como miembro. En este ejemplo, se muestra cómo se puede crear una política que conceda a Alice acceso a las acciones de solo lectura de ese grupo.

permit( principal == PhotoFlash::User::"alice", action, resource ) when { action in PhotoFlash::Action::"ReadOnlyPhotoAccess" };

En este ejemplo, se muestra cómo puede crear una política que permita a todas las entidades principales realizar cualquier acción en los recursos para los cuales tengan el atributo owner.

permit( principal, action, resource ) when { principal == resource.owner };

En este ejemplo se muestra cómo puede crear una política que permita a cualquier entidad principal ver cualquier recurso si el atributo department de la entidad principal coincide con el atributo department del recurso.

nota

Si una entidad no tiene un atributo mencionado en una condición de la política, la política se ignorará al tomar una decisión de autorización y la evaluación de esa política fallará para esa entidad. Por ejemplo, esta política no puede conceder acceso a ningún recurso a ninguna entidad principal que no tenga un atributo department.

permit( principal, action == Action::"view", resource ) when { principal.department == resource.owner.department };

En este ejemplo, se muestra cómo puede crear una política que permita a cualquier entidad principal realizar cualquier acción en un recurso si la entidad principal es el owner del recurso O si la entidad principal forma parte del grupo admins del recurso.

permit( principal, action, resource, ) when { principal == resource.owner | resource.admins.contains(principal) };