O sistema de segurança do Geoserver é muito bom por si só. Ele permite criar vários Papéis, Grupos, Usuários e fazer combinações entre eles, protegendo nossos dados. Caso você não conheça o sistema de segurança do GeoServer temos uma série com 1, 2, 3, 4 posts aqui no blog.

Como mencionado no título, iremos utilizar neste post o GeoFence, e para um melhor entendimento irei descrever um problema para demonstrar o funcionamento do plugin.

1. Descrição do Problema

Imagine um cenário, onde você tem uma camada que contém informações para todas as regiões do mundo e diversos atributos. Por exemplo, a camadas de Lugares (Places) que pode ser encontrada em https://www.naturalearthdata.com/downloads/10m-cultural-vectors/10m-populated-places/

Baixe o shape no link acima e configure como uma camada do workspace cite no seu GeoServer.



Neste cenário nós queremos restringir o acesso de acordo com a planilha abaixo:



Se você perceber estamos entrando no nível de camada, e querendo realizar restrições nas informações (ex: ter acesso apenas aos lugares localizados no Brasil e apenas a alguns atributos específicos por role e/ou usuário).

Para conseguir isso, usaremos o GeoFence, que nos permite subir ao nível da camada e definir a permissão conforme nossa necessidade. A ferramenta de GeoFence pode ser usada via interface do usuário ou como uma API REST.

2. Trabalhando com GeoFence

2.1 Instalação

Se você estiver usando GeoServer a partir da versão 2.18, lembre-se de instalar apenas o plugin GeoFence Server, e não instalar o plugin GeoFence Client. Para este teste, eu estou usando a versão 2.18.4, desta forma a página para download é http://geoserver.org/release/2.18.4/



Uma vez realizado o download, coloque todos os jars em /geoserver/webapps/geoserver/WEB-INF/lib/ e reinicie o geoserver. Uma vez feito, você verá novas opções adicionadas na guia de segurança:



2.2 Configuração

Finalizada a instalação, você deve ir na guia GeoFence e clicar no botão de conexão de teste e ver a mensagem de conexão bem-sucedida. Se você não vir isso, significa que você não instalou o plugin corretamente, ou seja, reveja os passos anteriores.



2.3 Definindo papéis e usuários

Precisamos definir os usuários e papéis (roles) de acordo com a declaração do problema, na guia Configurações -> Usuários, Grupos, Funções. Veja como:

2.3.1. Criar os papéis (roles) brasil_gov, brasil_public e latam
2.3.2. Criar os usuários class_1, class_2 e normal vinculados ao papel brasil_public
2.3.3. Criar o usuário gov vinculado ao papel brasil_gov
2.3.4. Criar o latam_user vinculado ao papel latam

A configuração deverá ficar assim:






2.4 Definindo regras de dados do GeoFence

Para definir as regras de dados do GeoFence de acordo com a declaração do nosso problema vamos em Secutiry -> Geofencing Data Rules, e em seguinte clique em adicionar nova regra:



Vamos agora entender os parâmetros para realizar as configurações:

Priority — Mantenha essa prioridade

Role — Selecione o nome da role

Username — Se você deseja criar uma regra específica para um determinado usuário, selecione o nome, caso contrário, mantenha o valor selecionado como *

Service – Se você deseja criar uma regra específica para o serviço (WMS, WFS, etc.), selecione o nome do serviço, caso contrário, mantenha o valor selecionado como *

Request — Se você selecionar qualquer serviço específico, as solicitações vinculadas a ele estarão disponíveis para seleção

Workspace — Selecione a área de trabalho em qual sua camada pertence, mantendo * aplicará uma regra a todas as áreas de trabalho

Layer — Se você deseja aplicar a regra a uma camada específica na workspace selecionada, selecione o nome, mantendo * aplicará a regra a todas as camadas da workspace

IP Address range — O endereço IP permitido que pode usar o geoserver pode ser escrito aqui, mantendo ele em branco tornará o geoservidor disponível globalmente

Access — Aqui definimos se queremos permitir que o usuário/função selecionado acesse o espaço de trabalho/camada selecionado. as opções disponíveis são ALLOW (PERMITIR), DENY (NEGAR), LIMIT (LIMITAR).



Layer details — Se você selecionar um nome de camada específico, essa opção estará disponível. Aqui será definida a regra de acordo com a especificação da camada. Marque ✅ a caixa de seleção “Specify Layer Details” para ver mais opções.

Allowed Styles — Aqui você pode definir o estilo permitido visível para o usuário, se deixado em branco, todos os estilos estarão disponíveis

CQL Read Filter — Aqui você pode definir o filtro CQL que será aplicado à camada, limitando assim os recursos baseados a este filtro

CQL Write Filter — Aqui você pode definir o filtro que será aplicado na solicitação de gravação (por exemplo, WFSTransaction)



Allowed area (WKT) — Usando isso, você pode restringir a visibilidade dos recursos específicos apenas para determinadas áreas. Como indica o rótulo do campo, o formato aceito é o WKT, como no exemplo abaixo:

POLYGON ((-127.96875 -57.51582286553883, -32.34375 -57.51582286553883, -32.34375 31.952162238024975, -127.96875 31.952162238024975, -127.96875 -57.51582286553883))

Layer Attributes — Selecione os atributos da camada que você deseja permitir que os usuários usem. Certifique-se de que o atributo de geometria esteja sempre ATIVADO para que você possa ver a camada. As opções disponíveis para seleção são:

None — para ocultar o atributo
Readonly — Apenas para ler os dados, mas a transação não será permitida
Readwrite — O usuário pode ler e gravar este atributo

PS: Lembre sempre de permitir o acesso ao campo geometria



Assim, todas as regras serão definidas. Veja:



Para criar as regras acima, na guia “Layer Details” foram usados os campos de CQL para todas as regras que continham as roles brasil_gov e brasil_public. Para a regra latam, não foi utilizado o campo CQL e sim o campo WKT, passando um polígono com as dimensões da América Latina.

3. Testes

Quando fizermos login como gov, veremos os seguintes dados:



Quando fizermos login como class_1, veremos os seguintes dados:



Quando fizermos login como class_2, veremos os seguintes dados:



Quando fizermos login normal, veremos os seguintes dados:



Quando fizermos login como latam_user, veremos os seguintes dados:



Este material foi baseado no post “Using Geofence to add layer level security in Geoserver” escrito originalmente por Krishna G. Lodha

Fonte: Blog Krishna G. Lodha