

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

# `AWSSupport-ContainEC2Instance`
<a name="automation-awssupport-containec2instance"></a>

 **Description** 

`AWSSupport-ContainEC2Instance` Runbook 為文章中概述的程序提供自動化解決方案[。遇到可能遭到入侵或可疑的情況時，如何隔離 Amazon EC2 執行個體？](https://repost.aws/articles/ARwkDzoO-8RN-SDQnA1aX-XA) 自動化分支取決於您指定的值。

 **如何運作？** 

此 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 文件：[https://docs.aws.amazon.com//IAM/latest/UserGuide/access_controlling.html](https://docs.aws.amazon.com//IAM/latest/UserGuide/access_controlling.html)[https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-setup-iam.html](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-setup-iam.html)。
此 Runbook 會執行可能導致工作負載無法使用或中斷的變動動作。具體而言，它會修改與目標 Amazon EC2 執行個體相關聯的安全群組，這可能會影響網路連線。此外，如果執行個體是 Auto Scaling 群組的一部分， Runbook 可能會修改群組的組態，進而可能影響其擴展行為。
在遏制過程中，此 Runbook 會建立其他資源，例如安全群組和 AMI。雖然這些資源已加上標籤以供識別，但您應該知道它們的建立，並確保在遏制程序完成後進行適當的清除或管理。
如果 `Action` 參數設定為 `Release`，此 Runbook 會嘗試將 Amazon EC2 執行個體的組態還原為其原始狀態。不過，還原程序可能會失敗，使執行個體處於不一致的狀態。Runbook 提供在發生此類失敗時手動還原的說明，但您應該準備好在還原過程中處理潛在問題。
建議您徹底檢閱 Runbook、了解其潛在影響，並在非生產環境中進行測試，然後再在您的生產環境中執行。

 [執行此自動化 （主控台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-ContainEC2Instance) 

**文件類型**

 自動化

**擁有者**

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

範例政策：

------
#### [ JSON ]

****  

```
	{
		"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 [https://console.aws.amazon.com/systems-manager/documents/AWSSupport-ContainEC2Instance/description](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-ContainEC2Instance/description)中導覽至 。

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

1. 針對輸入參數，輸入下列內容：
   + **AutomationAssumeRole （選用）：**
     + 描述：（選用） 允許 Systems Manager Automation 代表您執行動作的 (IAM) 角色的 Amazon Resource Name AWS AWS Identity and Access Management (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 （條件式）：**
     + 描述：（條件式） 在 `Action` 為 時上傳組態的 Amazon S3 儲存貯體，`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}$`

1. 選取執行。

1. 自動化會啟動。

1. 文件會執行下列步驟：
   + **ValidateRequiredInputs**

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

     檢查目標 Amazon EC2 執行個體是否未終止 （已刪除）。
   + **GetAutoScalingInstanceInfo**

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

     檢查目標 Amazon S3 儲存貯體是否可能授予`read`或`write`公開存取其物件。如果儲存貯體不存在，則會建立新的 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**

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

1. 執行完成後，請檢閱輸出區段以取得執行的詳細結果：
   + **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
+ [執行此自動化 （主控台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-ContainEC2Instance)
+ [執行簡易自動化](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-working-executing.html)
+ [設定自動化](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-setup.html)
+ [支援自動化工作流程](https://aws.amazon.com/premiumsupport/technology/saw/)