当前位置: 首页 > 知识库问答 >
问题:

检索存储在secret manager中的谷歌云中的环境变量

辛麻雀
2023-03-14

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

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

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

这篇文章非常接近于描述我想要实现的目标,但我不明白这是如何解决这样一个事实,即属性值是一个实际的秘密,我无法提交给回购协议,需要在应用程序启动时从某处访问它。

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

我使用预定义的谷歌应用程序引擎部署管道。我的bitbucket管道的相关部分。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中的SECRET获取,运行良好。

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秘密管理器中添加一个新的秘密,其中我有一个条目MONGODB_CONNECTION_URI与实际的连接字符串,但我的应用程序无法在启动时找到此属性。

我哪里做错了?在如何传递我误解的秘密方面,有什么基本的东西吗?

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

共有2个答案

虞安康
2023-03-14

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

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

  • 在我的存储库中创建一个shell脚本,定义我想要填充的变量的名称
  • 在bitbucket管道中运行脚本,填充我的秘密bitbucket部署变量
  • 这个脚本的结果是一个env-文件,并正确地传递给我的应用程序
章学义
2023-03-14

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

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

例如,访问秘密管理器机密,并将其作为环境变量或通过云函数中的文件系统公开。有关详细信息,请参阅将秘密管理器机密与云函数一起使用。

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

请参阅关于类似问题的讨论。

 类似资料:
  • 我想知道是否有可能从非谷歌App Engine服务器上使用API搜索存储在谷歌云存储中的文件。

  • 在谷歌云存储中,我在名为图像的根桶中有一个名为猫的桶。我正在使用google-api-ruby-Client gem上传文件。我可以将文件上传到根桶“图像”,但上传到“图像/猫”不起作用。我知道谷歌云存储中的存储桶没有斜杠的概念,所以我无法弄清楚如何指定嵌套存储桶的名称。 这给出了nil:NilClass的错误

  • 我是一个非营利组织的谷歌办公套件管理员,刚刚发现了数据导出功能,这似乎就像个人账户的外卖。 导出文件已经准备好,现在可以从谷歌云平台存储中的存储桶下载。然而,有很多很多文件夹,试图进出每个文件夹来下载很多很多。每个文件中的zip文件听起来都是一个令人头疼的问题。 我在Mac上使用Transmit,它可以通过与Amazon S3的互操作性连接到谷歌云存储。然而,当我连接时,我什么也看不到(因为我不使

  • 我有一个具有统一访问控制的Google云存储桶,我在权限中添加了“诱惑者”。它说该对象是公共的,但当我尝试打开链接时,仍会收到此消息:“匿名调用方没有storage.objects.get access to the Google Cloud storage object”错误代码为“401”。我希望任何用户都能够访问该链接。我该怎么做?提前谢谢! 向你问好本

  • 我建立Android应用程序链接到谷歌云存储。我想允许访问GCS到我的Android应用程序只。 谷歌提供三种安全连接地面军事系统的解决方案: Oauth 2.0(谷歌账户也是如此) 资料来源:https://developers.google.com/storage/docs/authentication?hl=FR 是否有其他通过地面军事系统安全连接的解决方案?我希望通过这种方式在地面军事系统

  • 我们一直在使用服务,在(AWS)中,我们意外删除了一个目录,因此我们认为它应该在中,但是经过查看,尽管处于打开状态,但它并不存在。