演练:在 EC2 实例上重置密码和 SSH 密钥 - AWS Systems Manager

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

演练:在 EC2 实例上重置密码和 SSH 密钥

您可以使用AWSSupport-ResetAccessrunbook 在亚马逊弹性计算云 Amazon EC2 实例上自动重新启用本地管理员密码生成Windows Server并在适用于 Linux 的 EC2 实例上生成新的 SSH 密钥。这些区域有:AWSSupport-ResetAccessRunbook 的设计用于执行AWS Systems Manager操作,AWS CloudFormation操作,以及AWS Lambda函数,从而将重置本地管理员密码通常所需的步骤自动化。

您可以使用 “自动化” 功能,AWS Systems Manager,使用AWSSupport-ResetAccessrunbook 来解决以下问题:

Windows

EC2 key pair 丢失:要解决此问题,您可以使用AWSSupport-ResetAccessRunbook 创建启用密码的AMI,从 AMI 启动新实例,然后选择您拥有的 key pair。

您丢失本地管理员密码:要解决此问题,您可以使用AWSSupport-ResetAccess运行手册生成可以使用当前 EC2 key pair 解密的一个新密码。

Linux

您丢失了 EC2 key pair,或者使用丢失的密钥配置了对实例的 SSH 访问:要解决此问题,您可以使用AWSSupport-ResetAccessrunbook 为您的当前实例创建新的 SSH 密钥,这使您能够再次连接到该实例。

注意

如果用于的 EC2 实例Windows Server配置为 Systems Manager,也可以使用 EC2Rescue 和重置您的本地管理员密码AWS Systems Manager Run Command. 有关更多信息,请参阅 。将 EC2Rescue of Windows Server 与 Systems Manager 结合使用Run Command中的Windows 实例 Amazon EC2 用户指南.

工作原理

