本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 AWS CloudFormation Guard 原則建立 AWS Config 自訂規則
由安德魯·洛克(AWS),凱拉什·哈維達爾(AWS),妮可·布朗(AWS)和坦亞·豪威爾(AWS)創建
代碼存儲庫:aws-config-custom-rule- | 環境:PoC 或試點 | 技術:安全性、身分識別、合規性、管理與治理 |
AWS 服務:AWS CloudFormation;AWS Config |
Summary
AWS Config規則可協助您評估 AWS 資源及其目標組態狀態。規則有兩種類型:受管理 AWS Config 規則和自訂規則。您可以使用 AWS Lambda 函數或 policy-as-code 語言 AWS CloudFormation Guard
使用 Guard 建立的規則比受管規則提供更精細的控制,而且通常比完全自訂 Lambda 規則更容易設定。這種方法使工程師和架構師能夠建立規則,而無需了解 Python、NodeJS 或 Java,這些都是透過 Lambda 部署自訂規則所需的。
此模式提供可行的範本、程式碼範例和部署方法,協助您透過 Guard 採用自訂規則。管理員可以使用此模式 AWS Config 來建置具有組態項目屬性的自訂符合性規則。例如,開發人員可以針對 AWS Config 組態項目使用安全防護原則,持續監視已部署 AWS 和非AWS 資源的狀態、偵測規則違規,以及自動啟動修復。
目標
閱讀此模式後,您應該能夠:
瞭解安全警衛政策程式碼如何與 AWS Config 服務互動。
部署案例 1,這是使用安全警衛語法驗證加密磁碟區符合性的 AWS Config 自訂規則。此規則會驗證磁碟機是否正在使用中,並確認磁碟機類型為 gp3。
部署案例 2,這是使用安全警衛語法驗證 Amazon GuardDuty 合規性的 AWS Config 自訂規則。此規則驗證 GuardDuty 記錄器是否啟用了 Amazon Simple Storage Service (Amazon S3) 保護和 Amazon Elastic Kubernetes Service(Amazon EKS)保護。
先決條件和限制
先決條件
一個活躍的 AWS 帳戶
AWS Config,在您的 AWS 帳戶
限制
保護自訂規則只能查詢目標設定項目 JSON 記錄中的索引鍵值配對
架構
您可以將安全警衛語法套用至 AWS Config 規則,做為自訂原則。 AWS Config 擷取每個指定資源的階層式 JSON。 AWS Config 組態項目的 JSON 包含索引鍵值配對。這些屬性用於警衛語法中,做為指派給其對應值的變數。
以下是安全警衛語法的說明。組態項目 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 會部署使用安全警衛語法驗證加密磁碟區符合性的 AWS Config 自訂規則。此規則會驗證磁碟機是否正在使用中,並確認磁碟機類型為 gp3。
以下是案例 1 的組 AWS Config 態項目範例。 此組態項目中有三個金鑰-值配對,用來做為警衛原則中的變數:volumestatus
volumeencryptionstatus
、和volumetype
。此外,resourceType
金鑰也會用作安全防護原則中的篩選器。
{ "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
指令定義變數。 系統會為它們指定一個名稱與值,該名稱與值衍生自組態項目的屬性。該
compliancecheck
規則塊添加了一個查找匹配AWS::EC2::Volume
的resourceType
鍵值對的時候條件依賴關係。如果找到相符項目,則規則會繼續處理其餘的 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 }
如需實作此自訂規則的完整安全防護自訂原則,請參閱程式碼儲存庫中的 awsconfig-guard-cft.yaml
案例 2: GuardDuty 合規
案例 2 會部署使用安全警衛語法驗證 Amazon GuardDuty 合規的 AWS Config 自訂規則。此規則會驗證 GuardDuty 記錄機是否已啟用 Amazon S3 保護和 Amazon EKS 保護。它還會驗證發 GuardDuty 現項目是否每 15 分鐘發佈一次。此案例可以部署在所有組織中 AWS 帳戶 ,也可以部署 AWS 區域 在組織中 (在中 AWS Organizations)。
以下是案例 2 的組 AWS Config 態項目範例。此組態項目中有三個金鑰-值配對,用來做為警衛原則中的變數: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
指令定義變數。 系統會為它們指定一個名稱與值,該名稱與值衍生自組態項目的屬性。該
compliancecheck
規則塊添加了一個查找匹配AWS::GuardDuty::Detector
的resourceType
鍵值對的時候條件依賴關係。如果找到相符項目,則規則會繼續處理其餘的 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 }
如需實作此自訂規則的完整安全防護自訂原則,請參閱 GitHub 程式碼儲存庫中的 awsconfig-guard-cft-gd.yaml
工具
AWS 服務
AWS CloudFormation協助您設定 AWS 資源、快速且一致地佈建資源,以及跨區域的整個生命週期進 AWS 帳戶 行管理。
AWS Config提供資源的詳細檢視,以 AWS 帳戶 及資源的設定方式。它可協助您識別資源彼此之間的關聯性,以及其組態隨時間變更的情況。
其他工具
HashiCorp Terraform
是一種開放原始碼基礎架構即程式碼 (IaC) 工具,可協助您使用程式碼來佈建和管理雲端基礎架構和資源。
代碼存儲庫
此模式的代碼可在 GitHub AWS Config 與 AWS CloudFormation Guard
史诗
任務 | 描述 | 所需技能 |
---|---|---|
(選擇性) 選取規則的機碼值配對。 | 如果您要定義自訂安全警衛政策,請完成這些步驟。如果您使用案例 1 或 2 的其中一個範例原則,請略過下列步驟。
| AWS 管理員、安全工程師 |
建立自訂規則。 | 使用您先前識別的索引鍵值配對,或使用提供的其中一個範例防護原則策略,依照建立 AWS Config 自訂原則規則中的指示來建立自訂規則。 | AWS 管理員、安全工程師 |
驗證自訂規則。 | 執行下列其中一項動作來驗證自訂守門員規則:
| AWS 管理員、安全工程師 |
故障診斷
問題 | 解決方案 |
---|---|
測試以外的安全警衛政策 AWS Config | 單元測試可以在本機裝置或整合式開發環境 (IDE) (例如 AWS Cloud9 IDE) 中完成。要執行單元測試,請執行以下操作:
|
偵錯自 AWS Config 訂規則 | 在您的安全警衛政策中,將 |
相關資源
AWS 文件
建立 AWS Config 自訂原則規則 (AWS Config 文件集)
AWS 部落格文章和工作坊
介紹 AWS CloudFormation Guard 2.0
(AWS 博客文章)
其他資源
AWS CloudFormation Guard
(GitHub) AWS CloudFormation Guard CLI 文件
(GitHub)