如何避免 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 上有几个问答是朝着这个方向发展的,但我找不到答案:
- Setting environment variables in Google Cloud Platform using Cloud Functions
- 还有更多。
我想这需要保密,但如何做到这一点,将它们存储在哪里?还是有其他方法,例如使用作为 request
参数传递的 json?
在 Cloud Function 中管理机密的推荐方法是从 Secret Manager 安装机密。该文档很好地解释了如何设置它:https://cloud.google.com/functions/docs/configuring/secrets
简而言之:
- 在 Secret Manager 下创建您的 Secret;
- 编辑您的云功能 -> 高级选项 -> 安全;
- 映射您希望在运行时可用的秘密;
- 将角色
roles/secretmanager.secretAccessor
授予绑定到 Cloud Function 的服务帐户;
- 完成后,您可以将机密用作环境变量(就像您习惯的那样,并在您的描述中提到);
到目前为止,我在创建 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 上有几个问答是朝着这个方向发展的,但我找不到答案:
- Setting environment variables in Google Cloud Platform using Cloud Functions
- 还有更多。
我想这需要保密,但如何做到这一点,将它们存储在哪里?还是有其他方法,例如使用作为 request
参数传递的 json?
在 Cloud Function 中管理机密的推荐方法是从 Secret Manager 安装机密。该文档很好地解释了如何设置它:https://cloud.google.com/functions/docs/configuring/secrets
简而言之:
- 在 Secret Manager 下创建您的 Secret;
- 编辑您的云功能 -> 高级选项 -> 安全;
- 映射您希望在运行时可用的秘密;
- 将角色
roles/secretmanager.secretAccessor
授予绑定到 Cloud Function 的服务帐户; - 完成后,您可以将机密用作环境变量(就像您习惯的那样,并在您的描述中提到);