node.js - Cloudbuild 中的 secret 环境变量(没有文件),怎么样?

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

我正在 Cloud Build 中为一个非常基本的 Node.js 应用创建一个 CI/CD 管道,并部署到 GCP 应用引擎标准。

非 secret 环境变量存储在 app.yaml 文件中。但我当然不想把我的 secret 放在那里。事实上,我不想将它们放在任何地方的任何文件中(加密与否),因为该文件将最终出现在 AppEngine 实例上,并且可以被“坏管理员”“查看”。有很多示例建议加密/解密完整文件(有时甚至是代码),但我不想走那条路。

我正在寻找一种方法来将 secret 环境变量设置为“内存中”作为 CI/CD 管道的一部分。有人吗?

我在 app.yaml 文件 (env_variables) 中添加了 none secrets - 工作正常 将加密的 secret 添加到我的 cloudbuild.yaml 文件( secret )中 - 没有错误 将 secretEnv: 添加到构建步骤中,但值不会以应用引擎中的 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) 中访问解密值引擎。

最佳答案

这是一个full tutorial关于如何在您的云构建(触发器)设置中安全地存储环境变量并将它们导入您的应用。

基本上分为三个步骤:

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

    Screenshot of where to add variables in build triggers

    按照惯例,在构建触发器中设置的变量必须以下划线 (_) 开头

  2. 配置 cloudbuild.yaml(在代码示例的第二步)从构建触发器中读取变量,将它们设置为环境变量,并将所有环境变量写入本地.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

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

关于node.js - Cloudbuild 中的 secret 环境变量(没有文件),怎么样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56563499/

相关文章:

google-app-engine - Appengine 搜索语言

google-cloud-platform - 如何让 Google Cloud Functions 保持温暖?

go - 将行写入 Cloud Bigtable 时出现客户端错误

node.js - 语义版本控制和持续部署

javascript - 如何在闭包之外调用方法

google-app-engine - 如何在 App Engine 中存储和搜索数据?

java - 如何让我的客户将 BigQuery 查询结果导出为 CSV

javascript - 如何使用nodejs构建从nodejs脚本输出的json文件?

node.js - 为什么启动 sails 时会出现有关 Grunt 的错误

javascript - 直接从浏览器(包括 Safari)调用 Google Cloud Speech API 是否可行且可取?