Uma implementação ABAC é mais complexa que o ACL / RBAC. Algumas estruturas fornecem até alguns bits de infraestrutura para lidar com esta última. Se as pessoas e os ativos puderem ser agrupados em um número relativamente pequeno e fixo de funções / categorias, provavelmente será melhor manter a ACL / RBAC. Se as permissões diferirem amplamente de pessoa para pessoa, o ABAC poderá fornecer uma solução melhor e mais flexível.
Se você optar por seguir o caminho ABAC, a primeira coisa a fazer é gastar algum tempo lendo e compreendendo o padrão XACML . Os exemplos fornecidos no documento usam sintaxe compatível com XACML e são um pouco difíceis de mastigar no início. Suponho que você não queira implementar uma solução compatível padrão, portanto, você só precisa das idéias gerais.
Conceitos
O XACML gira em torno de quatro conceitos e seus atributos: assuntos , ações , recursos e ambiente . Existem mais alguns, mas estes são os mais importantes. Tudo o resto é construído em cima deles. Se eu fosse fazer uma frase com esses conceitos, poderia ser algo como: sujeitos realizam ações sobre recursos em um determinado ambiente . A aplicação disso ao seu cenário se traduziria em algo como:
- Leslie abre a página da web do gerenciador de preços.
- Leslie cria um preço de viagem usando a página da web do gerenciador de preços.
Coleção de atributos
A primeira coisa que precisamos fazer é reunir os atributos relevantes dos conceitos declarados acima. Idealmente, você não deve atribuir nenhum atributo específico, pois o XACML tenta ser discreto e confiar apenas no que o sistema fornece naturalmente. E assim temos:
Sujeito
Qualquer ator, seja uma pessoa ou um serviço, em seu sistema. Nosso assunto é Leslie. Quais atributos são necessários para identificar Leslie de forma exclusiva? Provavelmente alguns dos seguintes: first name
, last name
, e-mail
, ssn
, company id
, position(s)
.
Açao
Qualquer ação realizada pelos sujeitos. Podem ser as operações CRUD padrão ou algo mais complexo. Nossas ações são open/view
e create
. Os atributos para essas ações podem ser diferentes com base na estrutura de aplicativos da web que você está usando. Falaremos mais sobre isso quando chegarmos ao recurso.
Recurso
Bastante auto-explicativo. Nossos recursos são os price manager page
, travel prices
e the newly created price
. Poderia haver mais, se você realmente quiser. Você pode ocultar ações que os usuários não podem executar. Por exemplo. o create price button
pode ser um recurso que pode ser mostrado / oculto com base no fato de o usuário ter permissões para criar preços. Como a única maneira de um usuário ver uma lista de preços pode ser através desta página, provavelmente seria uma boa ideia impor a autorização nesse nível, em vez de descer mais a pilha.
O acesso aos recursos é o mais complicado de implementar, especialmente os que vêm de um banco de dados. A opção mais refinada é a segurança no nível da linha. Alguns bancos de dados têm um certo grau de suporte. Alguns implementadores XACML chegaram ao ponto de criar um superconjunto SQL. Isso realmente depende das suas necessidades de autorização, mas a única coisa que você não quer fazer é extrair tudo de uma tabela e depois decidir o que mostrar. Você pode agrupar recursos por conjuntos de permissões, abstraí-los por trás de uma API e impor autorização nos terminais da API.
Meio Ambiente
Não posso defini-lo corretamente (XACML também não tem uma definição adequada), mas digamos que é a "bolha" na qual tudo isso acontece. Isto inclui: web application
, web server
, operating system
, browser
, office
. Você poderia extrair atributos como: ip address
, time of day
, user locale
, user agent
, operating system version
. Você pode usá-los para bloquear o acesso do usuário a ambientes não suportados pelo seu aplicativo (por exemplo, navegadores antigos, sistemas operacionais antigos, computadores fora da rede, acesso fora do horário comercial).
Pedido de autorização
Depois de reunir todos os atributos necessários, agrupamos-os em uma solicitação de autorização e a encaminhamos para uma entidade que pode tomar decisões de autorização com base nos valores desses atributos. Na linguagem XACML, o local em que você coleta esses atributos e aplica as decisões tomadas em seguida é chamado de ponto de aplicação de política (PEP) e o ponto de tomada de decisões é chamado de ponto de decisão de política (PDP). Os locais dos quais os valores dos atributos são obtidos são chamados PIP ( Policy Information Point s). PEPs, PDPs e PIPs podem fazer parte da sua aplicação, pois podem ser sistemas externos. Você pode encontrar um diagrama de como eles se comunicam no padrão XACML.
Processo de decisão
O processo de tomada de decisão é baseado em regras . As regras podem ser agrupadas em políticas que podem ser agrupadas em conjuntos de políticas . Cada um deles tem um alvo . O destino é usado para decidir se alguma das regras se aplica à solicitação de autorização. Pense nisso como um filtro. O destino contém condições criadas usando nomes e valores de atributos. Por exemplo, as regras para o seu aplicativo podem ser agrupadas em algo como:
Aplicativo da Web (conjunto de políticas)
| - target: application-name == "Aplicativo da Web"
`- Versão 1.0 (conjunto de políticas)
| - target: application-version == "1.0"
`- Ver gerente de preços (política)
| - target: nome da página da web == "gerente de preços" && nome da ação == "visualizar"
`- Leslie pode ver o gerente de preços (regra)
| - target: subject-name == "Leslie"
`- permissão: permitir
O PDP corresponderá a tudo no conjunto acima com os valores de atributo na solicitação de autorização. O que acontece se não houver regras correspondentes, depende da implementação do seu PDP. Uma vez que o PDP tomou uma decisão ( allow
, deny
ou not-applicable
) que envia de volta para o PEP, que age sobre ela por conceder ou negar o acesso ao recurso. Juntamente com a resposta, o PDP pode enviar uma lista obligations
e advices
que o PEP deve ou deve cumprir no processo de execução. Dependendo de como as regras são armazenadas (arquivos de texto ou banco de dados), um administrador pode usar um editor de texto padrão ou um aplicativo de edição personalizado para alterá-las conforme desejar. A revogação do acesso de Leslie ao gerente de preços é retomada simplesmente mudando a permissão de allow
paradeny
, concedido o PEP faz o seu trabalho.
Execução
Isso depende muito da sua pilha de tecnologia. Algumas estruturas da Web têm pontos de imposição naturais (por exemplo, o ASP.NET MVC possui filtros de atributo). Suas camadas de negócios podem precisar definir esses pontos de aplicação. Achei mais fácil aplicar a aplicação nos pontos de extremidade de serviço (pense em microsserviços) ou no nível da interface do usuário.
Outros benefícios
Um bom efeito colateral da implementação disso é que você acaba com uma trilha de auditoria bastante rica que pode ser usada para outros fins.