Exemplo 1: ABAC básico com permissões verificadas e cedro - 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 1: ABAC básico com permissões verificadas e cedro

Neste cenário de exemplo, as Permissões Verificadas da Amazon são usadas para determinar quais usuários têm permissão para acessar informações em um microsserviço fictício de folha de pagamento. Esta seção inclui trechos de código do Cedar para demonstrar como você pode usar o Cedar para processar decisões de controle de acesso. Esses exemplos não têm como objetivo fornecer uma exploração completa dos recursos fornecidos pelo Cedar e pelo Verified Permissions. Para uma visão geral mais completa do Cedar, consulte a documentação do Cedar.

No diagrama a seguir, gostaríamos de aplicar duas regras gerais de negócios associadas ao viewSalary GET método: os funcionários podem ver seu próprio salário e os funcionários podem ver o salário de qualquer pessoa que se reporte a eles. Você pode aplicar essas regras de negócios usando políticas de permissões verificadas.

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

Os funcionários podem ver seu próprio salário.

Em Cedar, a construção básica é uma entidade, que representa um principal, uma ação ou um recurso. Para fazer uma solicitação de autorização e iniciar uma avaliação com uma política de permissões verificadas, você precisa fornecer um principal, uma ação, um recurso e uma lista de entidades.

  • O principal (principal) é o usuário ou função logado.

  • A ação (action) é a operação que é avaliada pela solicitação.

  • O recurso (resource) é o componente que a ação está acessando.

  • A lista de entidades (entityList) contém todas as entidades necessárias para avaliar a solicitação.

Para satisfazer a regra de negócios, os funcionários podem ver seu próprio salário, você pode fornecer uma política de permissões verificadas, como a seguinte.

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

Essa política avalia ALLOW se o Action é viewSalary e o recurso na solicitação têm um proprietário de atributo igual ao principal. Por exemplo, se Bob for o usuário conectado que solicitou o relatório salarial e também for o proprietário do relatório salarial, a política será avaliada como. ALLOW

A solicitação de autorização a seguir é enviada às Permissões verificadas para ser avaliada pelo exemplo de política. Neste exemplo, Bob é o usuário logado que faz a viewSalary solicitação. Portanto, Bob é o principal do tipo de entidadeEmployee. A ação que Bob está tentando realizar é viewSalary, e o recurso que viewSalary será exibido é Salary-Bob com o tipoSalary. Para avaliar se Bob pode visualizar o Salary-Bob recurso, você precisa fornecer uma estrutura de entidade que vincule o tipo Employee com um valor de Bob (o principal) ao atributo proprietário do recurso que tem o tipoSalary. Você fornece essa estrutura em umentityList, em que os atributos associados Salary incluem um proprietário, que especifica um entityIdentifier que contém o tipo Employee e o valorBob. As permissões verificadas comparam o principal fornecido na solicitação de autorização com o owner atributo associado ao Salary recurso para tomar uma decisão.

{ "policyStoreId": "PAYROLLAPP_POLICYSTOREID", "principal": { "entityType": "PayrollApp::Employee", "entityId": "Bob" }, "action": { "actionType": "PayrollApp::Action", "actionId": "viewSalary" }, "resource": { "entityType": "PayrollApp::Salary", "entityId": "Salary-Bob" }, "entities": { "entityList": [ { "identifier": { "entityType": "PayrollApp::Salary", "entityId": "Salary-Bob" }, "attributes": { "owner": { "entityIdentifier": { "entityType": "PayrollApp::Employee", "entityId": "Bob" } } } }, { "identifier": { "entityType": "PayrollApp::Employee", "entityId": "Bob" }, "attributes": {} } ] } }

A solicitação de autorização para Permissões verificadas retorna o seguinte como saída, em que o atributo decision é ALLOW ouDENY.

{ "determiningPolicies": [ { "determiningPolicyId": "PAYROLLAPP_POLICYSTOREID" } ], "decision": "ALLOW", "errors": [] }

