簡體   English   中英

我如何處理 Google Cloud Functions 中的機密?

[英]How do i handle secrets in Google Cloud Functions?

這里的常見做法是什么? gcloud好像沒有提供任何工具。 我現在正在從本地機器部署功能,所以我可以對秘密進行硬編碼,但這似乎不合適。 另外,CI/CD 呢? 在這種情況下,我需要將機密作為環境變量傳遞。 這甚至可能嗎?

您可以為此使用Secret Manager 按照鏈接上的說明添加密鑰。

我發現的唯一 GOTCHA 是默認情況下服務帳戶沒有對機密的讀取訪問權限,您必須手動授予權限,如下所示:

添加秘密權限

自從發表評論以來,我找到了一種相對簡單的方法 - 提供一個 config .json文件。 這是我根據他們的 Slack 函數示例編寫的示例:

config.json文件在與index.js相同的目錄中:

{
  "foo": "bar"
}

索引.js

const config = require('./config.json');

exports.envTest = (req, res) => {
  res.status(200).send(config.foo);
};

當您部署函數並轉到 URL 時,您應該會看到響應bar

優缺點:

優點:

  1. 在您的 IDE 中輕松設置和配置
  2. 可以將配置文件放入.gitignore以確保您的機密不會最終出現在 repo 中
  3. 文件本身可以存儲在一個安全的位置,並且只提供給負責部署功能的個人

缺點:

  1. 與適當的秘密管理相比笨重
  2. 需要注意確保文件不會落入壞人之手
  3. 在谷歌雲控制台中查看函數源碼可以明文讀取文件

總的來說,它與真正的機密管理系統相去甚遠,但它足以讓我堅持下去,直到此功能最終成為 Cloud Functions 核心。

您應該使用Cloud Key Management Service(KMS)
不要將帶有文件或環境變量的純機密推送到 Cloud Functions。

一種解決方案如下:

  1. 在 Cloud KMS 上創建密鑰
  2. 使用該密鑰加密秘密文件
  3. 將加密的機密文件上傳到 Google Cloud Storage(GCS)(可由指定用戶訪問)
  4. 在 Cloud Function Execution 中,從 GCS 獲取上傳的機密文件,解密並使用它

[Ref] 使用 Google Cloud Platform 進行機密管理

截至 2021-08-25,在 Google Cloud Functions 中處理機密的首選方式是使用本機 Secret Manager 集成 此集成使您能夠通過環境變量或文件系統在 Google Secret Manager 中裝載機密。

  1. 創建您的秘密或將您的秘密遷移到 Google Secret Manager(有一個慷慨的永遠免費的層):

     $ gcloud secrets create "my-secret" --replication-policy="automatic" --data=...
  2. 更新您的雲 Function 部署以引用秘密:

    作為環境變量:

     $ gcloud beta functions deploy "my-function" --set-secrets "MY_SECRET=my-secret:latest"

    通過文件系統:

     $ gcloud beta functions deploy "my-function" --set-secrets "/path/to/my/secret=my-secret:latest"

為了實踐最小權限原則,建議將每個 Cloud Function 部署為專用服務帳戶。 您需要授予該服務帳戶訪問您的應用程序所需機密的權限。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM