自訂 Lambda 規則 (一般範例) - AWS Config

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

自訂 Lambda 規則 (一般範例)

完成下列程序,建立自訂 Lambda 規則。若要建立自訂 Lambda 規則,請先建立包含規則評估邏輯的 AWS Lambda 函數。然後,您會將函數與您在 AWS Config中建立的自訂 Lambda 規則建立關聯。

重要

作為允許呼叫 Lambda 函數之 AWS Config 權限時的安全性最佳實務,我們強烈建議您使用sourceARN和/或在叫用請求中限制 Lambda 資源型政策sourceAccountId中的存取權。如需詳細資訊,請參閱 AWS Lambda 資源型政策的安全最佳實務

建立自訂組態規則的 AWS Lambda 函數

Lambda 函數是您上傳至其中的自訂程式碼 AWS Lambda,由事件來源發佈至該函數的事件所叫用。如果 Lambda 函數與 Config 規則相關聯,則會在規則的觸發程序發生時 AWS Config 叫用該函數。Lambda 函數接著會評估 AWS Config傳送的組態資訊,並傳回評估結果。如需 Lambda 函數的詳細資訊,請參閱《AWS Lambda 開發人員指南》中的函數和事件來源一節。

您可以使用受支援的程式設計語言,為自訂 Lambda 規則建立 Lambda 函數。 AWS Lambda 若要簡化此工作,您可以自訂 AWS Lambda 藍圖或重複使用 AWS Config Rules GitHub 存放庫中的範例函數。

AWS Lambda 藍圖

主 AWS Lambda 控台提供範例函數或藍圖,您可以透過新增自己的評估邏輯來自訂這些函數。當您建立函數時,您可以選擇以下其中一個藍圖:

  • config-rule-change-triggered— 當您的 AWS 資源設定變更時觸發。

  • config-rule-periodic— 以您選擇的頻率觸發 (例如,每 24 小時)。

AWS Config 規則 GitHub 儲存庫

自訂 Lambda 規則範例函數的公用儲存庫可在 GitHub網頁式程式碼託管和共用服務上取得。示例函數是由社區開發和貢 AWS 獻的。如果您想要使用範例,可以將其程式碼複製到新 AWS Lambda 函式中。若要檢視儲存庫,請參閱 https://github.com/awslabs/aws-config-rules/

為自訂規則建立函數
  1. 請登入 AWS Management Console 並開啟 AWS Lambda 主控台,網址為 https://console.aws.amazon.com/lambda/

  2. 在 AWS Management Console 功能表中,確認區域選取器已設定為支援 AWS Config 規則的區域。如需支援區域的清單,請參閱《Amazon Web Services 一般參考》中的 AWS Config 區域與端點

  3. 選擇 Create a Lambda function (建立 Lambda 函數)

  4. 在 [使用藍圖] 頁面上,您可以為 AWS Config 規則選擇其中一個藍圖功能做為起點,或者選擇略過,在沒有藍圖的情況下繼續進行。

  5. Configure triggers (設定觸發條件) 頁面中,選擇 Next (下一步)。

  6. 基本資訊 頁面上,輸入名稱和敘述。

  7. Runtime (執行時間) 中,選擇您編寫函數的程式設計語言。

  8. Code entry type (程式碼項目類型) 中,選擇您慣用的項目類型。如果您使用藍圖,請保留預先設定的程式碼。

  9. 使用您選取的程式碼項目類型所需的方法來提供程式碼。如果您使用的是藍圖,程式碼編輯器中提供的函數程式碼,可讓您自訂並納入您自己的評估邏輯。您的程式碼可以評估呼叫函式時所 AWS Config 提供的事件資料:

    • 對於以config-rule-change-triggered藍圖為基礎的函數,或針對由組態變更觸發的函數,事件資料是變更之 AWS 資源的組態項目或過大的組態項目物件。

    • 對於基於config-rule-periodic藍圖的函數,或者針對以您選擇的頻率觸發的函數,事件資料是 JSON 物件,其中包含有關評估何時觸發的資訊。

    • 對於這兩種類型的函數,都會以 JSON 格式 AWS Config 傳遞規則參數。當您在 AWS Config中建立自訂 Lambda 規則時,可以定義要傳遞哪些規則參數。

    • 如需呼叫函數時 AWS Config 發佈的事件範例,請參閱AWS Config 規則的範例事件

  10. 針對 執行角色,選擇 從 AWS 政策範本建立新角色

  11. Role name (角色名稱) 中,輸入名稱。

  12. 對於 Policy templates (政策範本),選擇 AWS Config Rules permission ( Config Rules 許可)

  13. 確認詳細資訊,接著選擇 建立函數

