Consente l'accesso agli attributi di un'entità (ABAC) - Autorizzazioni verificate da Amazon

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Consente l'accesso agli attributi di un'entità (ABAC)

Il controllo dell'accesso basato su attributi (ABAC) è una strategia di autorizzazione che definisce le autorizzazioni in base agli attributi. Le autorizzazioni verificate consentono di allegare attributi a principali, azioni e risorse. È quindi possibile fare riferimento a questi attributi all'interno delle unless clausole when e delle politiche che valutano gli attributi dei principali, delle azioni e delle risorse che costituiscono il contesto della richiesta.

Gli esempi seguenti utilizzano gli attributi definiti nell'applicazione ipotetica denominata PhotoFlash descritta nella sezione Example schema della Cedar Policy Language Reference Guide.

Questo esempio mostra come è possibile creare una politica che consenta a qualsiasi dirigente del HardwareEngineering dipartimento con un livello di mansione maggiore o uguale a 5 di visualizzare ed elencare le foto nell'album. device_prototypes

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

Questo esempio mostra come è possibile creare una politica che alice consenta all'utente di visualizzare qualsiasi risorsa di tipo di fileJPEG.

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

Le azioni hanno attributi di contesto. È necessario passare questi attributi in una richiesta context di autorizzazione. Questo esempio mostra come è possibile creare una politica che alice consenta all'utente di eseguire qualsiasi readOnly azione. È inoltre possibile impostare una appliesTo proprietà per le azioni nello schema. Ciò specifica le azioni valide per una risorsa quando si desidera garantire che, ad esempio, gli utenti possano tentare di ViewPhoto autorizzare solo una risorsa di tipo. PhotoFlash::Photo

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

Un modo migliore per impostare le proprietà delle azioni nello schema, tuttavia, consiste nel disporle in gruppi di azioni funzionali. Ad esempio, è possibile creare un'azione denominata ReadOnlyPhotoAccess e PhotoFlash::Action::"ViewPhoto" impostata come membro ReadOnlyPhotoAccess come gruppo di azioni. Questo esempio mostra come è possibile creare una politica che conceda ad Alice l'accesso alle azioni di sola lettura in quel gruppo.

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

Questo esempio mostra come è possibile creare una politica che consenta a tutti i responsabili di eseguire qualsiasi azione sulle risorse per le quali dispongono di attributi. owner

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

Questo esempio mostra come è possibile creare una politica che consenta a qualsiasi principale di visualizzare qualsiasi risorsa se l'departmentattributo del principale corrisponde all'departmentattributo della risorsa.

Nota

Se un'entità non ha un attributo menzionato in una condizione politica, la politica verrà ignorata quando si prende una decisione di autorizzazione e la valutazione di tale politica avrà esito negativo per quell'entità. Ad esempio, a qualsiasi principale che non dispone di un department attributo non può essere concesso l'accesso a nessuna risorsa in base a questa politica.

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

Questo esempio mostra come è possibile creare una politica che consenta a qualsiasi principale di eseguire qualsiasi azione su una risorsa se il principale è il responsabile owner della risorsa OPPURE se il principale fa parte del admins gruppo della risorsa.

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