O que é controle de acesso baseado em função (RBAC)?
Depois que a Uber sofreu um ataque em 2022, em que um invasor conseguiu entrar na rede interna da empresa e acessar as ferramentas dela, o setor chegou a uma conclusão importante: é essencial prevenir os ataques à segurança, e não reagir a eles. Um passo importante que as organizações podem dar nessa direção é aplicar políticas de controle de acesso ao software e sempre auditar os acessos e ações.
Há vários mecanismos de controle de acesso no mercado hoje que ajudam a fazer isso, incluindo o controle de acesso baseado em função (RBAC). Neste artigo, vamos analisar as vantagens do RBAC em termos de operabilidade e segurança, como descobrir como fazer a implementação dele com um esquema e como esse recurso ajuda a manter a conformidade. Também vamos analisar alguns outros mecanismos de controle de acesso para entender como eles funcionam.
O Guia Completo para Construir uma Estratégia de Proteção de Identidade
Comece a adotar uma postura de segurança resiliente: faça download do Guia completo para construir uma estratégia de proteção de identidade para proteger hoje mesmo o panorama de identidade digital da sua organização.
Baixe agoraNoções básicas do RBAC
O controle de acesso baseado em função é um mecanismo para permitir que os usuários acessem determinados recursos com base nas permissões definidas para as funções dessas pessoas. O RBAC tem três componentes principais:
- Funções
- Permissões
- Usuários
Cada função recebe permissões específicas para acessar alguns recursos, e uma determinada função é atribuída a um usuário. Por isso, ao receber uma função, o usuário poderá visualizar e usar tudo que ela tem permissão de acessar.
Esquema de RBAC
As organizações implementam o RBAC com a ajuda de um esquema. Neste esquema fictício baseado em SQL, vamos ver como mapear funções, usuários e permissões. O esquema de banco de dados contém as tabelas e as relações delas. Há cinco tabelas principais necessárias para implementar um esquema de RBAC:
- Users: mantêm o controle de todos os usuários e detalhes básicos
- Permissions: mostra as permissões definidas nos sistemas, que podem ser divididas ainda mais por recurso e ações permitidas no recurso em questão
- Roles: funções definidas no sistema
- User_Roles: mapeamento de funções por usuário para ver todas as funções que um usuário tem (relação de muitos para muitos)
- Role_Permissions: mostra a associação entre as funções e permissões
Com alguns requisitos exclusivos, você pode precisar atribuir algumas permissões diretamente a um usuário. Isso não é recomendado, porque pode proporcionar à sua equipe a capacidade de criar diversas permissões atribuídas diretamente a um usuário. Em alguns casos de uso específicos, se você quiser essa funcionalidade, basta criar outra tabela (“User_Permissions”), para associar permissões aos usuários.
Com essas cinco ou seis tabelas, é possível criar uma função que verifica a autorização automaticamente para você. Confira abaixo uma função fictícia para verificar as permissões:
function check_permissions(user, permissions):user_role = get_role(user)
user_permissions = user_role.get_permissions()
if permissions in user_permissions:
Return “allowed”
else:
Return “Not allowed”
A definição de permissões nesse caso varia de acordo com a implementação. Uma implementação pode ser baseada em permissões de objetos, como “profile-edit”, em que o usuário pode editar o perfil.
Também vale a pena implementar a hierarquia de funções. Isso significa que uma função pode ter outras diferentes, e as leis serão resolvidas a partir desses papéis. Nesses casos, a implementação é um pouco complicada. Você precisa de dois nomes de campo: “is_parent_role” e “child_roles”. Se preferir, crie outra tabela para esse mapeamento.
Importância do controle de acesso baseado em função
O controle de acesso baseado em função padroniza o processo de concessão de permissões aos usuários para executar ou realizar tarefas operacionais. As vantagens do RBAC incluem:
- Menos trabalho redundante: como você tem funções definidas, basta atribuir uma ao usuário para que ele receba as permissões adequadas. Caso contrário, você precisaria adicionar cada permissão manualmente para todos os usuários.
- Maior segurança: como uma equipe centralizada fica responsável por definir essas funções, o RBAC é menos suscetível a erros e mais fácil de gerenciar. Com funções definidas, você também tem menos chances de que permissões ruins sejam concedidas por engano.
- Fácil de auditar: com funções predefinidas, você precisa fazer menos alterações nas definições e atribuições de funções. Isso significa que as auditorias são mais simples em comparação com a atribuição de permissões a cada usuário.
- Requisitos de conformidade: implementar o controle de acesso ajuda a cumprir os regulamentos de conformidade, o que é sempre um aspecto importante da segurança.
Práticas recomendadas de RBAC
Uma única implementação ruim pode prejudicar o sistema mais seguro. Portanto, seguir as práticas recomendadas é muito importante.
Escreva informações detalhadas para cada função e o que ela deve fazer. Inclua uma coluna de anotação na tabela de funções para definir o uso de cada função e por que ela foi criada. Evite criar funções sem motivo: em vez disso, atribua as funções mais adequadas que já existem.
Evite permissões explícitas no nível do usuário, porque isso pode causar confusão e resultar na concessão de permissões indevidas.
Verifique se todas as tabelas têm as colunas “created_by”, “updated_at” e “created_at”. Além disso, todas as alterações nas tabelas precisam ser emitidas em um sistema de auditoria centralizado. Isso ajuda você a identificar se alguma permissão foi atribuída incorretamente ou se alguém recebeu permissões elevadas não necessárias.
Nem todos devem ser capazes de controlar quem pode alterar as funções. Essa é uma operação importante, e cada alteração deve passar por um processo de aprovação bem auditado.
Além disso, a equipe que gerencia o controle de acesso precisa fornecer diretrizes sobre como criar permissões para as funções.
Outros mecanismos de controle de acesso
Vários mecanismos de controle de acesso são usados atualmente. Confira alguns dos principais abaixo.
Controle de acesso baseado em atributo
Nesse mecanismo de controle de acesso, as permissões são fornecidas aos recursos com base nos atributos deles. Um dos principais exemplos disso é a AWS, em que você fornece acesso aos recursos usando tags.
Prós: é um método muito flexível. Além disso, é fácil fazer alterações nos atributos para que um usuário receba as permissões.
Contras: as permissões concedidas por engano podem se propagar caso o atributo esteja associado a outra entidade. Além disso, a implementação desse método é mais demorada, já que cada recurso deve ser associado a um atributo, e a equipe precisa definir e planejar esses atributos.
Controle de acesso no nível do usuário
Nesse mecanismo, o usuário recebe acesso aos recursos com base nas permissões atribuídas diretamente a ele.
Prós: parece simplista a princípio e é o mecanismo mais fácil de implementar.
Contras: é difícil de gerenciar porque pode ficar muito complexo à medida que os usuários e as permissões aumentam.
Controle de acesso baseado em política
Nesse método, os usuários recebem acesso com base em uma política definida para o usuário no nível da empresa. A política avalia o sujeito, o objeto, a ação e o contexto. O assunto pode ser um departamento, como engenharia. O objeto pode ser uma ferramenta, como o SonarQube. A ação pode ser a atividade que você está tentando executar, como visualizar relatórios. Por fim, o contexto é o ambiente em questão, como preparo e produção.
Prós: políticas legíveis por humanos fazem mais sentido e têm controle contextual.
Contras: a implementação é complexa, já que sua execução pode envolver diferentes verticais e suas ferramentas.
Conclusão
Há muitas maneiras de implementar o controle de acesso. Um método muito comum é combinar RBAC a ABAC. A AWS implementou o que parece ser uma das melhores combinações desses dois.
Além de escolher um mecanismo de controle, você precisa garantir a auditoria de todos os eventos e o envio de alertas no caso da criação de permissões incorretas.
É realmente difícil cumprir todos esses requisitos sem problemas, já que você enfrenta muitos obstáculos. Por exemplo, a ferramenta centralizada que você usa precisa ser integrada a diversas ferramentas internas. Além disso, algumas podem ser restritas e oferecer suporte a apenas determinados protocolos.
Deixando os problemas de lado, você deve implementar o controle de acesso a todos os sistemas, porque isso dará a você confiança em cenários em que os sistemas foram comprometidos.