將 Chef InSpec 設定檔與 Systems Manager 合規搭配使用 - AWS Systems Manager

將 Chef InSpec 設定檔與 Systems Manager 合規搭配使用

AWS Systems Manager 與 Chef InSpec 整合。Chef InSpec 是開放原始碼測試架構,讓您可以在 GitHub 或 Amazon Simple Storage Service (Amazon S3) 中建立人類可讀的設定檔。然後,您可以使用 Systems Manager 執行合規掃描,檢視合規與不合規的節點。描述檔能滿足適合運算環境的安全、合規或政策需求。舉例來說,您能夠建立描述檔,以便在使用合規 (AWS Systems Manager 的功能) 掃描節點時,執行下列檢查作業:

  • 檢查特定連接埠是開啟或關閉狀態。

  • 檢查特定應用程式是否正在執行。

  • 檢查是否已安裝特定套件。

  • 檢查特定屬性的 Windows 登錄機碼。

對於您以 Systems Manager 管理的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體、內部部署伺服器或虛擬機器 (VM),您可以建立 InSpec 描述檔。以下 Chef InSpec 範例設定檔會檢查連接埠 22 是否為開啟狀態。

control 'Scan Port' do impact 10.0 title 'Server: Configure the service port' desc 'Always specify which port the SSH server should listen to. Prevent unexpected settings.' describe sshd_config do its('Port') { should eq('22') } end end

InSpec 內含資源集合,能協助您快速編寫檢查作業並稽核控制項。為了以 Ruby 撰寫這些控制項,InSpec 會採用 InSpec 特定領域語言 (DSL)。此外,您也能使用由廣大 InSpec 使用者社群所建立的描述檔。例如,GitHub 上的 DevSec chef-os-hardening 專案包含數十種設定檔,皆可保障節點的安全。您能夠撰寫設定檔,並將其存放在 GitHub 或 Amazon S3 中。

運作方式

以下程序將說明如何結合使用 InSpec 描述檔與合規:

  1. 請找出要使用的預先定義 InSpec 描述檔,或建立自己的描述檔。您可以使用 GitHub 上預先定義的設定檔,立刻開始操作。有關如何建立自有 InSpec 設定檔的資訊,請參閱 ChefChef InSpec Profiles

  2. 在公有或私有 GitHub 儲存庫或 S3 儲存貯體中存放設定檔。

  3. 請使用 Systems Manager 文件 (SSM 文件) AWS-RunInspecChecks,以透過 InSpec 描述檔執行合規操作。您能夠使用 Run Command (AWS Systems Manager 的功能) 開始合規掃描 (適用於隨需掃描),也能利用 State Manager (AWS Systems Manager 的功能) 來排程定期合規掃描。

  4. 利用合規 API 或合規主控台來辨識未合規的節點。

注意

記下以下資訊。

  • Chef 會採用節點上的用戶端處理設定檔。因此,您不需要另外安裝用戶端。Systems Manager 執行 SSM 文件 AWS-RunInspecChecks 時,系統即會檢查是否已安裝用戶端。若尚未安裝,Systems Manager 就會在掃描期間安裝 Chef 用戶端,然後在掃描完成後解除安裝該用戶端。

  • 執行 SSM 文件 AWS-RunInspecChecks (如本主題所述) 會指派類型 Custom:Inspec 的合規項目到每個目標節點。若要指派此合規類型,文件會呼叫 PutComplianceItems API 操作。

執行 InSpec 合規掃描

本節所含的資訊會說明如何使用 Systems Manager 主控台和 AWS Command Line Interface (AWS CLI) 來執行 InSpec 合規掃描。主控台程序會說明如何設定 State Manager,以執行掃描作業。AWS CLI 程序則會說明如何設定 Run Command,以執行掃描作業。

使用 State Manager (主控台) 執行 InSpec 合規掃描

