如何避免 Google Cloud Function 中的纯文本环境变量,而是秘密传递它们?

How to avoid plain text environment variables in a Google Cloud Function and instead pass them secretly?

到目前为止,我在创建 Cloud Function 的第一步中添加了纯文本环境变量,在第二步中我调用了示例数据库连接 URL 变量,包括敏感凭据:

def my_cloud_function(request):
    from os import environ
    
    ...
    db_user = environ["DB_USER"]
    db_pass = environ["DB_PASS"]
    db_name = environ["DB_NAME"]
    db_host = environ["DB_HOST"]
    db_port = environ["DB_PORT"]
    ...

(或使用 os.getenv() 而不是 os.environ())。

但我不想在此变量菜单中公开这些敏感的连接参数,任何有权单击“变量”选项卡的人都可以使用这些参数。如果我可以单击变量并查看同事的登录凭据,那就很尴尬了。但数据库的其他部分 URL 最好保密。

如何在不向任何人公开环境变量的情况下使用环境变量,最好是从一个我也可以推送到 git 的不可读加密文件?

Stack Overflow 上有几个问答是朝着这个方向发展的,但我找不到答案:

我想这需要保密,但如何做到这一点,将它们存储在哪里?还是有其他方法,例如使用作为 request 参数传递的 json?

在 Cloud Function 中管理机密的推荐方法是从 Secret Manager 安装机密。该文档很好地解释了如何设置它:https://cloud.google.com/functions/docs/configuring/secrets

简而言之:

  1. 在 Secret Manager 下创建您的 Secret;

  1. 编辑您的云功能 -> 高级选项 -> 安全;
  2. 映射您希望在运行时可用的秘密;
  3. 将角色 roles/secretmanager.secretAccessor 授予绑定到 Cloud Function 的服务帐户;
  4. 完成后,您可以将机密用作环境变量(就像您习惯的那样,并在您的描述中提到);