在中建立自訂規則 AWS Config

用 AWS Config 於建立自訂 Lambda 規則,並將該規則與 Lambda 函數產生關聯。

建立自訂角色
  1. 請在以下位置開啟 AWS Config 主控台。 https://console.aws.amazon.com/config/

  2. 在 AWS Management Console 功能表中,確認區域選取器設定為您為自訂 Lambda 規則建立 AWS Lambda 函數的相同區域。

  3. Rules (規則) 頁面,選擇 Add rule (新增規則)

  4. 指定規則類型 頁面上,選擇 建立自訂規則

  5. Configure rule (設定規則) 頁面中,輸入名稱與描述。

  6. AWS Lambda function ARN ( 函數 ARN) 中,指定 AWS Lambda 指派給您的函數的 ARN。

    注意

    您在此步驟中指定的 ARN 不得包含 $LATEST 限定詞。您可以指定沒有版本限定符或除了任何限定符之外$LATEST的 ARN。 AWS Lambda 支持功能版本控制,並且每個版本都被分配一個帶有限定符的 ARN。 AWS Lambda 使用最新版本的$LATEST限定詞。

  7. Trigger type (觸發類型) 中,選擇下列其中一項或兩項:

    • 組態變更 — 在偵測到組態變更時 AWS Config 叫用 Lambda 函數。

    • 定期 — 以您選擇的頻率 AWS Config 叫用 Lambda 函數 (例如,每 24 小時)。

  8. 如果規則的觸發器類型包含組態變更,請為 AWS Config 呼叫 Lambda 函數的變更範圍指定下列其中一個選項:

    • 所有變更 — 建立、變更或刪除記錄的任何資源時。 AWS Config

    • 資源 – 建立、變更或刪除符合指定類型或加上識別符類型的資源時。

    • 標籤 – 建立、變更或刪除含指定標籤的任何資源時。

  9. 如果規則的觸發器類型包含「週期性」,請指定 AWS Config 呼叫 Lambda 函數的頻率

  10. 在「參數」區段中,指定 AWS Lambda 函數評估的任何規則參數以及所需的值。

  11. 選擇下一步。在 檢閱和建立 頁面上,驗證規則的詳細資訊,然後選擇 Add rule function。您的新規則會顯示在 規則 頁面上。

    合規性將顯示評估... 直到從您的 AWS Lambda 函數 AWS Config 收到評估結果。若規則和函數如預期般正常運作,則結果摘要會在幾分鐘之後出現。您可以使用重新整理按鈕來更新結果。

    如果規則或函數未如預期般正常運作,Compliance (合規) 可能會顯示以下其中一個項目:

    • 未報告結果-根據規則 AWS Config 評估您的資源。規則不適用於範圍內的 AWS 資源,指定的資源已遭刪除,或評估結果已遭刪除。若要取得評估結果,請更新規則、變更其範圍,或選擇 Re-evaluate (重新評估)

      如果規則未回報評估結果,也會顯示此訊息。

    • 沒有資源在範圍內- AWS Config 無法根據此規則評估您記錄的資 AWS 源,因為您的資源都不在規則的範圍內。您可以選擇 AWS Config 要在 Settings (設定) 頁面上記錄哪些資源。

    • Evaluations failed (評估失敗) - 如需有助於判斷問題的資訊,請選擇規則名稱以開啟它的詳細資訊頁面,並參閱錯誤訊息。

