在公共存储库中将gitlab CI / CD变量保密

时间:2018-11-10 22:54:38

标签: kubernetes gitlab gitlab-ci

我在Gitlab上有一个私人项目,设置了CI / CD,用于从Google Container Registry推送/拉取docker映像,并将我的软件部署到GCP中的Kubernetes Engine。

是否有一种方法可以使我的项目公开,而不必担心用于连接到GCP的秘密泄露?特别是,我担心在我的存储库公开时,任何人都可以在echo $GCP_REPOSITORY_SECRET文件中的某处添加类似.gitlab-ci.yml的行,推动其分支并查看CI的输出以“发现“ 我的秘密。 Gitlab有防止这种情况发生的机制吗?从根本上说,是否有最佳实践可以为公共存储库保密部署秘密?

3 个答案:

答案 0 :(得分:5)

  

从更根本上讲,是否存在最佳实践,可以为公共存储库保密部署秘密?

是的,其中没有任何敏感数据。曾经。

在GCP级别上,secret management options are listed here

将GitLab-CI连接到GCP时,您会看到security implication here,它使用kubectl get secret <secret name> -o jsonpath="{['data']['ca\.crt']}" | base64 -D,并带有正确的帐户和 RBAC 。。 >

  

整个群集的安全性基于developers受信任的模型,因此应仅允许受信任的用户控制您的群集。


请注意,GitLab 11.7(2019年1月)允许:

  

将Kubernetes应用秘密配置为Auto DevOps管道的变量

     

操作员和管理员要求在应用程序存储库外部进行机密配置,以降低风险和敏感数据的暴露。
  为了满足这一需求,GitLab现在提供了将机密配置为环境变量的功能,这些变量可用于运行在Kubernetes集群中的Auto DevOps应用程序。

https://about.gitlab.com/images/11_7/autodevops-secrets.png

  

只需在变量前加上K8S_SECRET_,相关的Auto DevOps CI管道就会使用您的应用程序秘密变量来填充Kubernetes秘密。

答案 1 :(得分:4)

掩盖的变量非常容易揭露...

echo ${MASKED_VARIABLE::1} ${MASKED_VARIABLE:1} // mind the gap \!

您可能想保护; 并且,请确保只有真正受信任的开发人员才能推送到受保护的分支机构。

答案 2 :(得分:1)

您可能希望已屏蔽功能在作业日志中隐藏凭据。

转到项目的设置> CI / CD ,然后展开变量部分。并启用蒙版切换按钮。

enter image description here

参考: https://gitlab.com/help/ci/variables/README#masked-variables