本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 AWS CloudFormation Guard 政策建立 AWS Config 自訂規則
由 Andrew Lok (AWS)、Kailash Havildar ()AWS、Nicole Brown (AWS) 和 Tanya Howell (AWS) 建立
環境:PoC 或試行 | 技術:安全、身分、合規;管理與治理 | |
AWS 服務:AWS CloudFormation;AWSConfig |
Summary
AWS Config 規則可協助您評估 AWS 資源及其目標組態狀態。有兩種類型的 AWS Config 規則: 受管和自訂。您可以使用 AWS Lambda 函數或使用 AWS CloudFormation Guard
使用 Guard 建立的規則提供比受管規則更精細的控制,而且通常比完全自訂的 Lambda 規則更容易設定。此方法可讓工程師和架構師能夠建置規則,而不需要知道 Python、NodeJS 或 Java,而這些是透過 Lambda 部署自訂規則的必要條件。
此模式提供可行的範本、程式碼範例和部署方法,協助您使用 Guard 來採用自訂規則。透過使用此模式,管理員可以使用 AWS Config 建置具有組態項目屬性的自訂合規規則。例如,開發人員可以針對 AWS Config 組態項目使用 Guard 政策來持續監控部署 AWS 和非AWS 資源的狀態、偵測規則違規,並自動啟動修復。
目標
讀取此模式後,您應該能夠:
了解 Guard 政策程式碼如何與服務互動 AWS Config 。
部署案例 1,這是使用 Guard 語法來驗證加密磁碟區的合規性的 AWS Config 自訂規則。此規則會驗證磁碟機是否正在使用,並驗證磁碟機類型是否為 gp3。
部署案例 2,這是使用 Guard 語法來驗證 Amazon GuardDuty 合規的 AWS Config 自訂規則。此規則會驗證 GuardDuty 記錄器是否已啟用 Amazon Simple Storage Service (Amazon S3) Protection 和 Amazon Elastic Kubernetes Service (Amazon EKS) Protection。
先決條件和限制
先決條件
作用中 AWS 帳戶
AWS Config,在 中設定 AWS 帳戶
限制
Guard 自訂規則只能查詢目標組態項目JSON記錄中的鍵值對
架構
您可以將 Guard 語法套用到 AWS Config 規則作為自訂政策。 AWS Config 擷取每個指定資源JSON的階層。 AWS Config 組態項目JSON的 包含鍵值對。這些屬性在 Guard 語法中用作指派給其對應值的變數。
以下是 Guard 語法的說明。JSON 使用組態項目中的變數,並加上%
字元。
# declare variable let <variable name> = <'value'> # create rule and assign condition and policy rule <rule name> when <CI json key> == <"CI json value"> { <top level CI json key>.<next level CI json key> == %<variable name> }
案例 1:Amazon EBS磁碟區
案例 1 部署使用 Guard 語法來驗證加密磁碟區的合規性的 AWS Config 自訂規則。此規則會驗證磁碟機是否正在使用,並驗證磁碟機類型是否為 gp3。
以下是案例 1 的 AWS Config 組態項目範例。此組態項目中有三個鍵值對,用作 Guard 政策中的變數:volumestatus
、 volumeencryptionstatus
和 volumetype
。此外,resourceType
金鑰也會用作 Guard 政策中的篩選條件。
{ "version": "1.3", "accountId": "111111111111", "configurationItemCaptureTime": "2023-01-15T19:04:45.402Z", "configurationItemStatus": "ResourceDiscovered", "configurationStateId": "4444444444444", "configurationItemMD5Hash": "", "arn": "arn:aws:ec2:us-west-2:111111111111:volume/vol-222222222222", "resourceType": "AWS::EC2::Volume", "resourceId": "vol-222222222222", "awsRegion": "us-west-2", "availabilityZone": "us-west-2b", "resourceCreationTime": "2023-01-15T19:03:22.247Z", "tags": {}, "relatedEvents": [], "relationships": [ { "resourceType": "AWS::EC2::Instance", "resourceId": "i-33333333333333333", "relationshipName": "Is attached to Instance" } ], "configuration": { "attachments": [ { "attachTime": "2023-01-15T19:03:22.000Z", "device": "/dev/xvda", "instanceId": "i-33333333333333333", "state": "attached", "volumeId": "vol-222222222222", "deleteOnTermination": true, "associatedResource": null, "instanceOwningService": null } ], "availabilityZone": "us-west-2b", "createTime": "2023-01-15T19:03:22.247Z", "encrypted": false, "kmsKeyId": null, "outpostArn": null, "size": 8, "snapshotId": "snap-55555555555555555", "state": "in-use", "volumeId": "vol-222222222222", "iops": 100, "tags": [], "volumeType": "gp2", "fastRestored": null, "multiAttachEnabled": false, "throughput": null, "sseType": null }, "supplementaryConfiguration": {} }
以下是使用 Guard 語法定義案例 1 中的變數和規則的範例。於下列範例中:
前三行使用
let
命令定義變數。 系統會為他們指派衍生自組態項目屬性的名稱和值。當條件相依性尋找符合 的
resourceType
鍵值對時,compliancecheck
規則區塊會新增AWS::EC2::Volume
。如果找到相符項目,則規則會繼續進行其餘JSON屬性,並在下列三個條件中尋找相符項目:state
、encrypted
和volumeType
。
let volumestatus = 'available' let volumetype = 'gp3' let volumeencryptionstatus = true rule compliancecheck when resourceType == "AWS::EC2::Volume" { configuration.state == %volumestatus configuration.encrypted == %volumeencryptionstatus configuration.volumeType == %volumetype }
如需實作此自訂規則的完整 Guard 自訂政策,請參閱 GitHub 程式碼儲存庫中的 awsconfig-guard-cft.yaml
案例 2: GuardDuty 合規
案例 2 部署使用 Guard 語法來驗證 Amazon GuardDuty 合規的 AWS Config 自訂規則。此規則會驗證 GuardDuty 記錄器是否已啟用 Amazon S3 Protection 和 Amazon EKS Protection。它還會驗證每隔 15 分鐘發佈一次 GuardDuty 調查結果。此案例可以部署在組織中 (在 AWS 區域 中 AWS Organizations) 的所有 AWS 帳戶 和 。
以下是案例 2 的 AWS Config 組態項目範例。此組態項目中有三個索引鍵值對,它們用作 Guard 政策中的變數:FindingPublishingFrequency
、 S3Logs
和 Kubernetes
。此外, resourceType
金鑰會用作政策中的篩選條件。
{ "version": "1.3", "accountId": "111111111111", "configurationItemCaptureTime": "2023-11-27T13:34:28.888Z", "configurationItemStatus": "OK", "configurationStateId": "7777777777777", "configurationItemMD5Hash": "", "arn": "arn:aws:guardduty:us-west-2:111111111111:detector/66666666666666666666666666666666", "resourceType": "AWS::GuardDuty::Detector", "resourceId": "66666666666666666666666666666666", "resourceName": "66666666666666666666666666666666", "awsRegion": "us-west-2", "availabilityZone": "Regional", "resourceCreationTime": "2020-02-17T02:48:04.511Z", "tags": {}, "relatedEvents": [], "relationships": [], "configuration": { "Enable": true, "FindingPublishingFrequency": "FIFTEEN_MINUTES", "DataSources": { "S3Logs": { "Enable": true }, "Kubernetes": { "AuditLogs": { "Enable": true } } }, "Id": "66666666666666666666666666666666", "Tags": [] }, "supplementaryConfiguration": { "CreatedAt": "2020-02-17T02:48:04.511Z" } }
以下是使用 Guard 語法定義案例 2 中的變數和規則的範例。於下列範例中:
前三行使用
let
命令定義變數。 系統會為他們指派衍生自組態項目屬性的名稱和值。當條件相依性尋找符合 的
resourceType
鍵值對時,compliancecheck
規則區塊會新增AWS::GuardDuty::Detector
。如果找到相符項目,則規則會繼續進行其餘JSON屬性,並尋找下列三個條件的相符項目:S3Logs.Enable
、Kubernetes.AuditLogs.Enable
和FindingPublishingFrequency
。
let s3protection = true let kubernetesprotection = true let publishfrequency = 'FIFTEEN_MINUTES' rule compliancecheck when resourceType == "AWS::GuardDuty::Detector" { configuration.DataSources.S3Logs.Enable == %s3protection configuration.DataSources.Kubernetes.AuditLogs.Enable == %kubernetesprotection configuration.FindingPublishingFrequency == %publishfrequency }
如需實作此自訂規則的完整 Guard 自訂政策,請參閱 GitHub 程式碼儲存庫中的 awsconfig-guard-cft-gd.yaml
工具
AWS 服務
AWS CloudFormation 可協助您設定 AWS 資源、快速且一致地佈建資源,以及在整個 AWS 帳戶 和 區域的生命週期中管理這些資源。
AWS Config 提供 中資源的詳細檢視, AWS 帳戶 以及如何設定這些資源。它可協助您識別資源彼此之間的關係,以及其組態如何隨時間而改變。
其他工具
HashiCorp Terraform
是一種開放原始碼基礎設施作為程式碼 IaC) 工具,可協助您使用程式碼來佈建和管理雲端基礎設施和資源。
程式碼儲存庫
此模式的程式碼可在 GitHub AWS Config 搭配 AWS CloudFormation Guard
史詩
任務 | 描述 | 所需的技能 |
---|---|---|
(選用) 選取規則的鍵值對。 | 如果您要定義自訂 Guard 政策,請完成下列步驟。如果您使用案例 1 或 2 的其中一個範例政策,請略過這些步驟。
| AWS 管理員、安全工程師 |
建立自訂規則。 | 使用您先前識別的鍵值對,或使用其中一個提供的範例 Guard 政策,遵循建立 AWS Config 自訂政策規則中的指示來建立自訂規則。 | AWS 管理員、安全工程師 |
驗證自訂規則。 | 執行下列其中一個動作來驗證自訂 Guard 規則:
| AWS 管理員、安全工程師 |
故障診斷
問題 | 解決方案 |
---|---|
在 之外測試 Guard 政策 AWS Config | 裝置測試可以在本機裝置或整合開發環境 (IDE) 中完成,例如 AWS Cloud9 IDE。若要執行單位測試,請執行下列動作:
|
偵錯 AWS Config 自訂規則 | 在 Guard 政策中,將 |
相關資源
AWS 文件
建立 AWS Config 自訂政策規則 (AWS Config 文件)
撰寫 AWS CloudFormation Guard 規則 (Guard 文件)
AWS 部落格文章和研討會
介紹 AWS CloudFormation Guard 2.0
(AWS 部落格文章)
其他資源
AWS CloudFormation Guard
(GitHub) AWS CloudFormation Guard CLI 文件
(GitHub)