網站搜尋

node.js - 使用憑證、私鑰和 CA 的 AWS Lambda NodeJS 請求


要連接到特定的 API,我們需要從部署在 AWS Lambda 的 NodeJS 函數中包含證書、私鑰和 CA。

在測試環境中,我們可以直接使用 fs.readFileSync 讀取測試伺服器上的本地路徑,但當然這在 AWS Lambda 中不適用。

我們的通話如下:

return request({
      method: args.method,
      uri: this.baseUrl,
      headers: {
        "User-Agent": "XXXX-Wrapper"
      },
      form: this.queryParams,
      json: false,
      cert: this.cert,
      key: this.key,
      ca: this.ca
    }, callback);

是否有方法可以從 AWS KMS 讀取憑證資訊,或者唯一的方法是將這些憑證上傳到私人 S3 儲存桶並從那裡讀取它們?

我們也曾試圖將原始憑證以加密值的形式儲存在參數存儲中,並將其作為 NodeJS 過程變量從那裡讀取,但這似乎並不可行。

答案#1

可能有更好的方法,但我們已決定將憑證放在具有嚴格存取和物件鎖定控制的安全儲存桶中。

在 TypeScript/NodeJS 的 Lambda 中,我們現在只需初始化 S3 客戶端並像這樣執行請求

const cert = await S3.getFile(Config.get('...'), 'certificate.crt')
const key = await S3.getFile(Config.get('...'), 'private.key')
const ca = await S3.getFile(Config.get('...'), Config.get('ca_path'))

return request({
      method: args.method,
      uri: this.baseUrl,
      headers: {
        ....
      },
      form: formData,
      json: false,
      cert:cert,
      key:key,
      ca:ca
}, callback);

S3 服務只是 aws-node 函式庫的一個封裝器。