建立關聯 - 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 主控台將標籤新增至關聯。如需標籤的詳細資訊,請參閱標記 Systems Manager 資源

執行關聯

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

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

  • State Manager 嘗試於間隔期間在所有已指定或設為目標的節點上執行關聯。

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

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

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

排程關聯

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

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

State Manager 不僅支援標準的 Cron 和 Rate 運算式,還支援這類 Cron 運算式:包含一週中的某一天和數字符號 (#),來指定一個月的第 n 天執行關聯。以下是在每個月的第三個星期二 23 UTC :30 運行 cron 計劃的示例:

cron(30 23 ? * TUE#3 *)

下面是在每個月的第二個星期四午夜運行的例子UTC:

cron(0 0 ? * THU#2 *)

State Manager 還支援 (L) 符號來指示一個月的最後 X 天。以下是在每個月的最後一個星期二午夜UTC運行 cron 計劃的示例:

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 (錯誤閾值) 部分,選擇一個選項:

    • 選擇 errors (錯誤),輸入 State Manager 停止在額外目標執行關聯之前允許的錯誤絕對數量。

    • 選擇 percentage (百分比),輸入 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 無法將相應節點作為關聯的目標。如需將標籤指派給節點的詳細資訊,請參閱 標記 Systems Manager 資源

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

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

    如需相關資訊,請參閱安裝或更新 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文檔在UTC每個星期天早SSM Agent上 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文檔在UTC每個星期天早SSM Agent上 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 文件,在每週日的上午 2:00 更新目標節點上的 SSM Agent。當變更行事曆開啟時,此關聯只會在指定的 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 參數。此參數會在更新關聯後立即強制執行關聯,以及根據指定的間隔強制執行關聯。