AWSSupport-ContainEC2Instance - AWS Systems Manager 自動化 Runbook 參考

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

AWSSupport-ContainEC2Instance

Description

AWSSupport-ContainEC2Instance Runbook 為文章中概述的程序提供自動化解決方案。遇到可能遭到入侵或可疑的情況時,如何隔離 Amazon EC2 執行個體? 自動化分支取決於您指定的值。

如何運作?

此 Automation Runbook 透過一系列協調步驟AWSSupport-ContainEC2Instance執行 Amazon EC2 執行個體的網路遏制。在Contain模式下執行時,它會先驗證輸入參數,並檢查執行個體是否未終止。然後,它會將目前的安全群組組態備份到 Amazon S3 儲存貯體,以供稍後還原。Runbook 會建立兩個安全群組:臨時「所有存取」安全群組和最終「容器」安全群組。它會逐漸將執行個體的網路界面從其原始安全群組轉移到全存取安全群組,最後轉移到遏制安全群組。如果指定,它會建立執行個體的未加密和加密AMI備份。對於 Auto Scaling 群組中的執行個體,它會處理必要的 Auto Scaling 群組修改,並使執行個體進入待命狀態。在Release模式下執行時,它會使用 Amazon S3 的備份設定,將執行個體還原至其原始網路組態。Runbook 支援 DryRun 參數,可在不進行實際變更的情況下預覽動作,並在整個遏制和發佈工作流程中包含全面的錯誤處理和報告機制。

重要
  • 此 Runbook 會執行需要提升權限的各種操作,例如修改安全群組、建立 AMI,以及與 Auto Scaling 群組互動。這些動作可能會導致權限提升或影響您帳戶中的其他工作負載。您應該檢閱授予 AutomationAssumeRole 參數所指定角色的許可,並確保這些許可適用於預期的使用案例。如需 IAM 許可的詳細資訊,請參閱下列 AWS 文件:AWS Identity and Access Management (IAM) PermissionsAWS Systems Manager Automation Permissions

  • 此 Runbook 會執行可能導致工作負載無法使用或中斷的變動動作。具體而言,它會修改與目標 Amazon EC2 執行個體相關聯的安全群組,這可能會影響網路連線。此外,如果執行個體是 Auto Scaling 群組的一部分, Runbook 可能會修改群組的組態,這可能會影響其擴展行為。

  • 在遏制過程中,此 Runbook 會建立其他資源,例如安全群組和 AMI。雖然這些資源已加上標籤以供識別,但您應該知道它們的建立,並確保在遏制程序完成後進行適當的清除或管理。

  • 如果 Action 參數設定為 Release,此 Runbook 會嘗試將 Amazon EC2 執行個體的組態還原為其原始狀態。不過,還原程序可能會失敗,使執行個體處於不一致的狀態。Runbook 提供在發生此類失敗時手動還原的說明,但您應該準備好在還原過程中處理潛在問題。

建議您徹底檢閱 Runbook、了解其潛在影響,並在非生產環境中進行測試,然後再在您的生產環境中執行。

執行此自動化 (主控台)

文件類型

 自動化

擁有者

Amazon

平台

/

必要的 IAM 許可

AutomationAssumeRole 參數需要下列動作才能成功使用 Runbook。

  • autoscaling:CreateOrUpdateTags

  • autoscaling:DeleteTags

  • autoscaling:DescribeAutoScalingGroups

  • autoscaling:DescribeAutoScalingInstances

  • autoscaling:DescribeTags

  • autoscaling:EnterStandby

  • autoscaling:ExitStandby

  • autoscaling:UpdateAutoScalingGroup

  • ec2:AuthorizeSecurityGroupEgress

  • ec2:AuthorizeSecurityGroupIngress

  • ec2:CopyImage

  • ec2:CreateImage

  • ec2:CreateSecurityGroup

  • ec2:CreateSnapshot

  • ec2:CreateTags

  • ec2:DeleteSecurityGroup

  • ec2:DeleteTags

  • ec2:DescribeImages

  • ec2:DescribeInstances

  • ec2:DescribeSecurityGroups

  • ec2:DescribeSnapshots

  • ec2:DescribeTags

  • ec2:ModifyNetworkInterfaceAttribute

  • ec2:RevokeSecurityGroupEgress

  • kms:創建權限

  • kms:描述金鑰

  • kms:GenerateDataKeyWithoutPlaintext

  • kms:ReEncryptFrom

  • kms:ReEncryptTo

  • s3:CreateBucket

  • s3:DeleteObjectTagging

  • s3:GetAccountPublicAccessBlock

  • s3:GetBucketAcl

  • s3:GetBucketLocation

  • s3:GetBucketOwnershipControls

  • s3:GetBucketPolicy

  • s3:GetBucketPolicyStatus

  • s3:GetBucketPublicAccessBlock

  • s3:GetObject

  • s3:ListBucket

  • s3:PutAccountPublicAccessBlock

  • s3:PutBucketPolicy

  • s3:PutBucketVersioning

  • s3:PutObject

  • s3:PutObjectTagging

