Exemplo 2: RBAC básico com permissões verificadas e Cedar - AWS Orientação prescritiva

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Exemplo 2: RBAC básico com permissões verificadas e Cedar

Este exemplo usa Permissões Verificadas e Cedar para demonstrar o RBAC básico. Conforme mencionado anteriormente, a construção básica do Cedar é uma entidade. Os desenvolvedores definem suas próprias entidades e, opcionalmente, podem criar relacionamentos entre entidades. O exemplo a seguir inclui três tipos de entidades: UsersRoles, Problems e. Studentse Teachers podem ser consideradas entidades do tipo Role, e cada uma User pode ser associada a zero ou a qualquer uma dasRoles.

Exemplo de uma implementação básica de RBAC com Amazon Verified Permissions e Cedar para implementar um PDP

Em Cedar, essas relações são expressas vinculando o Role Student ao User Bob como seu pai. Essa associação agrupa logicamente todos os usuários estudantes em um grupo. Para obter mais informações sobre agrupamento no Cedar, consulte a documentação do Cedar.

A política a seguir avalia a decisão ALLOW da ação submitProblem, para todos os diretores vinculados ao grupo lógico Students do tipo. Role

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

A política a seguir avalia a decisão ALLOW da ação submitProblem ouanswerProblem, de todos os diretores vinculados ao grupo lógico Teachers do tipo. Role

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

Para avaliar solicitações com essas políticas, o mecanismo de avaliação precisa saber se o principal referenciado na solicitação de autorização é membro do grupo apropriado. Portanto, o aplicativo deve passar informações relevantes de associação ao grupo para o mecanismo de avaliação como parte da solicitação de autorização. Isso é feito por meio da entities propriedade, que permite que você forneça ao mecanismo de avaliação do Cedar dados de atributo e associação ao grupo para o principal e o recurso envolvido na chamada de autorização. No código a seguir, a associação ao grupo é indicada pela definição User::"Bob" de ter um pai chamadoRole::"Students".

{ "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": [] } ] } }

Neste exemplo, Bob é o usuário logado que faz a answerProblem solicitação. Portanto, Bob é o principal e a entidade é do tipoUser. A ação que Bob está tentando realizar éanswerProblem. Para avaliar se Bob pode realizar a answerProblem ação, você precisa fornecer uma estrutura de entidade que vincule a entidade User a um valor de Bob e atribua sua associação ao grupo listando uma entidade mãe comoRole::"Students". Como as entidades do grupo Role::"Students" de usuários só podem realizar a açãosubmitProblem, essa solicitação de autorização é avaliada como. DENY

Por outro lado, se o tipo User que tem um valor de Alice e faz parte do grupo Role::"Teachers" tentar realizar a answerProblem ação, a solicitação de autorização será avaliadaALLOW, pois a política determina que os diretores do grupo Role::"Teachers" tenham permissão para realizar a ação answerProblem em todos os recursos. O código a seguir mostra esse tipo de solicitação de autorização que avalia 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": [] } ] } }