【发布时间】:2019-10-27 01:04:13
【问题描述】:
我正在 Cloud Build 中创建一个非常基本的 Node.js 应用程序的 CI/CD 管道,并部署到 GCP appengine 标准。
非机密环境变量存储在app.yaml 文件中。但我当然不想把我的秘密放在那里。事实上,我不想将它们放在任何文件中(无论是否加密),因为该文件最终会出现在 AppEngine 实例上,并且可以被“坏管理员”“查看”。有许多示例建议加密/解密完整文件(有时甚至是代码),但我不想走这条路。
我正在寻找一种将秘密环境变量设置为“内存中”的方法,作为 CI/CD 管道的一部分。有人吗?
我在 app.yaml 文件 (env_variables) 中没有添加任何秘密 - 工作正常
在我的cloudbuild.yaml 文件(秘密)中添加了加密的秘密 - 没有错误
将 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) 中访问。
【问题讨论】:
-
我一直想做同样的事情,但我发现的唯一方法是使用 Cloud Build 服务帐户有权访问和下载+解密的 KMS 加密 Cloud Storage 中的文件。这是为了集中(在某种程度上)秘密。
-
谢谢。您如何将文件中的值放入 env 变量中,以便您可以在 process.env.API_KEY 之类的代码中访问它们?
-
这个tutorial 解释了这个过程,所以一旦在构建步骤中解密了文件,您应该能够正常引用它。
-
@CorinneWhite 您引用的文档没有将 secretEnv: ['API_KEY', 'API_URL'] 解密值作为 ENV 变量。我已经尝试过了。你是在告诉我,我绝对没有办法达到我所需要的。 IE。 ENV 变量中的秘密,没有包含部署到 GAE 的明文秘密的文件。(详细信息请阅读上文)
-
使用“gcloud builds submit”命令,您可以替换构建规范中的参数:cloud.google.com/sdk/gcloud/reference/builds/…。查看文档,让我知道它是否适合您。
标签: node.js google-app-engine google-cloud-platform environment-variables google-cloud-build