Nesse caso, como Bob estava tentando ver seu próprio salário, a solicitação de autorização enviada para Permissões verificadas é avaliada como. ALLOW No entanto, nosso objetivo era usar as Permissões Verificadas para aplicar duas regras de negócios. A regra de negócios que afirma o seguinte também deve ser verdadeira:

Os funcionários podem ver o salário de qualquer pessoa que se reporte a eles.

Para satisfazer essa regra de negócios, você pode fornecer outra política. A política a seguir avalia ALLOW se a ação é viewSalary e se o recurso na solicitação tem um atributo owner.manager igual ao principal. Por exemplo, se Alice for a usuária conectada que solicitou o relatório salarial e Alice for a gerente do proprietário do relatório, a política será avaliada como. ALLOW

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

A solicitação de autorização a seguir é enviada às Permissões verificadas para ser avaliada pelo exemplo de política. Neste exemplo, Alice é a usuária logada que faz a viewSalary solicitação. Portanto, Alice é a principal e a entidade é do tipoEmployee. A ação que Alice está tentando realizar éviewSalary, e o recurso que viewSalary será exibido é do tipo Salary com um valor deSalary-Bob. Para avaliar se Alice pode visualizar o Salary-Bob recurso, você precisa fornecer uma estrutura de entidade que vincule o tipo Employee a um valor de Alice ao manager atributo, que deve então ser associado ao owner atributo do tipo Salary com um valor deSalary-Bob. Você fornece essa estrutura em umentityList, em que os atributos associados Salary incluem um proprietário, que especifica um entityIdentifier que contém o tipo Employee e o valorBob. As permissões verificadas primeiro verificam o owner atributo, que avalia o tipo Employee e o valorBob. Em seguida, as Permissões verificadas avaliam o manager atributo associado Employee e o comparam com o principal fornecido para tomar uma decisão de autorização. Nesse caso, a decisão é ALLOW porque os resource.owner.manager atributos principal e são equivalentes.

{ "policyStoreId": "PAYROLLAPP_POLICYSTOREID", "principal": { "entityType": "PayrollApp::Employee", "entityId": "Alice" }, "action": { "actionType": "PayrollApp::Action", "actionId": "viewSalary" }, "resource": { "entityType": "PayrollApp::Salary", "entityId": "Salary-Bob" }, "entities": { "entityList": [ { "identifier": { "entityType": "PayrollApp::Employee", "entityId": "Alice" }, "attributes": { "manager": { "entityIdentifier": { "entityType": "PayrollApp::Employee", "entityId": "None" } } }, "parents": [] }, { "identifier": { "entityType": "PayrollApp::Salary", "entityId": "Salary-Bob" }, "attributes": { "owner": { "entityIdentifier": { "entityType": "PayrollApp::Employee", "entityId": "Bob" } } }, "parents": [] }, { "identifier": { "entityType": "PayrollApp::Employee", "entityId": "Bob" }, "attributes": { "manager": { "entityIdentifier": { "entityType": "PayrollApp::Employee", "entityId": "Alice" } } }, "parents": [] } ] } }

Até agora, neste exemplo, fornecemos as duas regras de negócios associadas ao viewSalary método: os funcionários podem ver seu próprio salário e os funcionários podem ver o salário de qualquer pessoa que se reporte a eles. As permissões verificadas são políticas para satisfazer as condições de cada regra de negócios de forma independente. Você também pode usar uma única política de Permissões Verificadas para satisfazer as condições de ambas as regras de negócios:

Os funcionários podem ver seu próprio salário e o salário de qualquer pessoa que se reporte a eles.

Quando você usa a solicitação de autorização anterior, a política a seguir avalia ALLOW se a ação é viewSalary e se o recurso na solicitação tem um atributo owner.manager igual ao principal ou um atributo owner igual aoprincipal.

permit ( principal, action == PayrollApp::Action::"viewSalary", resource ) when { principal == resource.owner.manager || principal == resource.owner };

Por exemplo, se Alice for a usuária conectada que solicita o relatório salarial e se Alice for a gerente do proprietário ou a proprietária do relatório, a política será avaliada como. ALLOW

Para obter mais informações sobre o uso de operadores lógicos com políticas do Cedar, consulte a documentação do Cedar.