在 EC2 实例上重置密码和 SSH 密钥 - Amazon Systems Manager
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

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

您可以使用 AWSSupport-ResetAccess 运行手册在适用于 Windows Server 的 Amazon Elastic Compute Cloud Amazon EC2 实例上自动重新启用本地管理员密码生成,以及在适用于 Linux 的 EC2 实例上生成新的 SSH 密钥。AWSSupport-ResetAccess 运行手册旨在执行 Amazon Systems Manager 操作、Amazon CloudFormation 操作和 Amazon Lambda 函数的组合,从而将重置本地管理员密码通常所需的步骤自动化。

您可以使用 Amazon Systems Manager 的自动化功能,使用 AWSSupport-ResetAccess 运行手册来解决以下问题:

Windows

您丢失了 EC2 密钥对:要解决此问题,您可以使用 AWSSupport-ResetAccess 运行手册,从当前实例创建启用了密码的 AMI,从 AMI 启动新实例,然后选择您拥有的密钥对。

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

Linux

您丢失了 EC2 密钥对,或者配置了对实例的 SSH 访问但丢失:要解决此问题,您可以使用 AWSSupport-ResetAccess 运行手册创建当前实例的新 SSH 密钥,这使您能够重新连接到该实例。

注意

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

相关信息

参阅Amazon EC2 用户指南(适用于 Linux 实例)中的使用 PuTTY 从 Windows 连接到 Linux 实例

工作原理

使用自动化和 AWSSupport-ResetAccess 运行手册进行故障排除的工作原理如下:

  • 您指定实例的 ID 并运行运行手册。

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

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

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

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

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

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

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

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

    Linux:您可以使用存储在 Systems Manager Parameter Store 中的 SSH 密钥(格式为 /ec2rl/openssh/instance ID/key)通过 SSH 连接到实例。

开始前的准备工作

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

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

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

  • 或者,您可以为自动化创建并指定一个 Amazon Identity and Access Management (IAM) 角色。如果您不指定此角色,自动化将在运行自动化的用户的环境中运行。

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

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

使用 IAM policy 授予权限

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

注意

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

AWSSupport-ResetAccess 的 IAM policy

account ID 替换为您自己的信息。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "lambda:InvokeFunction", "lambda:DeleteFunction", "lambda:GetFunction" ], "Resource": "arn:aws:lambda:*: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::account ID:role/AWSSupport-EC2Rescue-*", "arn:aws:iam::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" } ] }

使用 Amazon CloudFormation 模板授予权限

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

为 EC2Rescue 创建所需的 IAM 角色和策略
  1. 下载 AWSSupport-EC2RescueRole.zip 文件并将 AWSSupport-EC2RescueRole.json 解压到本地计算机上的目录。

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

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

  3. 登录到 Amazon Web Services Management Console 并打开 Amazon CloudFormation 控制台 https://console.aws.amazon.com/cloudformation

  4. 依次选择创建堆栈使用新资源(标准)

  5. 创建堆栈页面上,对于先决条件 - 准备模板,选择模板已就绪

  6. 对于指定模板,选择上传模板文件

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

  8. 选择下一步

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

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

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

  11. 选择 Next(下一步)

  12. 审核页面上,审核堆栈详细信息,向下滚动并选择我确认 Amazon CloudFormation 可能创建 IAM 资源选项。

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

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

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

运行自动化

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

重要

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

要运行 AWSSupport-ResetAccess Automation,请执行以下操作:
  1. 访问 https://console.aws.amazon.com/systems-manager/,打开 Amazon Systems Manager 控制台。

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

    - 或者 -

    如果首先打开 Amazon Systems Manager 主页,选择菜单图标 ( 
    The menu icon
  ) 以打开导航窗格,然后选择自动化

  3. 选择执行自动化

  4. 自动化文档部分中,从列表中选择 Amazon 所拥有

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

  6. 执行运行手册页面上,选择简单执行

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

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

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

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

      注意

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

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

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

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

  10. 选择执行

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

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

  • 备份 AMI:AWSSupport-EC2Rescue:InstanceID

  • 启用了密码的 AMI:AWSSupport-EC2Rescue: Password-enabled AMI from Instance ID

可以通过搜索自动化执行 ID 查找这些 AMIs。

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