AWSSupport-ContainEC2Instance - AWS Systems Manager 自动化运行手册参考

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

AWSSupport-ContainEC2Instance

描述

AWSSupport-ContainEC2Instance运行手册为文章中概述的程序提供了自动解决方案,当面临潜在的入侵或可疑情况时,如何隔离 Amazon EC2 实例? 自动化的分支取决于您指定的值。

如何工作?

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

重要
  • 此 runbook 执行各种需要提升权限的操作,例如修改安全组、创建 AMIs,并与 Auto Scaling 群组互动。这些操作可能会导致权限提升或影响您账户中的其他工作负载。您应查看向AutomationAssumeRole参数指定的角色授予的权限,并确保这些权限适用于预期用例。您可以参考以下 AWS 文档,了解有关 IAM 权限的更多信息:AWS Identity and Access Management (IAM) PermissionsAWS Systems Manager Automation Permissions

  • 此运行手册执行的变异操作可能会导致您的工作负载不可用或中断。具体而言,它会修改与目标 Amazon EC2 实例关联的安全组,这可能会影响网络连接。此外,如果该实例是 Auto Scaling 组的一部分,则运行手册可能会修改该组的配置,从而可能影响其扩展行为。

  • 在控制过程中,此运行手册会创建其他资源,例如安全组和 AMI。虽然这些资源被标记为用于识别,但您应该知道它们的创建,并确保在控制过程完成后进行适当的清理或管理。

  • 如果将Action参数设置为Release,则此运行手册会尝试将 Amazon EC2 实例的配置恢复到其原始状态。但是,还原过程有可能失败,从而使实例处于不一致的状态。运行手册提供了在出现此类故障时手动恢复的说明,但您应该做好在恢复过程中处理潜在问题的准备。

建议在生产环境中执行运行手册之前,请仔细阅读运行手册,了解其潜在影响,并在非生产环境中对其进行测试。

运行此自动化(控制台)

文档类型

自动化

所有者

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

策略示例:

{ "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. AWSSupport-ContainEC2Instance在 Systems Manager 的 “文档” 下导航至。

  2. 选择 Execute automation(执行自动化)。

  3. 对于输入参数,请输入以下内容:

    • AutomationAssumeRole (可选):

      • 描述:(可选)允许 Systems Manager Automation 代表您执行操作的 AWS AWS Identity and Access Management (IAM) 角色的亚马逊资源名称 (ARN)。如果未指定角色,Systems Manager Automation 将使用启动此运行手册的用户的权限。

      • 类型:AWS::IAM::Role::Arn

    • 操作(必填):

      • 描述:(必填)选择Contain隔离亚马逊 EC2 实例或Restore尝试从先前的备份中恢复亚马逊 EC2 实例配置的原始配置。

      • 类型:字符串

      • 允许的模式:Contain|Restore

    • DryRun (可选):

      • 描述:(可选)设置为时true,自动化将不执行任何命令,而是报告其本来会尝试执行的操作,详细说明每个步骤。默认值:true

      • 类型:布尔值

      • 允许的值:true|false

    • 创建AMIBackup (可选):

      • 描述:(可选)当设置为时true,AMI 的 Amazon EC2 实例将在执行控制操作之前创建。

      • 类型:布尔值

      • 允许的值:true|false

    • KmsKey (可选):

      • 描述:(可选)将用于创建加密 AWS KMS 密钥的 ID AMI 的目标 Amazon EC2 实例。默认设置为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。当是时,此参数是必需ActionContain。自动将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": "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}\"\\}

    • BackupS3KeyName (可选):

      • 描述:(可选)如果设置ActionRestore,则指定自动化用于尝试恢复目标亚马逊 EC2 实例配置的 Amazon S3 密钥。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

      如果目标亚马逊 EC2 实例是 Auto Scaling 组的一部分,则获取亚马逊 EC2 实例生命周期和组名称。

    • CheckBackupS3BucketName

      检查目标 Amazon S3 存储桶是否有可能向其对象授予readwrite公开访问其对象。如果存储桶不存在,则会创建一个新的 Amazon S3 BackupS3BucketName 存储桶。

    • BranchOnActionAndMode

      根据输入参数对自动化进行分支ActionDryRun

    • BranchOnAutoScalingGroupMembership

      根据目标 Amazon EC2 实例是否属于 Auto Scaling 组及其生命周期状态来分支自动化。

    • DescribeAutoScalingGroups

      获取并存储关联的 Amazon A EC2 uto Scaling 组配置。

    • ModifyAutoScalingGroup

      修改包含操作的关联的 Amazon A EC2 uto Scaling 组配置,将亚马逊 EC2 实例设置为Standby状态并调整 Auto Scaling 组MinSize的容量。

    • BackupInstanceSecurityGroups

      获取并存储目标 Amazon EC2 实例安全组的配置。

    • CreateAllAccessSecurityGroup

      创建一个临时安全组,允许取代目标 Amazon EC2 实例的安全组的所有入口流量。

    • CreateContainmentSecurityGroup

      使用指定的入口和出口规则创建限制性容器安全组,并用它替换临时的全部访问安全组。

    • BranchOnCreateAMIBackup

      根据CreateAMIBackup输入参数对自动化进行分支。

    • AssertSourceInstanceRootVolumeIsEbs

      检查目标亚马逊 EC2 实例根卷是否是 Amazon EBS。

    • CreateImage

      创建一个 AMI 的目标 Amazon EC2 实例。

    • RestoreInstanceConfiguration

      从备份中恢复目标 Amazon EC2 实例配置。

    • ReportContain

      输出遏制操作的试运行详细信息。

    • ReportRestore

      输出恢复操作的试运行详细信息。

    • ReportRestoreFailure

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

    • ReportContainmentFailure

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

    • FinalOutput

      输出遏制操作的详细信息。

  7. 执行完成后,请查看 “输出” 部分,了解执行的详细结果:

    • FinalOutput。输出

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

    • RestoreInstanceConfiguration。输出

      当设置为 False 时,输出此运行手册执行DryRun的还原操作。

    • ReportContain。输出

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

    • ReportRestore。输出

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

    • ReportContainmentFailure。输出

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

    • ReportRestoreFailure。输出

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

参考

Systems Manager Automation