建立關聯 - AWS Systems Manager

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

建立關聯

State Manager是 的功能 AWS Systems Manager,可協助您將 AWS 資源保持在您定義和減少組態偏離的狀態。若要執行此作業,State Manager 使用關聯。關聯是您指派給 AWS 資源的組態。該組態會定義您想在資源上維持的狀態。例如,關聯可以指定必須在受管節點上安裝和執行防毒軟體,或者必須關閉特定連接埠。

關聯會指定套用組態並以關聯為目標的排程。例如,防毒軟體的關聯可能在 AWS 帳戶的所有受管節點上一天執行一次。如果軟體未安裝在節點上,則關聯可以指示 State Manager 安裝它。如果已安裝軟體,但服務未執行,則關聯可以指示 State Manager 以啟動服務。

警告

建立關聯時,您可以選擇受管節點 AWS 的資源群組作為關聯的目標。如果 AWS Identity and Access Management (IAM) 使用者、群組或角色具有建立以受管節點資源群組為目標的關聯許可,則該使用者、群組或角色會自動對群組中的所有節點進行根層級控制。只有受信任的管理員才能建立關聯。

關聯目標和速率控制

關聯會指定哪些受管節點或目標應接收關聯。State Manager 包含多項功能,可協助您將受管節點設定為目標,並控制關聯部署到這些目標的方式。如需目標和速率控制的詳細資訊,請參閱了解 中的目標和速率控制 State Manager 關聯

標記關聯

當您使用 AWS CLI 或 等命令列工具建立標籤時,您可以將標籤指派給關聯 AWS Tools for PowerShell。不支援使用 Systems Manager 主控台將標籤新增至關聯。

執行關聯

根據預設,State Manager 會在建立關聯後立即執行關聯,然後根據您定義的排程執行關聯。

系統也會根據下列規則執行關聯:

  • State Manager 在間隔期間, 會嘗試在所有指定或目標節點上執行關聯。

  • 如果關聯未在間隔期間執行 (例如,因為並行值限制了一次可以處理關聯的節點數量),則 State Manager 會嘗試在下一個間隔執行關聯。

  • State Manager 會在關聯組態、目標節點、文件或參數的變更後執行關聯。如需詳細資訊,請參閱 瞭解何時將關聯套用至資源

  • State Manager 會記錄所有略過間隔的歷史記錄。您可以在 Execution History (執行歷程記錄) 標記檢視歷程記錄。

排程關聯

您可以排程關聯,以基本間隔 (例如每 10 小時) 執行,也可以使用自訂 Cron 和 Rate 運算式建立更進階的排程。您也可以在第一次建立關聯時阻止執行關聯。

使用 Cron 和 Rate 運算式來排程關聯執行