使用 Automation 和AWSSupport-ResetAccessRunbook 工作原理如下:

  • 您为实例指定 ID 并运行 Runbook。

  • 系统创建一个临时 VPC,然后运行一系列 Lambda 函数以配置该 VPC。

  • 系统在与您的原始实例相同的可用区内为您的临时 VPC 标识一个子网。

  • 系统启动一个临时的启用了 SSM 的 帮助程序实例。

  • 系统停止您的原始实例并创建备份。然后,它将原始根卷附加到帮助程序实例。

  • 系统使用 Run Command 在帮助程序实例上运行 EC2Rescue。在 Windows 上,EC2Rescue 通过在附加的原始根卷上使用 EC2Config 或 EC2Launch 为本地管理员启用密码生成。在 Linux 上,EC2Rescue 生成并注入新的 SSH 密钥并将私有密钥加密保存到 Parameter Store 中。完成后,EC2Rescue 重新将根卷附加回原始实例。

  • 系统将创建新的Amazon Machine Image(AMI),现在密码生成已启用。您可以使用此AMI创建新 EC2 实例,并根据需要关联新 key pair。

  • 系统重启您的原始实例,并终止临时实例。系统也将终止临时 VPC 和在自动化开始时创建的 Lambda 函数。

  • Windows: 您的实例生成一个新密码,您可以使用分配给实例的当前 key pair 从 Amazon EC2 控制台对该密码进行解码。

    Linux:您可以使用存储在 Systems Manager Parameter Store 中的 SSH 密钥 (格式为/ec2r/开页/instance_id/key.

开始前的准备工作

运行以下自动化之前,请执行以下操作:

  • 复制要重置管理员密码的实例的实例 ID。您将在过程中指定此 ID。

  • (可选) 收集无法访问实例所在可用区中子网的 ID。EC2Rescue 实例将在此子网中创建。如果不指定子网,Automation 会 VPC 您的 AWS 账户 . 验证您的 AWS 账户 至少有一个可用 VPC。默认情况下,一个区域中可以创建 5 个 VPC。如果您已在该区域中创建 5 个 VPC,则自动化将会失败,但不会对您的实例进行更改。有关 Amazon VPC 配额的更多信息,请参阅VPC 和子网中的Amazon VPC User Guide.

  • 或者,您可以创建并指定AWS Identity and Access Management(IAM) 角色。如果您不指定此角色,则自动化将在运行自动化的用户的环境中运行。有关为自动化创建角色的更多信息,请参阅使用 IAM 服务角色运行自动化

向 AWSSupport-EC2Rescue 授予在您的实例上执行操作的权限

在自动化期间,EC2Rescue 需要权限才能在您的实例上执行一系列操作。这些操作调用AWS Lambda、IAM 和 Amazon EC2 服务,安全地尝试修复实例的问题。如果您具有管理员级别权限 AWS 账户 和/或 VPC,您可能能够在不按照本部分中所述配置权限的情况下运行自动化。如果您没有管理员级权限,则您或管理员必须使用以下选项之一配置权限。

使用 IAM 策略授予权限

您可以将以下 IAM 策略作为内链策略附加到 IAM 用户账户、组或角色;也可以创建新的 IAM 托管策略,并将其附加到用户账户、组或角色。有关将内联策略添加到用户账户、组或角色的更多信息,请参阅使用内联策略。有关创建新的托管策略的更多信息,请参阅使用托管策略

注意

如果创建新的 IAM 托管策略,则还必须将AmazonSSMAutomationRole托管策略添加到它,以便实例与 Systems Manager API 通信。

适用于的 IAM 策略 AWSSupport-ResetAccess

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "lambda:InvokeFunction", "lambda:DeleteFunction", "lambda:GetFunction" ], "Resource": "arn:aws:lambda:*:aws-account-id:function:AWSSupport-EC2Rescue-*", "Effect": "Allow" }, { "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::awssupport-ssm.*/*.template", "arn:aws:s3:::awssupport-ssm.*/*.zip" ], "Effect": "Allow" }, { "Action": [ "iam:CreateRole", "iam:CreateInstanceProfile", "iam:GetRole", "iam:GetInstanceProfile", "iam:PutRolePolicy", "iam:DetachRolePolicy", "iam:AttachRolePolicy", "iam:PassRole", "iam:AddRoleToInstanceProfile", "iam:RemoveRoleFromInstanceProfile", "iam:DeleteRole", "iam:DeleteRolePolicy", "iam:DeleteInstanceProfile" ], "Resource": [ "arn:aws:iam::aws-account-id:role/AWSSupport-EC2Rescue-*", "arn:aws:iam::aws-account-id:instance-profile/AWSSupport-EC2Rescue-*" ], "Effect": "Allow" }, { "Action": [ "lambda:CreateFunction", "ec2:CreateVpc", "ec2:ModifyVpcAttribute", "ec2:DeleteVpc", "ec2:CreateInternetGateway", "ec2:AttachInternetGateway", "ec2:DetachInternetGateway", "ec2:DeleteInternetGateway", "ec2:CreateSubnet", "ec2:DeleteSubnet", "ec2:CreateRoute", "ec2:DeleteRoute", "ec2:CreateRouteTable", "ec2:AssociateRouteTable", "ec2:DisassociateRouteTable", "ec2:DeleteRouteTable", "ec2:CreateVpcEndpoint", "ec2:DeleteVpcEndpoints", "ec2:ModifyVpcEndpoint", "ec2:Describe*" ], "Resource": "*", "Effect": "Allow" } ] }

使用 AWS CloudFormation 模板授予权限

AWS CloudFormation使用预配置模板自动化创建 IAM 角色和策略的过程。使用,通过以下过程为 EC2Rescue Automation 创建所需的 IAM 角色和策略。AWS CloudFormation.

为 EC2Rescue 创建所需的 IAM 角色和策略

  1. 下载 AWSSupport-EC2RescueRole.zip 文件并将 AWSSupport-EC2RescueRole.json 解压到本地计算机上的目录。

  2. 如果您的 AWS 账户 在一个特殊分区中,请编辑模板以将 ARN 值更改为您的分区的值。

    例如,对于中国地区,将出现的所有更改arn:awsarn:aws-cn.

  3. 登录到AWS Management Console,然后打开AWS CloudFormation控制台https://console.aws.amazon.com/cloudformation.

  4. 依次选择 Create stack (创建堆栈)With new resources (standard) (使用新资源(标准))

  5. Create stack (创建堆栈) 页面上,对于 Prerequisite - Prepare template (先决条件 - 准备模板),选择 Template is ready (模板已就绪)

  6. 对于 Specify template (指定模板),选择 Upload a template file (上传模板文件)

  7. 选择 Choose file (选择文件),然后进行浏览并从您解压缩 AWSSupport-EC2RescueRole.json 文件的目录中选择此文件。

  8. 选择 Next (下一步)

  9. Specify stack details (指定堆栈详细信息) 页上,对于 Stack name (堆栈名称) 字段,输入用于标识此堆栈的名称,然后选择 Next (下一步)

  10. (可选)在 Tags (标签) 区域,将一个或多个标签键名称/值对应用到堆栈。

    标签是您分配给资源的可选元数据。标签可让您按各种标准(如用途、所有者或环境)对资源进行分类。例如,您可能需要对堆栈进行标记,以确定其运行的任务类型、涉及的目标或其他资源的类型以及其运行的环境。

  11. 选择 Next (下一步)

  12. 在存储库的审核页面上,查看堆栈详细信息,然后向下滚动并选择我承认AWS CloudFormation可能会创建 IAM 资源选项。

  13. AWS CloudFormation 将持续几分钟显示 CREATE_IN_PROGRESS 状态。创建堆栈后,状态将变为 CREATE_COMPLETE。您还可以选择刷新图标来检查创建过程的状态。

  14. 在堆栈列表中,选择您刚刚创建的堆栈旁边的选项,然后选择输出选项卡。

  15. 复制 Value。这是 AssumeRole 的 ARN。在运行自动化时,您将指定此 ARN。

