Olá pessoal, tudo bom? Espero que sim!
Aqui na nossa empresa não utilizamos a integração da suíte Atlassian com o AD, então o processo de gestão de acesso dos usuários costumava gerar um overload operacional bem alto.
Este ano - muito graças à pandemia - tivemos um aumento substancial de usuários em nossas ferramentas, e a automação da criação/desativação/reativação e inclusão em grupos tornou-se extremamente necessária.
Desenvolvi diversos scripts recentemente, e hoje trouxe pra vocês um dos mais simples de ser configurado: A desativação automatizada de usuários via REST API.
Vamos começar?
OS ARQUIVOS
Tenho 2 recomendações sobre o local dos arquivos:
Caso opte por deixá-los em outros locais, prepare-se para resolver alguns problemas de permissionamento.
Arquivo query.sql:
Esta query coleta uma lista com o nome de usuário dos usuários que estão a X dias sem acesso e foram criados/reativados há mais de Y dias.
set pagesize 999
set heading off
set echo off
set feedback off
set verify off
SELECT "USER_NAME" FROM
(SELECT "USER_NAME","ACTIVE","CREATED_DATE","UPDATED_DATE",NVL(B.LOGIN_COUNT,0)
AS LOGIN_COUNT, TO_CHAR(C.LAST_LOGIN,'DD/MM/YYYY') AS LAST_LOGIN,
ROUND(CURRENT_DATE - LAST_LOGIN,0) AS LASTLOGINCOUNT,
ROUND(CURRENT_DATE - UPDATED_DATE,0) AS UPDATEDCOUNT,
ROUND(CURRENT_DATE - CREATED_DATE,0) AS COUNTCREATION FROM "CWD_USER" A
LEFT JOIN
(SELECT "USER_ID","ATTRIBUTE_NAME","ATTRIBUTE_VALUE" AS LOGIN_COUNT FROM "CWD_USER_ATTRIBUTES" WHERE ATTRIBUTE_NAME = 'login.count') B
ON A.ID = B.USER_ID
LEFT JOIN
(SELECT "USER_ID","ATTRIBUTE_NAME", TO_DATE('01.01.1970','dd.mm.yyyy') + TO_NUMBER("ATTRIBUTE_VALUE")/1000/60/60/24 AS LAST_LOGIN FROM "CWD_USER_ATTRIBUTES" WHERE ATTRIBUTE_NAME = 'lastAuthenticated') C
ON A.ID = C.USER_ID)
WHERE "ACTIVE"=1
AND (("LASTLOGINCOUNT" IS NULL AND ("COUNTCREATION">$dias_desde_a_criação AND "UPDATEDCOUNT">$dias_desde_a reativação)) OR "LASTLOGINCOUNT">$dias_desde_ultimo_login AND "UPDATEDCOUNT">$dias_desde_a reativação)
ORDER BY USER_NAME;
exit
Variáveis para customização:
Arquivo script.sh:
Este script lê a lista coletada acima e acessa as APIs do jira para desativá-los. As entradas de log são opcionais. Por favor tome nota do comentário inserido antes do comando "tail -n +18 users_1.csv > users_2.csv", já que a não adaptação desta linha pode fazer com que a coleta de usuários não seja bem sucedida.
#!/bin/bash
# Salvando o diretório de execução do script.
EXEC_PATH=$PWD
# Fazendo login com o usuário do oracle e rodando a query de coleta dos usuários.
sudo su - oracle -c "sqlplus -s $usuario_do_BD_do_jira/$senha_do_usuario_do_BD_do_jira @$EXEC_PATH/querr.sql" > users_1.csv
# O comando acima faz o login com o usuário do oracle e recarrega as
# variáveis de ambiente, temos um banner de login que - no meu caso -
# ocupa 18 linhas. Ao rodar na primeira vez, comente todas as linhas
# abaixo deste comentário e cheque o arquivo users_1.csv para verificar
# se você precisará remover alguma linha do cabeçalho, se sim substitua
# o 18 no comando abaixo pela quantidade de linhas que deverão ser
# removidas do arquivo.
tail -n +18 users_1.csv > users_2.csv
# Coletando dia e hora para log.
function getdate() {date +"%F %T"}
# Entradas de execução para log.
echo "########################################################################"
echo "$(getdate) Inicio da execução do script de clean-up de usuários"
# Leitura do arquivo com os usuários e execução.
while IFS="," read user_name
do
echo -e "Desativando usuario: $user_name..."
curl -s -X PUT $url_do_jira/rest/api/2/user?username=${user_name} \
-u $usuario_administrativo_do_jira:$senha_do_usuario_administrativo_do_jira \
-H 'Content-Type: application/json; charset=utf-8' \
--data '{"active": "false"}'
sleep 2
done < users_2.csv
# Deleção de arquivos criados
rm -f *.csv
# Entradas de execução para log.
echo "$(getdate) Término da execução do script de clean-up de usuários"
Variáveis para customização:
PERMISSÕES
Caso opte por deixar o usuário/senha hardcoded no script, recomendo ajustar as permissões dos arquivos conforme abaixo:
-r-x------ 1 oracle oinstall 1027 Aug 24 11:52 query.sql
-r-x------ 1 root root 341 Aug 24 11:56 script.sh
Desta forma os únicos com acesso para execução e leitura são os owners/grupos dos arquivos:
chmod 500 query.sql
chmod 500 script.sh
Note também que alterei o owner/grupo do arquivo query.sql:
chown oracle query.sql
chgrp oinstall query.sql
Fiz isto pois por padrão só é possível agendar tarefas no crontab do root, portanto o script será executado com o usuário do root.
No entanto precisaremos fazer login dentro do script com o usuário do oracle, e ele não conseguirá acessar o arquivo caso não seja o owner.
AGENDAMENTO
Para configurar a execução diária deste script, basta incluir uma linha no cron do servidor:
crontab -e
O formato de agendamento do crontab pode variar dependendo do tipo e versão do seu SO, mas aqui no nosso servidor, configuramos desta forma: execução diária às 06 da manhã, com output salvo no arquivo de log logdoscript.log, salvo no mesmo diretório dos scripts.
00 06 * * * $diretorio_do_script/script.sh >> $diretorio_do_script/logdoscript.log
Variáveis para customização:
Fui aprendendo algumas coisas na tentativa e erro ao longo de tempo e apanhei bastante pra descobrir alguns pontos descritos aqui em cima, então espero ter coberto a maioria das dúvidas/problemas que vocês possam ter.
Disclaimer: não sou nem tenho experiência com a área de Desenvolvimento, então provavelmente existe espaço pra melhoria no código e na documentação do código. Sugestões serão sempre bem vindas. =)
Solved! Go to Solution.
Ahhhh! Não sei porque, mas eu não tinha visto esse comentário! Obrigada Dai!. =)
Fantástico @Julia Nunes Pedrosa !
Online forums and learning are now in one easy-to-use experience.
By continuing, you accept the updated Community Terms of Use and acknowledge the Privacy Policy. Your public name, photo, and achievements may be publicly visible and available in search engines.