前段时间,我们发表了几篇关于创建CICD的文章--今天我们决定再展示一下如何通过隐藏你的秘密使该配置更加安全。如果你看过我们以前关于这个主题的帖子,你就知道如何使用HDI来部署变化到你的HANA,以及它如何与现有的云原生工作流整合,同时确保你的变化使用CICD管道进行适当的测试;这一切都非常酷,将加快我们的开发周期,但我们仍然缺少一些东西,以便能够把这种美丽的东西放到prod中
隐藏敏感信息
如果你一直想知道如何保护你的管道,现在VCAP就在那里,有所有多汁的信息来对你的HDI容器进行操作,那么我有个好消息要告诉你。我们可以保护这些信息,同时保留相同的功能。
秘密......谁没有秘密?当然不是HANA(以及其他许多应用程序);在软件世界中,秘密是指任何你想保持隐私的信息 - 如果泄漏或被未经授权的各方获得,它可以为他们提供访问,有可能被用来妥协或破坏你的系统。
如果对某些东西是否应该成为秘密有疑问,可以问问自己,如果一个恶意的实体得到这些信息,会发生什么?好吧,如果这发生在VCAP身上......你会明白的!
用imgflip创建
我们将使用谷歌秘密管理器来确保VCAP变量的安全,然后我们将改变我们的云构建管道,以安全地消费该秘密。谷歌秘密管理器是一个管理解决方案,允许我们轻松地创建和消费秘密;但这种方法也适用于其他秘密引擎。
创建秘密
首先确保你有VCAP服务的正确信息,以及专门用于CI/CD管道的用户的详细信息,这与你之前使用hanacli工具创建的信息相同("创建HDI容器")。
如果你不再有包含VCAP服务内容的json文件,我们可以从触发器中恢复它--毕竟它是以纯文本形式存在的......而这就是我们要解决的问题。
gcloud config set project ${PROJECT_ID} # make sure to use the correct PROJECT ID
现在,导航到云构建触发器页面,在那里你已经填充了环境变量,恢复_CREDS中的值,然后把它粘贴到我们刚刚创建的文件中。
如果你想从你的命令行中获得该值,请执行以下操作。
gcloud components install alpha
这将打印出_CREDS环境变量的值,所以你可以直接复制并粘贴到文件中(确保只获得该值),如上面的截图所示,如果你在创建触发器时改变了名称,确保使用上面的正确名称。
我们的下一步是创建秘密(你将需要角色/secretmanager.admin IAM权限)。
gcloud services enable secretmanager.googleapis.com
每个环境都应该有不同的数据库,因此有不同的VCAP值,为此,我们不仅要在名称中附加环境,还要添加一些标签,以帮助我们在将来编目和检索数据。标签真的很有用,所以一定要为你的用例考虑相关的标签。
就这样......我们的秘密就诞生了!
更新云构建管道
是时候修改我们的CI/CD管道以使用我们的app-hana-dev-vcap秘密了
edit cloudbuild.yaml
这个改动相当简单,我们将在YAML文件中添加一个新的步骤,告诉Cloud Build如何获取秘密,并将其作为一个文件提供给其他步骤,一旦管道被销毁,该文件也随之销毁。
我们将使用以下gcloud命令来实现这一目标。
gcloud secrets versions access latest --secret "${_CREDS}" --format='get(payload.data)' | base64 -d >> credentials.json && exit $?
我们还需要修改下一个步骤,以便在开始之前等待秘密步骤完成,并使用我们刚刚创建的文件来获取连接到HDI容器的凭证。下面是最终的cloudbuild.yaml的样子。
现在我们需要更新触发器,前往cloud build上的触发器页面并编辑它,现在将_CREDS上的值替换为我们的秘密名称(在这种情况下是app-hana-dev-vcap)。
然而,在这之前,我们仍然需要告诉GCP,Cloud Build管道可以访问这个秘密,为此,请浏览IAM和管理页面,然后找到以@cloudbuild.gserviceaccount.com结尾的服务账户,并赋予它秘密管理器的秘密访问者角色。
现在让我们测试一下我们的管道推送一个变化,看看奇迹发生了没有。
你已经完成了!享受吧!
如果这对你有用,请告诉我或Lucia Subatin!
谷歌云上的SAP(第四部分)。在你的管道中的秘密最初发表在谷歌云--Medium上的社区,在那里人们通过强调和回应这个故事继续进行对话。