检索存储在秘密管理器中的 Google 云中的环境变量

Retrieving environment variables in Google Cloud stored in secret manager

我无法检索在我的 bitbucket 部署的应用程序中的代码中访问的环境变量。 当我的应用程序启动时,我想获取 db uri,如下所示: const uri = process.env.MONGODB_CONNECTION_URI;

每当我从本地构建和推送工件时,我的环境变量都会从我本地存储在我机器上的 .env 文件成功传递。显然我不想提交这个文件。

当我使用 Bitbucket 管道将我的应用程序部署到 GCP 时。我能够成功地将新工件推送到 GCP。但是在应用程序启动时,它无法检索我的 db-uri。

This 文章非常接近描述我想要实现的目标,但我不明白这如何解决 属性 值是我无法承诺的实际秘密这一事实我的存储库,需要在应用程序启动时从 某处 .

访问

This 问题描述了如何从 Cloud Pipeline 中的秘密管理器访问变量,而不是在应用程序本身中。

我使用预定义的google-app-engine-deploy-pipe。我的 bitbucket-pipelines.yml 的相关部分如下所示:

branches:
    develop:
      - step:
          name: Deploy
          deployment: test
          script:
            - pipe: atlassian/google-app-engine-deploy:1.0.0
              variables:
                  KEY_FILE: $GCP_SECRET
                  PROJECT: 'test-project'
                  DEPLOYABLES: 'test.yaml'
                  PROMOTE: 'false'
                  STOP_PREVIOUS_VERSION: 'false'

GCP_SECRET 是 base-64 编码的 GCP 服务帐户,从 Bitbucket 中的秘密中获取,运行良好。

test.yml 里面,我有以下内容:

runtime: nodejs
env: flex
instance_class: B1
manual_scaling:
  instances: 1
env_variables:
  NODE_ENV: "test"
  MONGODB_CONNECTION_URI: $MONGODB_CONNECTION_URI

所以我的问题是 MONGODB_CONNECTION_URI。 我尝试在 GCP Secret Manager 中添加一个新机密,其中我有一个带有实际连接字符串的条目 MONGODB_CONNECTION_URI,但我的应用程序在启动时无法找到这个 属性。

我哪里错了?关于如何传递我误解的秘密有什么基本的东西吗?

我可以在 Bitbucket 部署管道中定义和传递变量吗?还是直接从Google云平台访问环境变量的正确方法?

我建议您参考此文档 link 以便 创建和访问秘密管理器。

此文档 link 提供了有关 将 Secret Manager 与各种 Google 云服务结合使用的资源。

例如,访问 Secret Manager 机密并将它们公开为环境变量或通过 Cloud Functions 的文件系统公开。有关详细信息,请参阅使用 Secret Manager secrets with Cloud Functions

确保添加机密版本需要机密、项目、文件夹或组织的机密管理员管理员角色 (roles/secretmanager.admin)。无法在机密版本上授予角色。

参考 this 对类似问题的讨论。

我在 this 指南的帮助下解决了这个问题

我觉得这个解决方案有点老套,但至少现在对我来说效果很好。基本上,我:

  • 在我的存储库中创建一个 shell 脚本,定义我想要填充的变量的名称。
  • 运行 bitbucket 管道中的脚本,填充了我的秘密 bitbucket 部署变量。
  • 此脚本的结果是一个包含传递的秘密值的环境文件,并正确传递到我的应用程序。