範例政策:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadOperations", "Effect": "Allow", "Action": [ "autoscaling:DescribeAutoScalingGroups", "autoscaling:DescribeAutoScalingInstances", "autoscaling:DescribeTags", "ec2:DescribeImages", "ec2:DescribeInstances", "ec2:DescribeSecurityGroups", "ec2:DescribeSnapshots", "ec2:DescribeTags", "kms:DescribeKey", "s3:GetAccountPublicAccessBlock", "s3:GetBucketAcl", "s3:GetBucketLocation", "s3:GetBucketOwnershipControls", "s3:GetBucketPolicy", "s3:GetBucketPolicyStatus", "s3:GetBucketPublicAccessBlock", "s3:GetObject", "s3:ListBucket" ], "Resource": "*" }, { "Sid": "WriteOperations", "Effect": "Allow", "Action": [ "autoscaling:CreateOrUpdateTags", "autoscaling:DeleteTags", "autoscaling:EnterStandby", "autoscaling:ExitStandby", "autoscaling:UpdateAutoScalingGroup", "ec2:AuthorizeSecurityGroupEgress", "ec2:AuthorizeSecurityGroupIngress", "ec2:CopyImage", "ec2:CreateImage", "ec2:CreateSecurityGroup", "ec2:CreateSnapshot", "ec2:CreateTags", "ec2:DeleteSecurityGroup", "ec2:DeleteTags", "ec2:ModifyNetworkInterfaceAttribute", "ec2:RevokeSecurityGroupEgress", "kms:CreateGrant", "kms:GenerateDataKeyWithoutPlaintext", "kms:ReEncryptFrom", "kms:ReEncryptTo", "s3:CreateBucket", "s3:DeleteObjectTagging", "s3:PutAccountPublicAccessBlock", "s3:PutBucketPolicy", "s3:PutBucketVersioning", "s3:PutObject", "s3:PutObjectTagging" ], "Resource": "*" } ] }

指示

