伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

GitLab最佳实践 -- 集成git-secrets扫描敏感信息

来源:本站原创 浏览:102次 时间:2022-07-26

随着互联网的快速发展,信息安全问题也变得越来越重要,对于代码仓库管理员来说,我们需要通过代码扫描工具防止开发者将企业系统中的账号密码和其他敏感信息提交到Git仓库。从而避免这些敏感信息泄露到互联网。

AWS的git-secrets
(https://github.com/awslabs/git-secrets)。提供了一种扫描代码文件的方法。下面我分享一下我们项目组使用git-secrets的一些经验。

起初,我们要求所有开发在本地安装git-secrets工具,这样能使他们在commit/push代码的时候及时发现代码中是否存在敏感信息,若是存在则会阻止代码推送到Git服务器仓库。真的这样是一种很好的方式。但是在实施的过程中还是存在开发人员将敏感信息写在代码中,并且上传到GitHub(是的,最早我们没有自建代码仓库,使用了GitHub私有仓库)。

后来,我们搭建了私有GitLab,将GItHub代码仓库迁移到了GitLab。并且在GitLab服务器安装git-secrets。通过编写扫描脚本,定时扫描所有代码仓库,将扫描结果以邮件形式发送给所有开发人员。

def scan_all_repository():    root = "/var/opt/gitlab/git-data/repositories"    cmd = "find {} -name '*.git'".format(root)    status_code, output = subprocess.getstatusoutput(cmd)    result = []    if status_code == 0:        files = output.split("\n")        total = len(files)        for idx, name in enumerate(files):            if idx % 10 == 0:                print("[{}] This is {}/{}".format(datetime.datetime.now(), idx, total))            os.chdir(name)            cmd = "git secrets --scan-history {}".format(name)            status_code, output = subprocess.getstatusoutput(cmd)            if status_code == 1:              result.append("****************************************************")                result.append("name: {}".format(name))                result.append(output)        print("[{}] Total: {}".format(datetime.datetime.now(), total))    return "\n".join(result)

这种方式也很好,但并不是最佳的做法,因为客户端始终可以将敏感信息提交到服务器的代码仓库。

最后,我们采用Git Hooks的方式,在GitLab服务器使用git-secrets。如果开发人员在客户端没有进行git-secrets扫描,我们在服务器进行git-secrets扫描。若是代码中存在敏感信息,将阻止客户端的push操作。

接下来我们详细介绍GitLab如何集成git-secrets。

Step1、进入服务器Gitlab Docker容器。安装git-secrets。

docker exec -it gitlab /bin/bashapt-get -y update \    && apt-get -y install build-essential \    && git clone https://github.com/awslabs/git-secrets /var/opt/git-secrets \    && cd /var/opt/git-secrets \    && make install

Step2、编写Git Hooks脚本

# git-secrets.sh#!/usr/bin/env bashrefname=$1oldrev=$2newrev=$3echo "Executing git-secrets"echo ""# use git-secrets aws-provider git configurationHOME=/opt/git-hooks# add git-secrets to pathPATH=$PATH:/usr/local/bin# handle empty repositoryif [ "$oldrev" = "0000000000000000000000000000000000000000" ]; then  oldrev=4b825dc642cb6eb9a060e54bf8d69288fbee4904fifor i in $(git show $newrev:.gitallowed 2>/dev/null); do  git secrets --add --allowed $i;doneexitcode='0'FILES=`git diff --name-status $oldrev $newrev | awk '{print $2}'`for filepath in $FILES; do  if [ "$filepath" = ".gitallowed" ]; then    echo "Skipping $filepath ..."  else    echo "Scanning $filepath ..."  fi  git show $newrev:$filepath | git secrets --scan -  result=$?  if [ "$result" != "0" ]; then    exitcode=$result  fidoneif [ "$exitcode" != "0" ]; then    echo ""    echo "Listing configuration ..."    echo ""    git secrets --list    echo ""    echo "Please fix the above issues by running \`git reset HEAD~1\`, and encrypting the secrets."    echo ""    echo "To prevent committing secrets in the future, install git-secrets on your local machine."    echo "    https://github.com/awslabs/git-secrets"    echo ""    echo "Add AWS configuration template to add hooks to all repositories you initialize or clone in the future."    echo "     git secrets --register-aws --global"    echo ""    echo "Add hooks to all your local repositories."    echo "    git secrets --install ~/.git-templates/git-secrets"    echo "    git config --global init.templateDir ~/.git-templates/git-secrets"    echo ""    exit 1fi

Step3、配置 gitconfig

# .gitconfig[user]  name = GitLab  email = xxx[core]  autocrlf = input[gc]  auto = 0[secrets]  providers = git secrets --aws-provider  patterns = [A-Z0-9]{20}  patterns = (\"|')?(AWS|aws|Aws)?_?(SECRET|secret|Secret)?_?(ACCESS|access|Access)?_?(KEY|key|Key)(\"|')?\\s*(:|=>|=)\\s*(\"|')?[A-Za-z0-9/\\+=]{40}(\"|')?  patterns = (\"|')?(AWS|aws|Aws)?_?(ACCOUNT|account|Account)_?(ID|id|Id)?(\"|')?\\s*(:|=>|=)\\s*(\"|')?[0-9]{4}\\-?[0-9]{4}\\-?[0-9]{4}(\"|')?  allowed = AKIAIOSFODNN7EXAMPLE  allowed = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

Step4、将上诉文件复制到指定目录。

cp .gitconfig /opt/git-hooks/cp git-secrets.sh /opt/git-hooks/chown -R git:git /opt/git-hooks

Step5、修改gitlab配置文件。

vim /etc/gitlab/gitlab.rbgitlab_shell['custom_hooks_dir'] = 'opt/git-hooks'

最后,重启Gitlab。

docker restart gitlab

重启完成后,我们测试一下。

echo "AKIAIOSFODVERYSECRET wJalrXUtnFEMI/K7MDENG/bPxRfiCYVERYSECRET" > README.mdgit add README.mdgit commit -m "Test gitlab server side git-secrets"git push origin master

如果您喜欢这篇文章,请考虑关注我。

长沙DevOps联盟 - 关注容器技术,K8S,自动化部署,基础设施架构。

  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net