Exemplo 3: Controle de acesso multilocatário para RBAC e ABAC com OPA e Rego - 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 3: Controle de acesso multilocatário para RBAC e ABAC com OPA e Rego

Para aprimorar o exemplo de RBAC na seção anterior, você pode adicionar atributos aos usuários.

OPA use case for multi-tenant access with user attributes

Esse exemplo inclui as mesmas funções do exemplo anterior, mas adiciona o atributo de usuárioaccount_lockout_flag. Esse é um atributo específico do usuário que não está associado a nenhuma função específica. Você pode usar os mesmos dados externos do RBAC usados anteriormente neste exemplo:

{ "roles": { "tenant_a": { "all_access_role": ["viewData", "updateData"] }, "tenant_b": { "update_data_role": ["updateData"], "view_data_role": ["viewData"] } } }

O atributoaccount_lockout_flag do usuário pode ser passado para o serviço de dados como parte da entrada de uma consulta OPA/viewData/tenant_a para o usuário Bob:

{ "tenant_id": "tenant_a", "role": "all_access_role", "path": ["viewData", "tenant_a"], "method": "GET", "account_lockout_flag": "true" }

A regra que é consultada para a decisão de acesso é semelhante aos exemplos anteriores, mas inclui uma linha adicional para verificar oaccount_lockout_flag atributo:

default allowViewData = false allowViewData = true { input.method == "GET" input.path = ["viewData", tenant_id] input.tenant_id == tenant_id role_permissions := data.roles[input.tenant_id][input.role][_] contains(role_permissions, "viewData") input.account_lockout_flag == "false" }

Essa consulta retorna uma decisão de autorização defalse. Isso ocorre porque oaccount_lockout_flag atributo étrue para Bob, e a regra RegoallowViewData nega o acesso, embora Bob tenha a função e o inquilino corretos.