我在Gitlab上有一个私人项目,设置了CI / CD,用于从Google Container Registry推送/拉取docker映像,并将我的软件部署到GCP中的Kubernetes Engine。
是否有一种方法可以使我的项目公开,而不必担心用于连接到GCP的秘密泄露?特别是,我担心在我的存储库公开时,任何人都可以在echo $GCP_REPOSITORY_SECRET
文件中的某处添加类似.gitlab-ci.yml
的行,推动其分支并查看CI的输出以“发现“ 我的秘密。 Gitlab有防止这种情况发生的机制吗?从根本上说,是否有最佳实践可以为公共存储库保密部署秘密?
答案 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应用程序。
只需在变量前加上
K8S_SECRET_
,相关的Auto DevOps CI管道就会使用您的应用程序秘密变量来填充Kubernetes秘密。
答案 1 :(得分:4)
掩盖的变量非常容易揭露...
echo ${MASKED_VARIABLE::1} ${MASKED_VARIABLE:1} // mind the gap \!
您可能想保护; 并且,请确保只有真正受信任的开发人员才能推送到受保护的分支机构。
答案 2 :(得分:1)
您可能希望已屏蔽功能在作业日志中隐藏凭据。
转到项目的设置> CI / CD ,然后展开变量部分。并启用蒙版切换按钮。
参考: https://gitlab.com/help/ci/variables/README#masked-variables