搭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 登錄機碼。

您可以為使用系統管理員管理的 Amazon 彈性運算雲端 (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 包含可協助您快速撰寫檢查和稽核控制項的資源集合。 InSpec 使用InSpec 特定網域語言 (DSL) 在 Ruby 中撰寫這些控制項。您還可以使用由大型用 InSpec 戶社區創建的配置文件。例如,上的DevSec chef-os-hardening專案GitHub包含數十個描述檔,可協助您保護節點的安全。您可以在GitHub或 Amazon S3 中編寫和存放設定檔。

運作方式

以下是使用 InSpec 配置文件與合規性的過程如何工作:

  1. 識別您要使用的預先定義 InSpec 設定檔,或建立您自己的設定檔。您可以使用預先定義的描述檔GitHub來開始使用。有關如何創建自己的 InSpec 配置文件的信息,請參閱 Chef Chef InSpec 配置文件

  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 的合規項目到每個目標節點。若要指派此符合性類型,文件會呼叫 PutComplianceItemsAPI 作業。

執行 InSpec 符合性掃描

本節包含如何使用 Systems Manager 主控台和 AWS Command Line Interface (AWS CLI) 執行 InSpec 符合性掃描的相關資訊。主控台程序會說明如何設定 State Manager,以執行掃描作業。此程 AWS CLI 序顯示如何設定Run Command以執行掃描。

使用State Manager(控制台)執行 InSpec符合性掃描

使用 AWS Systems Manager 主控台執行 InSpec 符合性掃描 State Manager
  1. 開啟主 AWS Systems Manager 控台,網址為 https://console.aws.amazon.com/systems-manager/

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

    -或-

    如果 AWS Systems Manager 首頁先開啟,請選擇功能表圖示 ( 
    The menu icon
  ) 以開啟導覽窗格,然後選擇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,請在「來源資訊」欄位中輸入 S3 儲存貯體中 InSpec 設定檔的有效 URL。

    如需 Systems Manager 如何與 Amazon S3 整合的GitHub詳細資訊,請參閱從 GitHub 執行指令碼

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

    提示

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

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

  10. 對於 Rate control (速率控制):

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

      注意

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

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

  11. (選用) 針對 Output options (輸出選項),若要將命令輸出儲存至檔案,請選取 Write command output to an S3 bucket (將命令輸出寫入至 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: InSpec 設定檔資料夾的 URL 位於GitHub或 S3 儲存貯體。資料夾必須包含基底 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/DOC-EXAMPLE-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/DOC-EXAMPLE-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