選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

AWS CDK 合成時間的政策驗證

焦點模式
AWS CDK 合成時間的政策驗證 - AWS Cloud Development Kit (AWS CDK) v2

這是 AWS CDK v2 開發人員指南。較舊的 CDK v1 已於 2022 年 6 月 1 日進入維護,並於 2023 年 6 月 1 日結束支援。

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

這是 AWS CDK v2 開發人員指南。較舊的 CDK v1 已於 2022 年 6 月 1 日進入維護,並於 2023 年 6 月 1 日結束支援。

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

合成時間的政策驗證

如果您或您的組織使用任何政策驗證工具,例如 AWS CloudFormation GuardOPA,來定義 AWS CloudFormation 範本的限制條件,您可以在合成時間將它們與 AWS CDK 整合。透過使用適當的政策驗證外掛程式,您可以讓 AWS CDK 應用程式在合成後立即針對您的政策檢查產生的 AWS CloudFormation 範本。如果有任何違規,合成將會失敗,並且報告會列印到主控台。

於 AWS CDK 合成時間執行的驗證會在部署生命週期中的某個時間點驗證控制項,但不會影響在合成之外發生的動作。範例包括直接在主控台中或透過服務 APIs採取的動作。它們在合成後不會抵抗變更 AWS CloudFormation 範本。應獨立設定其他機制,例如AWS CloudFormation 勾點或 ,以更具權威性的方式驗證相同的規則集AWS Config。不過,在開發期間 AWS CDK 評估規則集的能力仍然很有用,因為它將提高偵測速度和開發人員生產力。

AWS CDK 政策驗證的目標是將開發期間所需的設定數量降至最低,並盡可能地簡單。

注意

此功能被視為實驗性,外掛程式 API 和驗證報告的格式都可能在未來變更。

適用於應用程式開發人員

若要在您的應用程式中使用一或多個驗證外掛程式,請使用 的 policyValidationBeta1 屬性Stage

import { CfnGuardValidator } from '@cdklabs/cdk-validator-cfnguard'; const app = new App({ policyValidationBeta1: [ new CfnGuardValidator() ], }); // only apply to a particular stage const prodStage = new Stage(app, 'ProdStage', { policyValidationBeta1: [...], });

合成後,會以這種方式註冊的所有外掛程式都會立即被叫用,以驗證在您定義的範圍內產生的所有範本。特別是,如果您在 App 物件中註冊範本,則所有範本都必須經過驗證。

警告

除了修改雲端組件之外,外掛程式還可以執行 AWS CDK 應用程式可以執行的任何動作。他們可以從檔案系統讀取資料、存取網路等。身為外掛程式的消費者,您有責任驗證使用是否安全。

AWS CloudFormation Guard 外掛程式

使用 CfnGuardValidator 外掛程式可讓您使用 AWS CloudFormation Guard來執行政策驗證。CfnGuardValidator 外掛程式隨附一組內建的主動AWS Control Tower 控制。您可以在專案文件中找到目前的規則集。如 中所述合成時間的政策驗證,我們建議組織使用AWS CloudFormation 勾點設定更權威的驗證方法。

對於AWS Control Tower客戶,這些相同的主動控制可以部署在您的組織中。當您在 AWS Control Tower 環境中啟用 AWS Control Tower 主動控制時,這些控制可以停止透過 部署的不合規資源。 AWS CloudFormation如需受管主動控制及其運作方式的詳細資訊,請參閱 AWS Control Tower 文件

這些綁 AWS CDK 定控制項和受管 AWS Control Tower 主動控制項最好一起使用。在此案例中,您可以使用 AWS Control Tower 與雲端環境中作用中的相同主動控制來設定此驗證外掛程式。然後,您可以透過cdk synth在本機執行,快速獲得 AWS CDK 應用程式傳遞 AWS Control Tower 控制項的信心。

驗證報告

當您合成 AWS CDK 應用程式時,系統會呼叫驗證器外掛程式,並列印結果。範例報告顯示如下。