运行 Automation

以下过程介绍如何运行AWSSupport-ResetAccess运行手册,通过使用AWS Systems Manager控制台。

重要

以下自动化将停止实例。停止实例可能导致附加的实例存储卷 (如果存在) 上的数据丢失。如果未关联弹性 IP,停止实例也可能导致公有 IP 更改。要避免这些配置更改,请使用 Run Command 重置访问权限。有关更多信息,请参阅 。将 EC2Rescue of Windows Server 与 Systems Manager 结合使用Run Command中的Windows 实例 Amazon EC2 用户指南.

运行 AWSSupport-ResetAccess 自动化

  1. 访问 https://console.aws.amazon.com/systems-manager/,打开 AWS Systems Manager 控制台。

  2. 在导航窗格中,选择自动化.

    -或者-

    如果AWS Systems Manager首先打开主页,选择菜单图标( ) 以打开导航窗格中的,然后选择。自动化.

  3. 选择执行自动化

  4. Automation document (Automation 文档) 部分中,从列表中选择 Owned by Amazon (Amazon 所拥有)

  5. 在 Runbook 列表中,选择卡片中的按钮AWSSupport-ResetAccess,然后选择下一步.

  6. Execute automation document (执行 Automation 文档) 页面上,选择 Simple execution (简单执行)

  7. Document details (文档详细信息) 部分中,验证 Document version (文档版本) 是否设置为最高默认版本。例如,$DEFAULT3 (default) (3 (默认值))

  8. 输入参数部分中,指定以下参数:

    1. 对于 InstanceID,指定无法访问实例的 ID。

    2. 对于 SubnetId,指定您指定的实例所在可用区中某个现有 VPC 的子网。默认情况下,Systems Manager 会新建一个 VPC,但您可以根据需要指定现有 VPC 中的某个子网。

      注意

      如果未看到指定子网 ID 的选项,请确认使用的是不是最新的默认值版本的运行手册。

    3. 对于 EC2RescueInstanceType,为 EC2Rescue 实例指定实例类型。默认的实例类型为 t2.small

    4. 对于 AssumeRole,如果是使用本主题前面介绍的 AWS CloudFormation 过程为此 Automation 创建的角色,则指定您在 AWS CloudFormation 控制台记下的 AssumeRole ARN。

  9. (可选)在标签区域,应用一个或多个标签键名称/值对以帮助识别自动化,例如Key=Purpose,Value=ResetAccess.

  10. 选择 Execute(执行)。

  11. 要监控自动化过程,请选择正在运行的自动化,然后选择步骤选项卡。完成自动化后,选择说明选项卡,然后选择查看输出以查看结果。要查看单个步骤的输出,请选择步骤选项卡,然后选择步骤旁的查看输出

运行手册创建一个备份AMI和已启用密码的AMI作为 Automation 的一部分。Automation 创建的所有其他资源都会自动删除,但这些资源AMIs保留在账户中。这些区域有:AMIs使用以下命名约定:

  • 备份 AMI:AWSSupport-EC2Rescue:InstanceId

  • 启用密码的 AMI:AWSSupport-EC2Rescue:启用密码的 AMIInstanceId

您可以在找到这些AMIs通过搜索 Automation 执行 ID。

对于 Linux,您的实例的新 SSH 私有密钥加密保存到 Parameter Store 中。参数名称为 /ec2rl/openssh/instance_id/key