請依照下列步驟設定自動化:

  1. 在文件下的 Systems Manager AWSSupport-ContainEC2Instance中導覽至 。

  2. 選擇 Execute automation (執行自動化)。

  3. 針對輸入參數,輸入下列內容:

    • AutomationAssumeRole (選用):

      • 描述:(選用) 允許 Systems Manager Automation 代表您執行動作的 AWS AWS Identity and Access Management (IAM) 角色的 Amazon Resource Name (ARN)。如果未指定角色,Systems Manager Automation 會使用啟動此 Runbook 之使用者的許可。

      • 類型:AWS::IAM::Role::Arn

    • 動作 (必要):

      • 描述:(必要) 選取 Contain 以隔離 Amazon EC2 執行個體Restore,或嘗試從先前的備份還原 Amazon EC2 執行個體組態原始組態。

      • 類型:字串

      • 允許模式: Contain|Restore

    • DryRun (選用):

      • 描述:(選用) 設為 時true,自動化不會執行任何命令,而是會報告嘗試執行的動作,詳細說明每個步驟。預設值:true

      • 類型:布林值

      • 允許的值: true|false

    • CreateAMIBackup (選用):

      • 描述:(選用) 設定為 時true,Amazon EC2 執行個體AMI的 會在執行遏制動作之前建立。

      • 類型:布林值

      • 允許的值: true|false

    • KmsKey (選用):

      • 描述:(選用) 將用於建立目標 Amazon EC2 執行個體加密AMI的 AWS KMS 金鑰 ID。預設值設為 alias/aws/ebs

      • 類型:字串

      • 允許模式: ^(((arn:(aws|aws-cn|aws-us-gov):kms:([a-z]{2}|[a-z]{2}-gov)-[a-z]+-[0-9]{1}:[0-9]{12}:key/)?([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}|mrk-[a-f0-9]{32}))|(arn:(aws|aws-cn|aws-us-gov):kms:([a-z]{2}|[a-z]{2}-gov)-[a-z]+-[0-9]{1}:[0-9]{12}:)?alias/.{1,})$

    • BackupS3BucketName (條件式):

      • 描述:(條件式) Amazon Amazon S3 儲存貯體,以在 Action 為 時上傳組態,Contain或在 Action為 時還原組態Release注意:如果帳戶中不存在提供的儲存貯體,自動化將代表您建立 Amazon S3 儲存貯體。

      • 類型:AWS::S3::Bucket::Name

    • TagIdentifier (選用):

      • 描述:(選用) 格式的標籤,Key=BatchId,Value=78925將在遏制工作流程期間新增至此 Runbook 建立或修改 AWS 的資源。此標籤可用於識別和管理在遏制過程中相關聯的資源。在還原工作流程期間,此參數指定的標籤將從 資源中移除。注意:標籤鍵和值區分大小寫。

      • 類型:字串

      • 允許模式: ^$|^[Kk][Ee][Yy]=[\\+\\-\\=\\.\\_\\:\\/@a-zA-Z0-9]{1,128},[Vv][Aa][Ll][Uu][Ee]=[\\+\\-\\=\\.\\_\\:\\/@a-zA-Z0-9]{0,128}$

    • BackupS3BucketAccess (條件式):

      • 描述:(條件式) 在執行遏制動作後,允許存取備份 Amazon S3 儲存貯體的 IAM 使用者或角色 ARN。當 Action為 時,此參數為必要Contain。在 AutomationAssumeRole或 不存在的情況下,正在執行自動化的使用者會自動新增至清單中。

      • 類型:字串

      • 允許模式: ^$|^arn:(aws|aws-cn|aws-us-gov|aws-iso(-[a-z])?):iam::[0-9]{12}:(role|user)\\/[\\w+\\/=,.@-]+$

    • IngressTrafficRules (選用):

      • 描述:(選用) 以逗號分隔的安全群組輸入規則對應,其中包含[{"Cidr": "1.2.3.4/32", "IpProtocol": "tcp", "FromPort":"22", "ToPort":"22"}]要套用至 Amazon EC2 執行個體的 Cidr、IpProtocol、 FromPort 和 ToPort 格式。如果未提供任何規則,則沒有任何輸入規則的安全群組將連接到 Amazon EC2 執行個體,有效地隔離它與任何傳入流量。

      • 類型:MapList

      • 允許模式: ^\\{\\}$|^\\{\"Cidr\":\"[\\x00-\\x7F+]{1,128}\",\"IpProtocol\":\"[\\x00-\\x7F+]{1,128}\",\"FromPort\":\"[\\x00-\\x7F+]{1,128}\",\"ToPort\":\"[\\x00-\\x7F+]{0,255}\"\\}

    • EgressTrafficRules (選用):

      • 描述:(選用) 以逗號分隔的安全群組輸出規則對應,其中包含[{"Cidr": "1.2.3.4/32", "IpProtocol": "tcp", "FromPort":"22", "ToPort":"22"}]要套用至 Amazon EC2 執行個體的 Cidr、IpProtocol、FromPort 和 ToPort 格式。如果未提供任何規則,則沒有任何輸出規則的安全群組將連接到 Amazon EC2 執行個體,有效地防止所有傳出流量。

      • 類型:MapList

      • 允許模式: ^\\{\\}$|^\\{\"Cidr\":\"[\\x00-\\x7F+]{1,128}\",\"IpProtocol\":\"[\\x00-\\x7F+]{1,128}\",\"FromPort\":\"[\\x00-\\x7F+]{1,128}\",\"ToPort\":\"[\\x00-\\x7F+]{0,255}\"\\}

    • BackupS3KeyName (選用):

      • 描述:(選用) 如果 Action 設定為 Restore,這會指定自動化用來嘗試還原目標 Amazon EC2 執行個體組態的 Amazon S3 金鑰。 Amazon EC2 Amazon S3 金鑰通常遵循此格式:{year}/{month}/{day}/{hour}/{minute}/{automation_execution_id}.json。金鑰可從先前的遏制自動化執行的輸出取得。

      • 類型:字串

      • 允許模式: ^[a-zA-Z0-9\\.\\-_\\\\!*'()/]{0,1024}$

  4. 選取執行。

  5. 自動化會啟動。

  6. 文件會執行下列步驟:

    • ValidateRequiredInputs

      驗證是否已提供所有必要的輸入。

    • AssertInstanceIsNotTerminated

      檢查目標 Amazon EC2 執行個體是否未終止 (已刪除)。

    • GetAutoScalingInstanceInfo

      如果目標 Amazon EC2 執行個體是 Auto Scaling 群組的一部分,則取得 Amazon EC2 執行個體生命週期和群組名稱。

    • CheckBackupS3BucketName

      檢查目標 Amazon S3 儲存貯體是否可能授予readwrite公開存取其物件。如果儲存貯體不存在,則會建立新的 Amazon S3 儲存BackupS3BucketName貯體。

    • BranchOnActionAndMode

      根據輸入參數 Action和 分支自動化DryRun

    • BranchOnAutoScalingGroupMembership

      根據目標 Amazon EC2 執行個體是否屬於 Auto Scaling 群組及其生命週期狀態,來配置自動化。

    • DescribeAutoScalingGroups

      取得和存放相關聯的 Amazon EC2 Auto Scaling 群組組態。

    • ModifyAutoScalingGroup

      修改遏制動作的相關 Amazon EC2 Auto Scaling 群組組態,將 Amazon EC2 執行個體設定為 Standby 狀態並調整 Auto Scaling 群組MinSize容量。

    • BackupInstanceSecurityGroups

      取得和存放目標 Amazon EC2 執行個體安全群組的組態。

    • CreateAllAccessSecurityGroup

      建立臨時安全群組,允許取代目標 Amazon EC2 執行個體安全群組的所有輸入流量。

    • CreateContainmentSecurityGroup

      使用指定的輸入和輸出規則建立限制性遏制安全群組,並將暫時全存取群組取代為該群組。

    • BranchOnCreateAMIBackup

      根據CreateAMIBackup輸入參數配置自動化。

    • AssertSourceInstanceRootVolumeIsEbs

      檢查目標 Amazon EC2 執行個體根磁碟區是否為 Amazon EBS。

    • CreateImage

      建立目標 Amazon EC2 執行個體AMI的 。

    • RestoreInstanceConfiguration

      從備份還原目標 Amazon EC2 執行個體組態。

    • ReportContain

      輸出遏制動作的試轉詳細資訊。

    • ReportRestore

      輸出還原動作的試轉詳細資訊。

    • ReportRestoreFailure

      提供在還原工作流程失敗案例期間還原目標 Amazon EC2 執行個體原始組態的指示。

    • ReportContainmentFailure

      提供在遏制工作流程失敗情況下還原目標 Amazon EC2 執行個體原始組態的指示。

    • FinalOutput

      輸出遏制動作的詳細資訊。

  7. 執行完成後,請檢閱輸出區段以取得執行的詳細結果:

    • FinalOutput.Output

      DryRun 設定為 False 時,輸出此 Runbook 所執行之遏制動作的詳細資訊。

    • RestoreInstanceConfiguration.Output

      DryRun 設定為 False 時,輸出此 Runbook 執行的還原動作。

    • ReportContain.Output

      DryRun 設定為 True 時,輸出此 Runbook 所執行之遏制動作的詳細資訊。

    • ReportRestore.Output

      DryRun 設定為 True 時,輸出此 Runbook 所執行還原動作的詳細資訊。

    • ReportContainmentFailure.Output

      提供在遏制工作流程失敗情況下還原目標 Amazon EC2 執行個體原始組態的指示。

    • ReportRestoreFailure.Output

      提供在還原工作流程失敗案例期間還原目標 Amazon EC2 執行個體原始組態的指示。

參考

Systems Manager Automation