使用 AWS Systems Manager 主控台透過State Manager執行 InSpec 合規掃描
  1. 開啟位於 https://console.aws.amazon.com/systems-manager/ 的 AWS Systems Manager 主控台。

  2. 在導覽窗格中,選擇 State Manager

  3. 選擇 Create association (建立關聯)

  4. Provide association details (提供關聯詳細資訊) 區段中,輸入一個名稱。

  5. Document (文件) 清單中,請選擇 AWS-RunInspecChecks

  6. Document version (文件版本) 清單中,選擇 Latest at runtime (執行時間的最新版本)

  7. 參數區段的來源類型清單中,選擇 GitHubS3

    若您選擇 GitHub,請在來源資訊欄位中輸入公有或私有 GitHub 儲存庫中的 InSpec 設定檔路徑。此處是由 Systems Manager 團隊提供的公有描述檔範例路徑,其來自以下位置:https://github.com/awslabs/amazon-ssm/tree/master/Compliance/InSpec/PortCheck

    {"owner":"awslabs","repository":"amazon-ssm","path":"Compliance/InSpec/PortCheck","getOptions":"branch:master"}

    如果您選擇 S3,請在 Source Info (來源資訊) 欄位中,輸入 S3 儲存貯體中的 InSpec 描述檔的有效 URL。

    如需有關 Systems Manager 如何與 GitHub 及 Amazon Simple Storage Service (Amazon S3) 整合的詳細資訊,請參閱 從 GitHub 執行指令碼

  8. 目標區段中,透過手動指定標籤、選取執行個體或邊緣裝置,或指定資源群組,選擇您要執行這項操作的受管節點。

    提示

    如果您預期看到的受管節點未列出,請參閱 疑難排解受管節點的可用性 以取得疑難排解秘訣。

  9. Specify schedule (指定排程) 區段中,使用排程建置器選項來建立排程,以指定合規掃描的執行時間。

  10. 對於速率控制

    • 並行中,指定可同時執行命令的受管節點數目或百分比。

      注意

      如果透過指定套用至受管節點的標籤或指定 AWS 資源群組選取了目標,且您不確定會以多少個受管節點為目標,則透過指定百分比限制可以同時執行文件之目標的數量。

    • Error threshold (錯誤閾值) 中,指定在特定數目或百分比之節點上的命令失敗之後,停止在其他受管節點上執行命令。例如,如果您指定三個錯誤,則 Systems Manager 會在收到第四個錯誤時停止傳送命令。仍在處理命令的受管節點也可能會傳送錯誤。

  11. (選用) 針對輸出選項,若要將命令輸出儲存至檔案,請選取將命令輸出寫入至 S3 儲存貯體方塊。在方塊中輸入儲存貯體和字首 (資料夾) 名稱。

    注意

    授予能力以將資料寫入至 S3 儲存貯體的 S3 許可,會是指派給執行個體之執行個體設定檔 (適用於 EC2 執行個體) 或 IAM 服務角色 (啟用混合模式的機器) 的許可,而不是執行此任務之 IAM 使用者的許可。如需詳細資訊,請參閱設定 Systems Manager 所需的執行個體許可建立混合環境的 IAM 服務角色。此外,若指定的 S3 儲存貯體位於不同的 AWS 帳戶 內,請確保與受管節點相關聯的執行個體設定檔或 IAM 服務角色是否具有寫入該儲存貯體的必要許可。

  12. 選擇 Create Association (建立關聯)。系統會隨即建立關聯,並自動執行合規掃描。

  13. 請稍候幾分鐘,等待掃描作業完成。接著,在導覽窗格中選擇 Compliance (合規)

  14. Corresponding managed instances (對應的受管執行個體) 中,尋找 Compliance Type (合規類型) 欄位是 Custom:Inspec (Custom:Inspec) 的節點。

  15. 選擇節點 ID,藉此檢視未合規狀態的詳細資訊。

使用 Run Command (AWS CLI) 執行 InSpec 合規掃描

  1. 如果您尚未安裝並設定 AWS Command Line Interface (AWS CLI),請進行相應的操作。

    如需相關資訊,請參閱安裝或更新最新版本的 AWS CLI

  2. 執行下列其中一個命令,即可從 GitHub 或 Amazon S3 執行 InSpec 設定檔。

    命令接受下列參數:

    • sourceType:GitHub 或 Amazon S3

    • sourceInfo:GitHub 或 S3 儲存貯體中的 InSpec 設定檔資料夾的 URL。該資料夾必須包含基本 InSpec 檔案 (*.yml),以及所有相關的控制項 (*.rb)。

    GitHub

    aws ssm send-command --document-name "AWS-RunInspecChecks" --targets '[{"Key":"tag:tag_name","Values":["tag_value"]}]' --parameters '{"sourceType":["GitHub"],"sourceInfo":["{\"owner\":\"owner_name\", \"repository\":\"repository_name\", \"path\": \"Inspec.yml_file"}"]}'

    請見此處範例。

    aws ssm send-command --document-name "AWS-RunInspecChecks" --targets '[{"Key":"tag:testEnvironment","Values":["webServers"]}]' --parameters '{"sourceType":["GitHub"],"getOptions":"branch:master","sourceInfo":["{\"owner\":\"awslabs\", \"repository\":\"amazon-ssm\", \"path\": \"Compliance/InSpec/PortCheck\"}"]}'

    Amazon Simple Storage Service (Amazon S3)

    aws ssm send-command --document-name "AWS-RunInspecChecks" --targets '[{"Key":"tag:tag_name","Values":["tag_value"]}]' --parameters'{"sourceType":["S3"],"sourceInfo":["{\"path\":\"https://s3.aws-api-domain/amzn-s3-demo-bucket/Inspec.yml_file\"}"]}'

    請見此處範例。

    aws ssm send-command --document-name "AWS-RunInspecChecks" --targets '[{"Key":"tag:testEnvironment","Values":["webServers"]}]' --parameters'{"sourceType":["S3"],"sourceInfo":["{\"path\":\"https://s3.aws-api-domain/amzn-s3-demo-bucket/InSpec/PortCheck.yml\"}"]}'
  3. 執行下列命令,以檢視合規掃描摘要。

    aws ssm list-resource-compliance-summaries --filters Key=ComplianceType,Values=Custom:Inspec
  4. 執行下列命令,以檢視不相容的節點的詳細資訊。

    aws ssm list-compliance-items --resource-ids node_ID --resource-type ManagedInstance --filters Key=DocumentName,Values=AWS-RunInspecChecks