Bloquee la carga de claves privadas, archivos, archivos grandes y no solo en Gitlab CE

Los ganchos Git son una herramienta para ayudar a mantener su repositorio en orden. Puede configurar reglas automáticas para procesar sus confirmaciones.



Probablemente todos ustedes sepan sobre la confirmación previa : verificar su código antes de confirmar . Pero no todo se puede verificar antes de comprometerse. Algunas restricciones quieren ser utilizadas globalmente en Gitlab.



Para cualquier persona confundida acerca de los ganchos de precompromiso y pre-recepción, esta publicación describe las diferencias entre ellos en "¿Qué son los ganchos de git?"



Si tiene Gitlab Enterprise Edition, puede configurar los ganchos descritos en la publicación a través de la interfaz WEB.



Pero, ¿qué pasa si tienes Gitlab Community (Core) Edition?



Este artículo describirá 5 ganchos previos a la recepción que se ejecutan en el servidor Gitlab Community (Core) Edition:



  • block_confidentials.sh - Bloqueando el envío de claves privadas y tokens de AWS
  • block_file_extensions.sh - Bloqueo del envío de archivos (Regex configurable)
  • check-large-files.sh - Bloqueo de envío de archivos grandes (tamaño configurable)
  • jected-not-allowlist-email.sh - Bloqueo de confirmaciones con correo electrónico que no está en la lista de permitidos (La lista de dominios de correo electrónico es configurable)
  • require-issue.sh - Bloqueo de confirmaciones sin un problema en el título (La lista de problemas es configurable)


La mayoría de los enlaces se toman del repositorio de ejemplos de plataforma en el directorio pre-recibir-enlaces (se aplica a GitHub Enterprise).



Puede ver todo el código fuente de los enlaces del servidor en Github .



Instalando en Gitlab



  • Necesitas crear un directorio /opt/gitlab/embedded/service/gitlab-shell/hooks/pre-receive.d/
  • Copiar ganchos a este directorio
  • No olvide establecer los derechos de inicio de los ganchos (chmod + x archivo de gancho)


Bloqueo de envío de claves privadas y tokens de 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