

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

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

 **描述** 

该`AWSSupport-ContainEC2Instance`运行手册为文章中概述的程序提供了自动解决方案，[当面临潜在的入侵或可疑情况时，如何隔离 Amazon EC2 实例](https://repost.aws/articles/ARwkDzoO-8RN-SDQnA1aX-XA)？ 自动化的分支取决于您指定的值。

 **如何工作？** 

本自动化运行手册通过一系列协调步骤对 Amazon EC2 实例`AWSSupport-ContainEC2Instance`进行网络控制。在`Contain`模式下执行时，它首先验证输入参数并检查实例是否未终止。然后，它将当前的安全组配置备份到 Amazon S3 存储桶，以便日后恢复。运行手册创建了两个安全组：临时的 “所有访问权限” 安全组和最后一个 “遏制” 安全组。它会逐渐将实例的网络接口从其原始安全组过渡到所有访问安全组，最后过渡到包含安全组。如果指定，它将创建实例的未加密和加密AMI备份。对于 Auto Scaling 组中的实例，它会处理必要的 Auto Scaling 组修改并将实例置于待机状态。在`Release`模式下执行时，它会使用 Amazon S3 中的备份设置将实例恢复到其原始网络配置。运行手册支持无需进行实际更改即可预览操作的`DryRun`参数，并在整个容器和发布工作流程中包括全面的错误处理和报告机制。

**重要**  
此运行手册执行各种需要提升权限的操作，例如修改安全组、创建安全组以及与 Auto AMI Scaling 组进行交互。这些操作可能会导致权限提升或影响您账户中的其他工作负载。您应查看向`AutomationAssumeRole`参数指定的角色授予的权限，并确保这些权限适用于预期用例。您可以参考以下 AWS 文档，了解有关 IAM 权限的更多信息：[https://docs.aws.amazon.com//IAM/latest/UserGuide/access_controlling.html](https://docs.aws.amazon.com//IAM/latest/UserGuide/access_controlling.html)。
此运行手册执行的变异操作可能会导致您的工作负载不可用或中断。具体而言，它会修改与目标 Amazon EC2 实例关联的安全组，这可能会影响网络连接。此外，如果该实例是 Auto Scaling 组的一部分，则运行手册可能会修改该组的配置，从而可能影响其扩展行为。
在控制过程中，此运行手册会创建其他资源，例如安全组和。AMI虽然这些资源被标记为用于识别，但您应该知道它们的创建，并确保在控制过程完成后进行适当的清理或管理。
如果将`Action`参数设置为`Release`，则此运行手册会尝试将 Amazon EC2 实例的配置恢复到其原始状态。但是，还原过程有可能失败，从而使实例处于不一致的状态。运行手册提供了在出现此类故障时手动恢复的说明，但您应该做好在恢复过程中处理潜在问题的准备。
建议在生产环境中执行运行手册之前，请仔细阅读运行手册，了解其潜在影响，并在非生产环境中对其进行测试。

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

**文档类型**

自动化

**所有者**

Amazon

**平台**

/

**所需的 IAM 权限**

`AutomationAssumeRole` 参数需要执行以下操作才能成功使用运行手册。
+ 自动缩放：CreateOrUpdateTags
+ 自动缩放：DeleteTags
+ 自动缩放：DescribeAutoScalingGroups
+ 自动缩放：DescribeAutoScalingInstances
+ 自动缩放：DescribeTags
+ 自动缩放：EnterStandby
+ 自动缩放：ExitStandby
+ 自动缩放：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: CreateGrant
+ kms: DescribeKey
+ 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. [https://console.aws.amazon.com/systems-manager/documents/AWSSupport-ContainEC2Instance/description](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-ContainEC2Instance/description)在 Systems Manager 的 “文档” 下导航至。

1. 选择 **Execute automation**（执行自动化）。

1. 对于输入参数，请输入以下内容：
   + **AutomationAssumeRole （可选）：**
     + 描述：（可选）允许 Systems Manager Automation 代表您执行操作 AWS AWS Identity and Access Management (IAM) 角色的 Amazon 资源名称（ARN）。如果未指定角色，Systems Manager Automation 将使用启动此运行手册的用户的权限。
     + 类型：`AWS::IAM::Role::Arn`
   + **操作（必填）：**
     + 描述：（必填）选择`Contain`隔离 Amazon EC2 实例或`Restore`尝试从先前的备份中恢复 Amazon EC2 实例配置的原始配置。
     + 类型：字符串
     + 允许的模式：`Contain|Restore`
   + **DryRun （可选）：**
     + 描述：（可选）设置为时`true`，自动化将不执行任何命令，而是报告其本来会尝试执行的操作，详细说明每个步骤。默认值：`true`。
     + 类型：布尔值
     + 允许的值：`true|false`
   + **创建AMIBackup （可选）：**
     + 描述：（可选）如果设置为`true`，则将在执行控制操作之前创建一个 AMI Amazon EC2 实例。
     + 类型：布尔值
     + 允许的值：`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"}]` Cidr IpProtocol、 FromPort 和 ToPort ，将应用于 Amazon EC2 实例。如果未提供任何规则，则会将没有任何入口规则的安全组附加到 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 IpProtocol、 FromPort 和 ToPort ，格式`[{"Cidr": "1.2.3.4/32", "IpProtocol": "tcp", "FromPort":"22", "ToPort":"22"}]`将应用于 Amazon EC2 实例。如果未提供任何规则，则会将没有任何出口规则的安全组附加到 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 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。输出**

     当设置为 False 时`DryRun`，输出此运行手册执行的遏制操作的详细信息。
   + **RestoreInstanceConfiguration。输出**

     当设置为 False 时，输出此运行手册执行`DryRun`的还原操作。
   + **ReportContain。输出**

     设置为 Tr `DryRun` ue 时，输出此运行手册执行的遏制操作的详细信息。
   + **ReportRestore。输出**

     设置为 True 时`DryRun`，输出此运行手册执行的还原操作的详细信息。
   + **ReportContainmentFailure。输出**

     提供在控制工作流程失败的情况下恢复目标 Amazon EC2 实例原始配置的说明。
   + **ReportRestoreFailure。输出**

     提供在恢复工作流程失败的情况下恢复目标 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)
+ [Support 自动化工作流程](https://aws.amazon.com/premiumsupport/technology/saw/)