Validation Report (CfnGuardValidator) ------------------------------------- (Summary) ╔═══════════╤════════════════════════╗ ║ Status │ failure ║ ╟───────────┼────────────────────────╢ ║ Plugin │ CfnGuardValidator ║ ╚═══════════╧════════════════════════╝ (Violations) Ensure S3 Buckets are encrypted with a KMS CMK (1 occurrences) Severity: medium Occurrences: - Construct Path: MyStack/MyCustomL3Construct/Bucket - Stack Template Path: ./cdk.out/MyStack.template.json - Creation Stack: └── MyStack (MyStack) │ Library: aws-cdk-lib.Stack │ Library Version: 2.50.0 │ Location: Object.<anonymous> (/home/johndoe/tmp/cdk-tmp-app/src/main.ts:25:20) └── MyCustomL3Construct (MyStack/MyCustomL3Construct) │ Library: N/A - (Local Construct) │ Library Version: N/A │ Location: new MyStack (/home/johndoe/tmp/cdk-tmp-app/src/main.ts:15:20) └── Bucket (MyStack/MyCustomL3Construct/Bucket) │ Library: aws-cdk-lib/aws-s3.Bucket │ Library Version: 2.50.0 │ Location: new MyCustomL3Construct (/home/johndoe/tmp/cdk-tmp-app/src/main.ts:9:20) - Resource Name: amzn-s3-demo-bucket - Locations: > BucketEncryption/ServerSideEncryptionConfiguration/0/ServerSideEncryptionByDefault/SSEAlgorithm Recommendation: Missing value for key `SSEAlgorithm` - must specify `aws:kms` How to fix: > Add to construct properties for `cdk-app/MyStack/Bucket` `encryption: BucketEncryption.KMS` Validation failed. See above reports for details

根據預設,報告將以人類可讀格式列印。如果您想要 JSON 格式的報告,@aws-cdk/core:validationReportJson請透過 CLI 使用 啟用報告,或直接將其傳遞給應用程式:

const app = new App({ context: { '@aws-cdk/core:validationReportJson': true }, });

或者,您可以使用專案目錄中的 cdk.jsoncdk.context.json 檔案來設定此內容索引鍵/值對 (請參閱 內容值和 AWS CDK)。

如果您選擇 JSON 格式, AWS CDK 會將政策驗證報告列印到雲端組件目錄中名為 policy-validation-report.json 的檔案。對於預設的人類可讀格式,報告將列印到標準輸出。

適用於外掛程式作者

外掛程式

AWS CDK 核心架構負責註冊和叫用外掛程式,然後顯示格式化驗證報告。外掛程式的責任是充當 AWS CDK 架構和政策驗證工具之間的轉譯層。外掛程式可以使用 支援的任何語言建立 AWS CDK。如果您要建立可能由多種語言使用的外掛程式,建議您在 中建立外掛程式,TypeScript以便使用 JSII 以每種 AWS CDK 語言發佈外掛程式。

建立外掛程式

AWS CDK 核心模組與政策工具之間的通訊協定是由 IPolicyValidationPluginBeta1介面定義。若要建立新的外掛程式,您必須撰寫實作此界面的類別。您需要實作兩件事:外掛程式名稱 (透過覆寫 name 屬性) 和 validate() 方法。

框架將呼叫 validate(),傳遞 IValidationContextBeta1 物件。要驗證的範本位置由 提供templatePaths。外掛程式應傳回 的執行個體ValidationPluginReportBeta1。此物件代表使用者在合成結束時收到的報告。

validate(context: IPolicyValidationContextBeta1): PolicyValidationReportBeta1 { // First read the templates using context.templatePaths... // ...then perform the validation, and then compose and return the report. // Using hard-coded values here for better clarity: return { success: false, violations: [{ ruleName: 'CKV_AWS_117', description: 'Ensure that AWS Lambda function is configured inside a VPC', fix: 'https://docs.bridgecrew.io/docs/ensure-that-aws-lambda-function-is-configured-inside-a-vpc-1', violatingResources: [{ resourceName: 'MyFunction3BAA72D1', templatePath: '/home/johndoe/myapp/cdk.out/MyService.template.json', locations: 'Properties/VpcConfig', }], }], }; }

請注意,外掛程式不允許修改雲端組件中的任何內容。任何嘗試這樣做都會導致合成失敗。

如果您的外掛程式依賴外部工具,請記住,有些開發人員可能尚未在工作站中安裝該工具。為了盡量減少摩擦,強烈建議您提供一些安裝指令碼和外掛程式套件,以自動化整個程序。更好的是,在安裝套件的過程中執行該指令碼。例如npm,使用 ,您可以將它新增至 package.json 檔案中的postinstall指令碼

處理豁免

如果您的組織有處理豁免的機制,則可以將其實作為驗證器外掛程式的一部分。

說明可能豁免機制的範例案例:

  • 組織有一個規則,即不允許公有 Amazon S3 儲存貯體,在某些情況下除外。

  • 開發人員正在建立屬於這些案例之一的 Amazon S3 儲存貯體,並請求豁免 (例如建立票證)。

  • 安全工具知道如何從註冊豁免的內部系統讀取

在這種情況下,開發人員會在內部系統中請求例外狀況,然後需要某種方法來「註冊」該例外狀況。將 新增至 防護外掛程式範例,您可以建立外掛程式,透過篩選內部票證系統中具有相符豁免的違規來處理豁免。

如需實作範例,請參閱現有的外掛程式。

隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。