Neste post irei explicar como realizar o sincronismo entre a ferramenta de controle de usuários Active Directory e o SAS, algo que hoje é bastante utilizado facilitando a implementação de novos sistemas SAS e novos usuários ao sistema que fica gerenciado pelo AD, e não pelo SAS diretamente, o que nos da mais segurança ainda.
Primeiros Passos
A primeira parte que teremos que entender é como que isso pode facilitar o dia-a-dia de um administrador SAS de maneira muito simples, sincronizando o SAS juntamente com algum mecanismo de controle de usuários, AD por exemplo você se torna responsável por somente controlar permissões e se "ausenta" da responsabilidade de criação de usuários e controle de informações de usuários dentro do SAS, uma vez que isso passa a ser parte da responsabilidade da ferramenta de controle de usuários, entendendo isso passamos a entender o porque esta integração entre as duas ferramentas é essencial para um administrador SAS.
Antes de mais nada teremos alguns pré-requisitos para realizar este sincronismo como por exemplo, a maquina que ira receber esta integração terá que ser "colocada" no domínio que possui o AD e para isso você terá que utilizar algumas ferramentas que não irei citar neste post, mas que posso fazer um post, posteriormente para realizar estas configurações iniciais, bom após este pré-requisito estar ok, podemos então partir para a integração propriamente dita.
Integração AD e SAS
Bom para iniciarmos a parte de integração primeiramente teremos que verificar um dos arquivos de configuração que o SAS possui nele ira depender como a instalação foi feita mas você terá que encontrar a linha onde ira alterar o método de autenticação por padrão ele vem somente como PW, que seria o comum do SAS, autenticar pelo passwd, do usuário no S.O. porem para esta sincronização acontecer de forma correta teremos que adicionar mais um método que será ele o PAM, este arquivo fica no seguinte caminho:
$SASHOME/SASFoundation/9.4/utilities/bin/sasauth.conf
A linha que iremos alterar é a seguinte:
method=pw pam
Após esta alteração estar feita teremos que realizar mais uma alteração no Sistema operacional agora teremos que criar um arquivo chamado sasauth no diretório de configuração do pam, para que o SAS utilize este arquivo para realizar a autenticação dos usuários via PAM, o caminho para criarmos este arquivo de configuração é o seguinte.
/etc/pam.d
Quando já estivermos dentro deste arquivo iremos realizar a copia do arquivo system-auth e iremos nomear ele como sasauth, isto porque o SAS utiliza o mesmo método do sistema para autenticar os usuários, para isso usamos o seguinte comando.
cp system-auth sasauth
Após criarmos este arquivo utilizaremos um pequeno "hack", pois quando utilizamos o SAS o usuário necessita de uma home no Sistema operacional e para isso iremos utilizar um script para criar esta home folder de maneira automática, quando o usuário se logar com no ambiente do SAS.
E para isso basta utilizar o script chamado mkhomedir.sh, que está disponível no seguinte repositório do GitHub: https://github.com/Juanormelli/SyncAD-SAS
Após esta parte estar finalizada podemos partir para o que interessa que é o sincronismo em si.
Aplicando sincronismo
Para a realização do sincronismo o SAS utiliza dois programas padroes .sas, que são eles o updatead.sas e o importad.sas, vamos começar falando primeiramente do ImportAD.sas
ImportAD.sas
Este é o programa responsável por realizar a conexão e o sincronismo dos usuários e grupos entre AD e SAS, ele é dividido em 5 partes ou seções como o SAS chamou e dentro do próprio Script você pode encontrar a explicação para cada uma das seções do código, mas vou dar uma breve explicação de cada uma delas aqui mesmo:
- Onde ficam todos os parâmetros necessários para realizar a conexão ao SAS e ao AD para realizarmos o sincronismo
- Definição das tabelas responsáveis por armazenar as informações coletadas do SAS e do AD
- Extração dos usuários do AD e normalização dos dados destes usuários e criação e população das tabelas responsáveis por armazenar estas informações.
- Seção responsável pela extração dos grupos do AD e população das tabelas responsáveis por armazenar estas informações além da normalização dos dados retirados do AD.
- Leitura das tabelas responsáveis pelo armazenamento das informações e chamada da proc metadata para a realização do registro destes dados no Metadados SAS
Bom agora que ja sabemos como o código é divido precisamos realizar as alterações necessárias para o nosso ambiente e irei dividir as alterações necessárias por seção para facilitar o entendimento
Seção 1
Primeiramente iremos alterar as informações de conexão ao servidor de metadados SAS, que ficaram basicamente conforme as abaixo, VOCE DEVE SEGUIR A INFORMAÇÕES CONFORME SEU AMBIENTE:
options metaserver=Example.com ------- Nome do Servidor
metaport=8561 -------------------------- Porta do Metadados
metauser="sasadm@saspw" -------- Usuário irrestrito que ira gravar as informações no Metadados
metapass="PASSWD" ----------------- Senha deste usuário
metaprotocol=bridge ---------------- Protocolo de seu metadados
metarepository=foundation; ------- Repositório Padrão SAS
Após estas alterações estarem ok passaremos para as alterações nos dados de conexão ao AD chamado normalmente de bind, ele devera estar conforme abaixo, VOCE DEVE SEGUIR A INFORMAÇÕES CONFORME SEU AMBIENTE:
%let ADServer = "example.com"; -------------------------- Servidor AD
%let ADPort = 389; ------------------------------------------ Porta AD
%let ADPerBaseDN ="dc=example,dc=com; ---------- Controlador de domínio onde os usuários serão buscados
%let ADGrpBaseDN ="dc=example,dc=com; ---------- Controlador de domínio onde os grupos serão buscados
%let ADBindUser = "example@example.com" -------- Usuário que realizara a conexão no AD
%let ADBindPW = "PassWD" ; ---------------------------- Senha do usuário de conexão
Após estas alterações iremos alterar qual será o ID dos usuários no AD, por padrão utilizamos o sAMAccountName, porem você pode adaptar isso ao seu ambiente alterando a seguinte linha de código:
%let keyidvar=sAMAccountName;
Existem algumas outras alterações que pode ser feitas nesta seção do script mas não são fundamentais para que ele funcione corretamente, elas vão depender de seu ambiente e são alteradas nas seguintes linhas de código:
%let MetadataAuthDomain=DefaultAuth;
%let WindowsDomain=;
Após estas informações estarem salvas podemos passar para a próxima seção.
Seção 2 e 3
Primeiramente nestas seções iremos alterar uma configuração na macro que é criada para a extração dos usuários no AD e fica na seguinte linha:
if sAMAccountName NE "" then
Por padrão esta instrução vem como sAMAccountName porem você pode alterar para estar de acordo com seu ambiente caso tenha mantido padrão ela pode ficar da maneira que esta mesmo.
Após isso iremos alterar o mais importante desta seção o filtro LDAP responsável por filtrar os usuários que serão exportados pela macro, para isso você devera alterar a configuração de filtros para a seguinte maneira, :
filter="(&(&(objectCategory=person)(objectClass=user))(memberOf=CN=EXAMPLE,OU=Example,DC=Example,DC=com))";
Como pode ver o filtro é dividido em duas partes primeiro filtramos se ele é uma pessoa e da classe usuário, e após isso aplicamos um filtro de OU nele para trazermos somente os usuários da OU que desejamos, caso você possua mais de um OU que queira filtrar será necessário adicionar, mais uma linha alterando apenas a segunda parte do filtro para a OU que deseja.
Seção 4
Nesta seção iremos alterar apenas os filtros de grupos para realizar a mesma busca que fazemos na macro de usuários só que para os grupos serem sincronizados também e para isso iremos alterar a seguinte linha de código
filter="(&(objectClass=group)(name=Example))"
Após isso o programa já estará pronto para realizar a importação pois na seção 5 não é necessário fazer nenhuma alteração para que funcione corretamente o programa.
Agora chegou a melhor parte, a integração entre AD e SAS, a hora da magica, mas antes precisaremos realizar a configuração de mais um arquivo para este processo o updatead.sas
Updatead.sas
Bom primeiramente teremos que entender a necessidade deste programa para depois passar as alterações que serão feitas nele.
Este programa é responsável por fazer a "magica" do sincronismo acontecer e é responsável por atualizará o metadados do SAS com os usuários que são importados do AD, e para isso você terá que cumprir alguns pré-requisitos em SO para que ele rode perfeitamente.
Primeiramente terá que escolher onde ira deixar armazenada as 3 Libs que serão responsáveis por armazenar os dados do AD, metadados e os updates necessários, recomendo que deixe na pasta work ou no mesmo caminho onde ira armazenar todas as informações que serão necessárias para o sincronismo geralmente por convenção deixamos no seguinte caminho:
$SASCONFIG/syncad/
Porem nao é uma regra e pode criar onde voce bem entender.
Os caminhos que serao criado sao os seguintes:
- ADIRextract
- METAextract
- METAupdate
Após estes três caminhos estarem criados no sistema operacional podemos partir para a alteração do script, a primeira alteração que iremos fazer é nos parâmetros de conexão com o metadados, conforme já fizemos no outro script, VOCE DEVE SEGUIR A INFORMAÇÕES CONFORME SEU AMBIENTE:
options metaserver=Example.com ------- Nome do Servidor
metaport=8561 -------------------------- Porta do Metadados
metauser="sasadm@saspw" -------- Usuário irrestrito que ira gravar as informações no Metadados
metapass="PASSWD" ----------------- Senha deste usuário
metaprotocol=bridge ---------------- Protocolo de seu metadados
metarepository=foundation; ------- Repositório Padrão SAS:
Após isso iremos referenciar as o caminho para as três libs que precisaremos ter criadas:
libname adir "/example/ADIRextract";
libname meta "/example/METAextract";
libname updates "/example/METAupdate";
Cada uma destas libs tem uma função essencial para o funcionamento do sincronismo:
Lib Adir: Responsável por armazenar as informações retiradas do AD.
Lib Meta: Responsável por armazenar as informações retiradas do Metadados.
Lib Updates: Responsável por armazenar as informações que precisam ser alteradas no Metadados.
Após isso será necessária importar dentro deste programa o programa de importad que é responsável por extrair todas as informações necessárias para o funcionamento do programa, faremos isso através desta linha de código:
%include "example/importad.sas";
Após isso o programa executara 4 Macros cada uma com sua função especifica:
%mduextr: Responsável pela extração das informações de metadados.
%mducmp: Responsável por comparar a extração realizada pelo import AD e realizar a população da Lib Updates para posteriormente atualizar o metadados.
%mduchgv: Responsável por realizar a validação das tabelas geradas pela macro anterior na lib de updates e realizar a população da tabela de erros.
%mduchglb: Responsável por realizar o load dos dados validados para o servidor de metadados SAS
Finalizada estas alterações você já estará pronto para realizar a execução do sincronismo AD e SAS.
O template para este programa pode ser encontrado no seguinte repositório do GitHub:
https://github.com/Juanormelli/SyncAD-SAS
Execução
A parte da execução é a mais simples de tudo, basta rodar o seguinte código em seu ambiente SAS:
/sasbin/SASFoundation/9.4/sas Caminho_do_updateAD -log Caminho_onde_deseja_armazenar_o_Log
Após rodar este comando se tudo estiver configurado corretamente você ira conseguir visualizar os usuários desejados dentro da Console do SAS.
