首页 > 解决方案 > 检索存储在 Secret Manager 中的 Google Cloud 中的环境变量

问题描述

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

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

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

这篇文章非常接近描述我想要实现的目标,但我看不出这是如何解决属性值是我无法提交到我的存储库的实际秘密,并且需要在应用程序启动时从某个地方访问的事实。

问题描述了如何从 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 Cloud Platform 访问环境变量的正确方法?

标签: google-cloud-platformenvironment-variablesbitbucket-pipelinesgcp-secret-manager

解决方案


我建议您参考此文档链接创建和访问秘密管理器。

此文档链接提供了将 Secret Manager 与各种 Google Cloud 服务结合使用的资源。

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

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

请参阅有关类似问题的讨论


推荐阅读