注意

當您使用 AWS Config 主控台建立自訂 Lambda 規則時,系統會自動為您建立適當的權限。如果您使用建立自訂 Lambda 規則 AWS CLI,則需要 AWS Config 授與使用aws lambda add-permission命令叫用 Lambda 函數的權限。如需詳細資訊,請參閱AWS Lambda 開發人員指南中的〈使用以資源為基礎的政策 AWS Lambda (Lambda 函數政策)〉。

在 AWS Config 授予叫用 Lambda 函數的權限之前,請參閱下一節AWS Lambda 資源型政策的安全最佳實務

AWS Lambda 資源型政策的安全最佳實務

作為安全性最佳實務,為了避免授予整個服務主體名稱 (SPN) 呼叫 Lambda 函數的許可,強烈建議您使用叫用請求中的 sourceARN 和/或 sourceAccountId 來限制 Lambda 資源型政策中的存取權。

sourceARN是正在調用 Lambda 函數的 AWS Config 規則的 ARN。

sourceAccountId 是建立規則之使用者的帳戶 ID。

限制 Lambda 資源型政策中的存取權限有助於確保 AWS Lambda 僅代表預期的使用者和案例存取您的資源。

若要新增 SPN 型許可,您需要使用以下 CLI

aws lambda add-permission --function-name rule lambda function name --action lambda:InvokeFunction --statement-id config --principal config.amazonaws.com

若要新增 SourceAccountId 權限

建立規則之前,您可以使用下列 CLI 將 sourceAccountId 型許可新增至資源型政策

aws lambda add-permission --function-name rule lambda function name --action lambda:InvokeFunction --statement-id config --principal config.amazonaws.com --source-account your account ID

若要同時新增 SourceArn 和 SourceAccountId 基礎權限

建立規則之後,您可以使用下列 CLI 將 sourceARN 型許可新增至資源型政策。這只允許特定規則 ARN 叫用 Lambda 函數。

aws lambda add-permission --function-name rule lambda function name --action lambda:InvokeFunction --statement-id config --principal config.amazonaws.com --source-account your account ID --source-arn ARN of the created config rule

評估其他資源類型

您可以建立自訂 Lambda 規則,針對尚未記錄的資源類型執行評估。 AWS Config如果您要評估目前未記錄的其他資源類型的相容性,此功 AWS Config 能非常有用。如需可讓您使用自訂 Lambda 規則來評估的額外資源類型清單,請參閱《AWS 資源類型參考》。

注意

為未記錄的資源類型建立自訂 Lambda 時 AWS Config,規則必須具有週期性觸發類型。不支援組態變更觸發器類型。如需詳細資訊,請參閱 AWS Config 規則的評估模式與觸發程式型態

範例
  1. 您想要在您的帳戶中評估 Amazon S3 Glacier 保存庫。 AWS Config目前不會記錄 Amazon S3 Glacier 保存庫資源。

  2. 您可以建立一個 AWS Lambda 函數來評估 Amazon S3 Glacier 文件庫是否符合您的帳戶需求。

  3. 您可以建立名為的自訂 Lambda 規則,evaluate-glacier-vaults然後將 AWS Lambda 函數指派給規則。

  4. AWS Config 叫用您的 Lambda 函數,然後根據您的規則評估 Amazon S3 冰川儲存庫。

  5. AWS Config 傳回評估,您可以檢視規則的符合性結果。

注意

您可以在 AWS Config 時間軸中檢視組態詳細資料,並在 AWS Config 主控台中查詢 AWS Config 支援的資源。如果您配置 AWS Config 為記錄所有資源類型,則會自動記錄新支援的資源。如需更多詳細資訊,請參閱 支援的資源類型