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.

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