除了標準 Cron 和速率表達式之外,State Manager 也支援 cron 表達式,其中包含星期幾和數字符號 (#),以指定月份的第 n 天來執行關聯。以下是在每月第三個星期二 23:30 執行 cron 排程的範例UTC:

cron(30 23 ? * TUE#3 *)

以下是在每月第二個星期四午夜執行的範例UTC:

cron(0 0 ? * THU#2 *)

State Manager 也支援 (L) 符號,以指出當月的最後 X 天。以下是在每月最後一個星期二午夜執行 cron 排程的範例UTC:

cron(0 0 ? * 3L *)

若要進一步控制關聯的執行時間,例如,如果您希望在週二修補程式日後的兩天執行關聯,則可以指定偏移量。同時偏移定義在排程的日期之後等待多少天才能執行關聯。例如,如果您指定了 cron(0 0 ? * THU#2 *) 的 cron 排程,則可以在排程偏移欄位指定數字 3,以在該月第二個週四之後的每個週日執行關聯。

注意

若要使用偏移,必須在主控台選取僅在下一個指定的 Cron 間隔時間套用關聯,或者在命令列中指定 ApplyOnlyAtCronInterval 參數。當其中一個選項啟用時,State Manager 不會在您建立關聯後立即執行關聯。

如需 Cron 和 Rate 運算式的詳細資訊,請參閱參考:Systems Manager 的 Cron 和 Rate 運算式

建立關聯 (主控台)

下列程序說明如何使用 Systems Manager 主控台來建立 State Manager 關聯。

重要

此程序說明如何建立使用 CommandPolicy 文件以鎖定受管節點的關聯。如需建立使用 Automation Runbook 鎖定節點或其他類型 AWS 資源之關聯的相關資訊,請參閱 使用 State Manager 關聯排程自動化

若要建立 State Manager 關聯
  1. 在 開啟 AWS Systems Manager 主控台https://console.aws.amazon.com/systems-manager/

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

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

  4. Name (名稱) 欄位中指定名稱。

  5. Document (文件) 清單中,選擇文件名稱旁的選項。請注意文件類型。此程序適用於 CommandPolicy 文件。如需建立使用 Automation Runbook 的關聯的相關資訊,請參閱 使用 State Manager 關聯排程自動化

    重要

    State Manager 如果從另一個帳戶共用文件,則不支援使用新版本文件的執行關聯。如果是從另一個帳戶共用的,則 State Manager 一律執行文件的 default 版本,即使 Systems Manager 主控台顯示新版本已處理。如果您想要使用從另一個帳戶共用的文件的新版本執行關聯,您必須將文件版本設定為 default

  6. 對於 Parameters (參數),指定所需的輸入參數。

  7. (選用) 選擇要套用至您的關聯以進行監控的 CloudWatch 警示。

    注意

    記下有關此步驟的以下資訊。

    • 警示清單最多顯示 100 個警示。如果您在清單中看不到您的警示,請使用 AWS Command Line Interface 建立關聯。如需詳細資訊,請參閱建立關聯 (命令列)

    • 若要將 CloudWatch 警示連接至您的命令,建立關聯的IAM主體必須具有 iam:createServiceLinkedRole動作的許可。如需 CloudWatch 警示的詳細資訊,請參閱使用 Amazon CloudWatch 警示。

    • 如果您的警示啟用,則不會執行任何待處理命令叫用或自動化。

  8. 對於 Targets (目標),請選擇選項。如需使用目標的詳細資訊,請參閱了解 中的目標和速率控制 State Manager 關聯

  9. Specify schedule (指定排程) 區段中,選擇 On Schedule (按照排程)No schedule (無排程)。如果您選擇 On Schedule (按照排程),請使用提供的按鈕來為關聯建立 Cron 或 Rate 排程。

    如果您不希望在建立關聯之後立即執行關聯,請選擇 Apply association only at the next specified Cron interval (僅在下一個指定的 Cron 間隔套用關聯)

  10. (選用) 在 Schedule offset (排程偏移) 欄位中,指定介於 1 和 6 之間的數字。

  11. Advanced options (進階選項) 區段中,使用 Compliance severity (合規嚴重) 選擇關聯的嚴重性等級,並使用 Change Calendars (變更行事曆) 選擇關聯的變更行事曆。

    合規報告會指出關聯狀態合規與否,以及您在這裡指示的嚴重性等級。如需詳細資訊,請參閱關於State Manager關聯合規

    變更行事曆會決定何時執行關聯。如果行事曆已關閉,則不會套用關聯。如果行事曆處於開啟狀態,則會相應地執行關聯。如需詳細資訊,請參閱AWS Systems Manager Change Calendar

  12. Rate control (速率控制) 區段中,選擇選項來控制關聯在多個節點上的執行方式。如需使用速率控制的詳細資訊,請參閱了解 中的目標和速率控制 State Manager 關聯

    Concurrency (並行) 部分,選擇一個選項:

    • 選擇 targets (目標),輸入可以同時執行關聯的目標絕對數量。

    • 選擇 percentage (百分比),輸入可以同時執行關聯的目標集百分比。

    Error threshold (錯誤閾值) 部分,選擇一個選項:

    • 選擇錯誤以輸入之前允許的絕對錯誤數目 State Manager 會停止在其他目標上執行關聯。

    • 選擇百分比以輸入之前允許的錯誤百分比 State Manager 會停止在其他目標上執行關聯。

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

    注意

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

    以下是開啟關聯的 Amazon Simple Storage Service (Amazon S3) 輸出所需的最低許可。您可以將IAM政策連接至帳戶中的使用者或角色,以進一步限制存取。Amazon EC2執行個體設定檔至少應具有具有AmazonSSMManagedInstanceCore受管政策和下列內嵌政策IAM的角色。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*" } ] }

    如需最低許可,接收匯出的 Amazon Simple Storage Service (Amazon S3) 儲存貯體必須具備 Amazon Simple Storage Service (Amazon S3) 主控台定義的預設設定。如需有關建立 Amazon Simple Storage Service (Amazon S3) 儲存貯體的詳細資訊,請參閱 Amazon Simple Storage Service (Amazon S3) 使用者指南中的建立儲存貯體

    注意

    API SSM 文件在關聯執行期間啟動的操作不會登入 AWS CloudTrail。

  14. 選擇 Create Association (建立關聯)

注意

如果刪除您建立的關聯,關聯將不再在該關聯的任何目標上執行。

建立關聯 (命令列)

下列程序說明如何使用 AWS CLI (在 Linux 或 Windows 上) 或 工具 PowerShell 來建立 State Manager 關聯。本節包含數個示範如何使用目標和速率控制的範例。目標和速率控制允許您將關聯指派給數十個或數百個節點,同時控制這些關聯的執行。如需目標和速率控制的詳細資訊,請參閱了解 中的目標和速率控制 State Manager 關聯

重要

此程序說明如何建立使用 CommandPolicy 文件以鎖定受管節點的關聯。如需建立使用 Automation Runbook 鎖定節點或其他類型 AWS 資源之關聯的相關資訊,請參閱 使用 State Manager 關聯排程自動化

開始之前

targets 參數是一系列的搜尋條件,使用您指定的 KeyValue 組合將節點設為目標。如果您打算使用 targets 參數在數十個或數百個節點上建立關聯,請在程序開始之前檢閱下列目標選項。

透過指定 來鎖定特定節點 IDs

--targets Key=InstanceIds,Values=instance-id-1,instance-id-2,instance-id-3
--targets Key=InstanceIds,Values=i-02573cafcfEXAMPLE,i-0471e04240EXAMPLE,i-07782c72faEXAMPLE

使用 標籤將執行個體設為目標

--targets Key=tag:tag-key,Values=tag-value-1,tag-value-2,tag-value-3
--targets Key=tag:Environment,Values=Development,Test,Pre-production

使用 的目標節點 AWS Resource Groups

--targets Key=resource-groups:Name,Values=resource-group-name
--targets Key=resource-groups:Name,Values=WindowsInstancesGroup

針對目前 AWS 帳戶 和 中的所有執行個體 AWS 區域

--targets Key=InstanceIds,Values=*
注意

記下以下資訊。

  • State Manager 如果從另一個帳戶共用文件,則不支援使用新版本文件的執行關聯。如果是從另一個帳戶共用的,則 State Manager 一律執行文件的 default 版本,即使 Systems Manager 主控台顯示新版本已處理。如果您想要使用從另一個帳戶共用而來的新版本文件來執行關聯,則必須將文件版本設定為 default

  • 您可以使用 AWS CLI指定最多五個標籤鍵。如果您使用 AWS CLI,create-association命令中指定的所有標籤索引鍵目前都必須指派給節點。如果不是,State Manager 無法將節點設定為關聯的目標。

  • 在建立關聯時,指定排程的執行時間。使用 Cron 或 Rate 運算式來指定排程。如需 Cron 和 Rate 運算式的詳細資訊,請參閱關聯的 Cron 與 Rate 運算式

建立關聯
  1. AWS Tools for PowerShell如果您尚未安裝和設定 AWS CLI 或 。

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

  2. 使用下列格式建立建立 的命令 State Manager 關聯。取代每個 example resource placeholder 使用您自己的資訊。

    Linux & macOS
    aws ssm create-association \ --name document_name \ --document-version version_of_document_applied \ --instance-id instances_to_apply_association_on \ --parameters (if any) \ --targets target_options \ --schedule-expression "cron_or_rate_expression" \ --apply-only-at-cron-interval required_parameter_for_schedule_offsets \ --schedule-offset number_between_1_and_6 \ --output-location s3_bucket_to_store_output_details \ --association-name association_name \ --max-errors a_number_of_errors_or_a_percentage_of_target_set \ --max-concurrency a_number_of_instances_or_a_percentage_of_target_set \ --compliance-severity severity_level \ --calendar-names change_calendar_names \ --target-locations aws_region_or_account \ --tags "Key=tag_key,Value=tag_value"
    Windows
    aws ssm create-association ^ --name document_name ^ --document-version version_of_document_applied ^ --instance-id instances_to_apply_association_on ^ --parameters (if any) ^ --targets target_options ^ --schedule-expression "cron_or_rate_expression" ^ --apply-only-at-cron-interval required_parameter_for_schedule_offsets ^ --schedule-offset number_between_1_and_6 ^ --output-location s3_bucket_to_store_output_details ^ --association-name association_name ^ --max-errors a_number_of_errors_or_a_percentage_of_target_set ^ --max-concurrency a_number_of_instances_or_a_percentage_of_target_set ^ --compliance-severity severity_level ^ --calendar-names change_calendar_names ^ --target-locations aws_region_or_account ^ --tags "Key=tag_key,Value=tag_value"
    PowerShell
    New-SSMAssociation ` -Name document_name ` -DocumentVersion version_of_document_applied ` -InstanceId instances_to_apply_association_on ` -Parameters (if any) ` -Target target_options ` -ScheduleExpression "cron_or_rate_expression" ` -ApplyOnlyAtCronInterval required_parameter_for_schedule_offsets ` -ScheduleOffSet number_between_1_and_6 ` -OutputLocation s3_bucket_to_store_output_details ` -AssociationName association_name ` -MaxError a_number_of_errors_or_a_percentage_of_target_set -MaxConcurrency a_number_of_instances_or_a_percentage_of_target_set ` -ComplianceSeverity severity_level ` -CalendarNames change_calendar_names ` -TargetLocations aws_region_or_account ` -Tags "Key=tag_key,Value=tag_value"

    以下範例會在加上 "Environment,Linux" 標籤的節點上建立關聯。關聯使用 AWS-UpdateSSMAgent 文件來更新 SSM Agent 目標節點上的 ,UTC每週日上午 2:00。此關聯在任何指定的時間可在最多 10 個節點上同時執行。此外,如果錯誤計數超過 5 個,此關聯會停止在更多節點上特定執行間隔的執行。針對合規報告,指派給此關聯的嚴重性等級為中等。

    Linux & macOS
    aws ssm create-association \ --association-name Update_SSM_Agent_Linux \ --targets Key=tag:Environment,Values=Linux \ --name AWS-UpdateSSMAgent \ --compliance-severity "MEDIUM" \ --schedule-expression "cron(0 2 ? * SUN *)" \ --max-errors "5" \ --max-concurrency "10"
    Windows
    aws ssm create-association ^ --association-name Update_SSM_Agent_Linux ^ --targets Key=tag:Environment,Values=Linux ^ --name AWS-UpdateSSMAgent ^ --compliance-severity "MEDIUM" ^ --schedule-expression "cron(0 2 ? * SUN *)" ^ --max-errors "5" ^ --max-concurrency "10"
    PowerShell
    New-SSMAssociation ` -AssociationName Update_SSM_Agent_Linux ` -Name AWS-UpdateSSMAgent ` -Target @{ "Key"="tag:Environment" "Values"="Linux" } ` -ComplianceSeverity MEDIUM ` -ScheduleExpression "cron(0 2 ? * SUN *)" ` -MaxConcurrency 10 ` -MaxError 5

    下列範例IDs透過指定萬用字元值 (*) 來鎖定節點。這可讓 Systems Manager 在目前 AWS 帳戶 和 中的所有節點上建立關聯 AWS 區域。此關聯在任何指定的時間可在最多 10 個節點上同時執行。此外,如果錯誤計數超過 5 個,此關聯會停止在更多節點上特定執行間隔的執行。針對合規報告,指派給此關聯的嚴重性等級為中等。此關聯使用排程偏移,這意味著它在指定的 Cron 排程後會執行兩天。此外還包括 ApplyOnlyAtCronInterval 參數,這是使用排程偏移所必需的,意味著在建立後關聯不會立即執行。

    Linux & macOS
    aws ssm create-association \ --association-name Update_SSM_Agent_Linux \ --name "AWS-UpdateSSMAgent" \ --targets "Key=instanceids,Values=*" \ --compliance-severity "MEDIUM" \ --schedule-expression "cron(0 2 ? * SUN#2 *)" \ --apply-only-at-cron-interval \ --schedule-offset 2 \ --max-errors "5" \ --max-concurrency "10" \
    Windows
    aws ssm create-association ^ --association-name Update_SSM_Agent_Linux ^ --name "AWS-UpdateSSMAgent" ^ --targets "Key=instanceids,Values=*" ^ --compliance-severity "MEDIUM" ^ --schedule-expression "cron(0 2 ? * SUN#2 *)" ^ --apply-only-at-cron-interval ^ --schedule-offset 2 ^ --max-errors "5" ^ --max-concurrency "10" ^ --apply-only-at-cron-interval
    PowerShell
    New-SSMAssociation ` -AssociationName Update_SSM_Agent_All ` -Name AWS-UpdateSSMAgent ` -Target @{ "Key"="InstanceIds" "Values"="*" } ` -ScheduleExpression "cron(0 2 ? * SUN#2 *)" ` -ApplyOnlyAtCronInterval ` -ScheduleOffset 2 ` -MaxConcurrency 10 ` -MaxError 5 ` -ComplianceSeverity MEDIUM ` -ApplyOnlyAtCronInterval

    以下範例會在 Resource Groups 中的節點上建立關聯。該群組名為「HR-Department」。關聯會使用 AWS-UpdateSSMAgent 文件來更新 SSM Agent 目標節點上的 ,UTC每週日上午 2:00。此關聯在任何指定的時間可在最多 10 個節點上同時執行。此外,如果錯誤計數超過 5 個,此關聯會停止在更多節點上特定執行間隔的執行。針對合規報告,指派給此關聯的嚴重性等級為中等。此關聯會在指定的 Cron 排程執行。它不會在建立關聯之後立即執行。

    Linux & macOS
    aws ssm create-association \ --association-name Update_SSM_Agent_Linux \ --targets Key=resource-groups:Name,Values=HR-Department \ --name AWS-UpdateSSMAgent \ --compliance-severity "MEDIUM" \ --schedule-expression "cron(0 2 ? * SUN *)" \ --max-errors "5" \ --max-concurrency "10" \ --apply-only-at-cron-interval
    Windows
    aws ssm create-association ^ --association-name Update_SSM_Agent_Linux ^ --targets Key=resource-groups:Name,Values=HR-Department ^ --name AWS-UpdateSSMAgent ^ --compliance-severity "MEDIUM" ^ --schedule-expression "cron(0 2 ? * SUN *)" ^ --max-errors "5" ^ --max-concurrency "10" ^ --apply-only-at-cron-interval
    PowerShell
    New-SSMAssociation ` -AssociationName Update_SSM_Agent_Linux ` -Name AWS-UpdateSSMAgent ` -Target @{ "Key"="resource-groups:Name" "Values"="HR-Department" } ` -ScheduleExpression "cron(0 2 ? * SUN *)" ` -MaxConcurrency 10 ` -MaxError 5 ` -ComplianceSeverity MEDIUM ` -ApplyOnlyAtCronInterval

    以下範例會建立一個關聯,它在標記有特定節點 ID 的節點上執行。關聯使用 SSM Agent 要更新的文件 SSM Agent 當變更行事曆開啟時,在目標節點上一次。關聯會在執行時檢查行事曆狀態。如果行事曆在啟動時關閉且關聯只執行一次,則它不會再執行一次,因為關聯執行時段已結束。如果行事曆處於開啟狀態,則會相應地執行關聯。

    注意

    如果您在變更行事曆關閉時,將新節點新增至關聯作用的標籤或資源群組,則在變更行事曆開啟後,關聯就會套用至這些節點。

    Linux & macOS
    aws ssm create-association \ --association-name CalendarAssociation \ --targets "Key=instanceids,Values=i-0cb2b964d3e14fd9f" \ --name AWS-UpdateSSMAgent \ --calendar-names "arn:aws:ssm:us-east-1:123456789012:document/testCalendar1" \ --schedule-expression "rate(1day)"
    Windows
    aws ssm create-association ^ --association-name CalendarAssociation ^ --targets "Key=instanceids,Values=i-0cb2b964d3e14fd9f" ^ --name AWS-UpdateSSMAgent ^ --calendar-names "arn:aws:ssm:us-east-1:123456789012:document/testCalendar1" ^ --schedule-expression "rate(1day)"
    PowerShell
    New-SSMAssociation ` -AssociationName CalendarAssociation ` -Target @{ "Key"="tag:instanceids" "Values"="i-0cb2b964d3e14fd9f" } ` -Name AWS-UpdateSSMAgent ` -CalendarNames "arn:aws:ssm:us-east-1:123456789012:document/testCalendar1" ` -ScheduleExpression "rate(1day)"

    以下範例會建立一個關聯,它在標記有特定節點 ID 的節點上執行。關聯使用 SSM Agent 要更新的文件 SSM Agent 在目標節點上的目標節點上,每週日凌晨 2:00。當變更行事曆開啟時,此關聯只會在指定的 Cron 排程執行。建立關聯時,它會檢查行事曆狀態。如果行事曆已關閉,則不會套用關聯。當套用關聯的間隔在星期日凌晨 2:00 開始時,關聯會檢查行事曆是否已開啟。如果行事曆處於開啟狀態,則會相應地執行關聯。

    注意

    如果您在變更行事曆關閉時,將新節點新增至關聯作用的標籤或資源群組,則在變更行事曆開啟後,關聯就會套用至這些節點。

    Linux & macOS
    aws ssm create-association \ --association-name MultiCalendarAssociation \ --targets "Key=instanceids,Values=i-0cb2b964d3e14fd9f" \ --name AWS-UpdateSSMAgent \ --calendar-names "arn:aws:ssm:us-east-1:123456789012:document/testCalendar1" "arn:aws:ssm:us-east-2:123456789012:document/testCalendar2" \ --schedule-expression "cron(0 2 ? * SUN *)"
    Windows
    aws ssm create-association ^ --association-name MultiCalendarAssociation ^ --targets "Key=instanceids,Values=i-0cb2b964d3e14fd9f" ^ --name AWS-UpdateSSMAgent ^ --calendar-names "arn:aws:ssm:us-east-1:123456789012:document/testCalendar1" "arn:aws:ssm:us-east-2:123456789012:document/testCalendar2" ^ --schedule-expression "cron(0 2 ? * SUN *)"
    PowerShell
    New-SSMAssociation ` -AssociationName MultiCalendarAssociation ` -Name AWS-UpdateSSMAgent ` -Target @{ "Key"="tag:instanceids" "Values"="i-0cb2b964d3e14fd9f" } ` -CalendarNames "arn:aws:ssm:us-east-1:123456789012:document/testCalendar1" "arn:aws:ssm:us-east-2:123456789012:document/testCalendar2" ` -ScheduleExpression "cron(0 2 ? * SUN *)"
注意

如果刪除您建立的關聯,關聯將不再在該關聯的任何目標上執行。此外,如果您已指定 apply-only-at-cron-interval 參數,則可以重設此選項。若要執行這項操作,請在透過命令列更新關聯時指定 no-apply-only-at-cron-interval 參數。此參數會在更新關聯後立即強制執行關聯,以及根據指定的間隔強制執行關聯。