Esempio 2: RBAC di base con autorizzazioni verificate e Cedar - AWS Guida prescrittiva

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à.

Esempio 2: RBAC di base con autorizzazioni verificate e Cedar

Questo esempio utilizza Verified Permissions e Cedar per dimostrare l'RBAC di base. Come accennato in precedenza, il costrutto base di Cedar è un'entità. Gli sviluppatori definiscono le proprie entità e possono facoltativamente creare relazioni tra le entità. L'esempio seguente include tre tipi di entità: UsersRoles, eProblems. Studentse Teachers possono essere considerate entità del tipo Role, e ciascuna User può essere associata a zero o a uno qualsiasi deiRoles.

Esempio di implementazione RBAC di base con Amazon Verified Permissions e Cedar per implementare un PDP

In Cedar, queste relazioni vengono espresse collegando il a come elemento principale. Role Student User Bob Questa associazione raggruppa logicamente tutti gli utenti studenti in un unico gruppo. Per ulteriori informazioni sul raggruppamento in Cedar, consulta la documentazione di Cedar.

La seguente politica valuta la decisione relativa all'azione ALLOW submitProblem, per tutti i principali collegati al gruppo logico del tipo. Students Role

permit ( principal in ElearningApp::Role::"Students", action == ElearningApp::Action::"submitProblem", resource );

La seguente politica si riferisce alla decisione ALLOW relativa all'azione submitProblem o answerProblem a tutti i principali collegati al gruppo Teachers logico del tipo. Role

permit ( principal in ElearningApp::Role::"Teachers", action in [ ElearningApp::Action::"submitProblem", ElearningApp::Action::"answerProblem" ], resource );

Per valutare le richieste con queste politiche, il motore di valutazione deve sapere se il principale a cui si fa riferimento nella richiesta di autorizzazione fa parte del gruppo appropriato. Pertanto, l'applicazione deve trasmettere le informazioni pertinenti sull'appartenenza al gruppo al motore di valutazione come parte della richiesta di autorizzazione. Ciò avviene tramite la entities proprietà, che consente di fornire al motore di valutazione Cedar i dati sugli attributi e sull'appartenenza al gruppo per il principale e la risorsa coinvolte nella chiamata di autorizzazione. Nel codice seguente, l'appartenenza al gruppo viene indicata definendo User::"Bob" come la chiamata Role::"Students" di un genitore.

{ "policyStoreId": "ELEARNING_POLICYSTOREID", "principal": { "entityType": "ElearningApp::User", "entityId": "Bob" }, "action": { "actionType": "ElearningApp::Action", "actionId": "answerProblem" }, "resource": { "entityType": "ElearningApp::Problem", "entityId": "SomeProblem" }, "entities": { "entityList": [ { "identifier": { "entityType": "ElearningApp::User", "entityId": "Bob" }, "attributes": {}, "parents": [ { "entityType": "ElearningApp::Role", "entityId": "Students" } ] }, { "identifier": { "entityType": "ElearningApp::Problem", "entityId": "SomeProblem" }, "attributes": {}, "parents": [] } ] } }

In questo esempio, Bob è l'utente connesso che effettua la answerProblem richiesta. Pertanto, Bob è il principale e l'entità è del tipoUser. L'azione che Bob sta cercando di eseguire èanswerProblem. Per valutare se Bob è in grado di eseguire l'answerProblemazione, è necessario fornire una struttura di entità che colleghi l'entità User con un valore di Bob e le assegni l'appartenenza al gruppo elencando un'entità principale comeRole::"Students". Poiché le entità del gruppo di utenti Role::"Students" sono autorizzate solo a eseguire l'azionesubmitProblem, questa richiesta di autorizzazione restituisce un risultato positivo. DENY

D'altra parte, se il tipo User che ha un valore pari a Alice e fa parte del gruppo Role::"Teachers" tenta di eseguire l'answerProblemazione, la richiesta di autorizzazione restituisce lo stesso risultatoALLOW, poiché la politica impone che i responsabili del gruppo Role::"Teachers" siano autorizzati a eseguire l'azione answerProblem su tutte le risorse. Il codice seguente mostra questo tipo di richiesta di autorizzazione che restituisce a. ALLOW

{ "policyStoreId": "ELEARNING_POLICYSTOREID", "principal": { "entityType": "ElearningApp::User", "entityId": "Alice" }, "action": { "actionType": "ElearningApp::Action", "actionId": "answerProblem" }, "resource": { "entityType": "ElearningApp::Problem", "entityId": "SomeProblem" }, "entities": { "entityList": [ { "identifier": { "entityType": "ElearningApp::User", "entityId": "Alice" }, "attributes": {}, "parents": [ { "entityType": "ElearningApp::Role", "entityId": "Teachers" } ] }, { "identifier": { "entityType": "ElearningApp::Problem", "entityId": "SomeProblem" }, "attributes": {}, "parents": [] } ] } }