Cloudbuild中的秘密环境变量(没有文件),如何?

时间:2019-06-12 13:32:40

标签: node.js google-app-engine google-cloud-platform environment-variables google-cloud-build

我要在Cloud Build中创建一个非常基本的Node.js应用程序的CI / CD管道,并将其部署到GCP appengine标准。

无秘密的环境变量存储在app.yaml文件中。但是我当然不想把我的秘密放在那里。实际上,我不想将它们放在任何位置的文件中(无论是否加密),因为该文件最终将出现在AppEngine实例上,并且可以由“不良管理员”“查看”。有很多示例建议对完整的文件(有时甚至是代码)进行加密/解密,但我不想走这条路。

我正在寻找一种在CI / CD管道中设置“在内存中”秘密环境变量的方法。有人吗?

我没有在app.yaml文件(env_variables)中添加任何秘密-可以正常工作 将加密的机密添加到我的cloudbuild.yaml文件中(秘密)-没有错误 在构建步骤中添加了secretEnv:,但价值并没有最终体现为app引擎中的process.env。[KEY]

cloudbuild.yaml

steps:
- name: 'gcr.io/cloud-builders/npm'
  args: ['install']
  dir: "appengine/hello-world/standard"
 - name: "gcr.io/cloud-builders/gcloud"
  args: ["app", "deploy", "test-app.yaml"]
  dir: "appengine/hello-world/standard"
  secretEnv: ['API_KEY', 'API_URL']

secrets:
- kmsKeyName: projects/XXXXXXXX/locations/global/keyRings/customintegrations-secrets/cryptoKeys/integration-secrets
  secretEnv:
    API_KEY: XXQAoHgKKoHBKOURrUU2RqU+ki8XyqmTjz+ns+MEWp5Kx3hQBpgSQgATFQ5yRdW4m1TLNqNRIdHIqVJi8tn8jFrtlHIEouOzNDe/ASlOT0ZQBfl9Rf7xlvOHAa667poBq2hEoMNvOclxUQ==
    API_URL: YYQAoHgKKklo08ZsQF+/8M2bmi9nhWEtb6klyY4rNthUhSIhQ8oSQQATFQ5ywKOxaM/TLwGDmvMtCpl/1stXOOK0kgy42yipYbw/J/QZL68bMat1u4H3Hvp/GMbUVIKEb9jwUtN2xvbL

我希望secretEnv: ['API_KEY', 'API_URL']将使解密的值可在应用程序引擎的代码(process.env.API_KEY)中访问。

1 个答案:

答案 0 :(得分:1)

这里是full tutorial,介绍如何将环境变量安全地存储在云构建(触发器)设置中并将其导入到您的应用中。

基本上有三个步骤:

  1. 将环境变量添加到您的构建触发设置之一中的“变量”部分

    Screenshot of where to add variables in build triggers

    在构建触发器中设置的常规变量必须以下划线(_)开头

  2. 配置cloudbuild.yaml(在代码示例的第二步)以从构建触发器中读取变量,将其设置为env vars,并将所有env vars写入本地.env文件中

    couldbuild.yaml(如下)添加到项目的根目录

steps:
- name: node:10.15.1
  entrypoint: npm
  args: ["install"]
- name: node:10.15.1
  entrypoint: npm
  args: ["run", "create-env"]
  env:
    - 'MY_SECRET_KEY=${_MY_SECRET_KEY}'
- name: "gcr.io/cloud-builders/gcloud"
  args: ["app", "deploy"]
timeout: "1600s"

create-env脚本添加到package.json

"scripts": {
  "create-env": "printenv > .env"
},

  1. 从.env读取环境变量到您的应用程序(config.js)

    安装dotenv软件包

    npm i dotenv -S

    向您的应用添加config.js

// Import all env vars from .env file
require('dotenv').config()

export const MY_SECRET_KEY = process.env.MY_SECRET_KEY

console.log(MY_SECRET_KEY) // => Hello

完成!现在,您可以通过触发云构建来部署应用程序,并且您的应用程序将可以访问环境变量。