Bloquear o upload de chaves privadas, arquivos, arquivos grandes e não apenas no Gitlab CE

Os ganchos do Git são uma ferramenta para ajudar a manter seu repositório em ordem. Você pode configurar regras automáticas para processar suas confirmações.



Todos vocês provavelmente sabem sobre pré-confirmação - verificando seu código antes de confirmar. Mas nem tudo pode ser verificado antes de confirmar. Algumas restrições desejam ser usadas globalmente em todo o Gitlab.



Para qualquer pessoa confusa sobre ganchos de pré-confirmação e pré-recebimento, esta postagem descreve as diferenças entre eles no "O que são ganchos de git?"



Se você possui o Gitlab Enterprise Edition, pode configurar os ganchos descritos na publicação por meio da interface WEB.



Mas e se você tiver o Gitlab Community (Core) Edition?



Este artigo descreve 5 ganchos de pré-recebimento que são executados no servidor Gitlab Community (Core) Edition:



  • block_confidentials.sh - Bloqueando o envio de chaves privadas e tokens da AWS
  • block_file_extensions.sh - Bloqueando o envio de arquivos (configurável pelo Regex)
  • check-large-files.sh - Bloqueando o envio de arquivos grandes (tamanho configurável)
  • reject-not-allowlist-email.sh - O bloqueio confirma com o email que não está na lista de permissões (a lista de domínios de email é configurável)
  • require-issue.sh - O bloqueio é confirmado sem um problema no título (a lista de problemas é configurável)


A maioria dos ganchos é retirada do repositório de amostras de plataforma no diretório pré-recebimento de ganchos (aplica-se ao GitHub Enterprise).



Você pode ver todo o código-fonte dos ganchos do servidor no Github .



Instalando no Gitlab



  • Você precisa criar um diretório /opt/gitlab/embedded/service/gitlab-shell/hooks/pre-receive.d/
  • Copiar ganchos para este diretório
  • Não se esqueça de definir direitos de inicialização para ganchos (arquivo chmod + x hook)


Bloqueando o envio de chaves privadas e tokens da AWS



block_confidentials.sh regex_list, .



# Define list of REGEX to be searched and blocked
regex_list=(
  # block any private key file
  '(\-){5}BEGIN\s?(RSA|OPENSSH|DSA|EC|PGP)?\s?PRIVATE KEY\s?(BLOCK)?(\-){5}.*'
  # block AWS API Keys
  'AKIA[0-9A-Z]{16}'
  # block AWS Secret Access Key (TODO: adjust to not find validd Git SHA1s; false positives)
  # '([^A-Za-z0-9/+=])?([A-Za-z0-9/+=]{40})([^A-Za-z0-9/+=])?'
  # block confidential content
  'CONFIDENTIAL'
)


, git push .







block_file_extensions.sh case *.zip|*.gz|*.tgz, , .



zip , git push .







check-large-files.sh maxsize, , .



1 , git push .





email allow



reject-not-allowlist-email.sh email-, .



declare -a DOMAIN_ARRAY=("group1.com" "group2.com")


git , .



git config user.email user1@group3.com


, git push .





issue



Majilesh.



require-issue.sh commit_format, .



commit_format="(JIRA|PROJECTKEY|MULE|ECOM|SAP|XLR-[1-9]+Merge)"


, , commit_format git push .





.



Telegram- Gitlab




All Articles