View a markdown version of this page

Aggiungere un contesto - 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à.

Aggiungere un contesto

Il contesto è l'informazione rilevante per le decisioni politiche, ma non fa parte dell'identità del responsabile, dell'azione o della risorsa. Le dichiarazioni dei token di accesso sono contestuali. Potresti voler consentire un'azione solo da un set di indirizzi IP di origine o solo se l'utente ha effettuato l'accesso con MFA. L'applicazione ha accesso a questi dati contestuali della sessione e deve inserirli nelle richieste di autorizzazione. I dati di contesto in una richiesta di autorizzazione con autorizzazioni verificate devono essere contenuti JSON-formatted in un elemento. contextMap

Gli esempi che illustrano questo contenuto provengono da un esempio di policy store. A seguire, create il policy store DigitalPetStore di esempio nel vostro ambiente di test.

Il seguente oggetto di contesto dichiara uno di ciascun tipo di dati Cedar per un'applicazione in base al DigitalPetStore policy store di esempio.

"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" } } }
Tipi di dati nel contesto dell'autorizzazione
Booleano

Un binario true o un false valore. Nell'esempio, il valore booleano di true for MfaAuthenticated indica che il cliente ha eseguito l'autenticazione a più fattori prima di richiedere la visualizzazione del proprio ordine.

Imposta

Una raccolta di elementi di contesto. I membri del set possono essere tutti dello stesso tipo, come in questo esempio, o di tipi diversi, incluso un set annidato. Nell'esempio, il cliente è associato a 3 account diversi.

Stringa

Una sequenza di lettere, numeri o simboli racchiusi in " caratteri. Nell'esempio, la UserAgent stringa rappresenta il browser utilizzato dal cliente per richiedere di visualizzare il proprio ordine.

Long

Come un intero, Nell'esempio, RequestedOrderCount indica che questa richiesta fa parte di un batch risultante dalla richiesta del cliente di visualizzare quattro dei suoi ordini precedenti.

Registra

Una raccolta di attributi. È necessario dichiarare questi attributi nel contesto della richiesta. Un policy store con uno schema deve includere questa entità e gli attributi dell'entità nello schema. Nell'esempio, il NetworkInfo record contiene informazioni sull'IP di origine dell'utente, sulla geolocalizzazione di tale IP determinata dal client e sulla crittografia in transito.

EntityIdentifier

Un riferimento a un'entità e agli attributi dichiarati nell'entitieselemento della richiesta. Nell'esempio, l'ordine dell'utente è stato approvato dal dipendenteBob.

Per testare questo contesto di esempio nell'DigitalPetStoreapp di esempio, è necessario aggiornare la richiestaentities, lo schema del policy store e la politica statica con la descrizione Customer Role - Get Order.

Modifica DigitalPetStore per accettare il contesto di autorizzazione

Inizialmente, non DigitalPetStore è un archivio di politiche molto complesso. Non include politiche preconfigurate o attributi di contesto per supportare il contesto che abbiamo presentato. Per valutare un esempio di richiesta di autorizzazione con queste informazioni di contesto, apportate le seguenti modifiche al policy store e alla richiesta di autorizzazione. Per esempi di contesto con informazioni sui token di accesso come contesto, vedete Mappatura dei token di Amazon Cognito accesso e Mappatura dei token di accesso OIDC.

Schema

Applica i seguenti aggiornamenti allo schema del policy store per supportare i nuovi attributi di contesto. GetOrderEffettua l'aggiornamento actions come segue.

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

Per fare riferimento al tipo di record dati indicato NetworkInfo nel contesto della richiesta, create un costrutto CommonType nello schema aggiungendo quanto segue allo schema precedente. actions Un commonType costrutto è un insieme condiviso di attributi che è possibile applicare a diverse entità.

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

La seguente politica stabilisce le condizioni che devono essere soddisfatte da ciascuno degli elementi di contesto forniti. Si basa sulla politica statica esistente con la descrizione Customer Role - Get Order. Questa politica richiede inizialmente solo che il committente che effettua una richiesta sia il proprietario della risorsa.

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

Ora abbiamo richiesto che la richiesta di recupero di un ordine soddisfi le condizioni di contesto aggiuntive che abbiamo aggiunto alla richiesta.

  1. L'utente deve aver effettuato l'accesso con MFA.

  2. Il browser web dell'utente User-Agent deve contenere la stringaMy UserAgent.

  3. L'utente deve aver richiesto di visualizzare 4 o meno ordini.

  4. Uno dei codici di account dell'utente deve essere111122223333.

  5. L'indirizzo IP dell'utente deve provenire dagli Stati Uniti, deve appartenere a una sessione crittografata e il suo indirizzo IP deve iniziare con192.0.2..

  6. Un dipendente deve aver approvato il proprio ordine. Nell'entitieselemento della richiesta di autorizzazione, dichiareremo un utente Bob che ha il ruolo diEmployee.

Request body

Dopo aver configurato il policy store con lo schema e la policy appropriati, puoi presentare questa richiesta di autorizzazione all'operazione API Verified Permissions. IsAuthorized Nota che il entities segmento contiene una definizione diBob, un utente con un ruolo diEmployee.

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