在 EC2 实例上重置密码和 SSH 密钥
您可以使用 AWSSupport-ResetAccess
运行手册在适用于 Windows Server 的 Amazon Elastic Compute Cloud(Amazon EC2)实例上自动重新启用本地管理员密码生成,以及在适用于 Linux 的 EC2 实例上生成新的 SSH 密钥。AWSSupport-ResetAccess
运行手册旨在执行 AWS Systems Manager 操作、AWS CloudFormation 操作和 AWS Lambda 函数的组合,从而将重置本地管理员密码通常所需的步骤自动化。
您可以使用 Automation(AWS 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 和 AWS Systems Manager Run Command 重置您的本地管理员密码。有关更多信息,请参阅《Amazon EC2 用户指南》中的将 EC2Rescue for Windows Server 与 Systems Manager Run Command 结合使用。
- 相关信息
-
《Amazon EC2 用户指南》中的使用 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 实例将在此子网中创建。如果不指定子网,自动化会在您的 AWS 账户中创建新建一个临时 VPC。验证您的 AWS 账户是否至少有一个可用 VPC。默认情况下,一个区域中可以创建 5 个 VPC。如果您已在该区域中创建 5 个 VPC,自动化将会失败,但不会对您的实例进行更改。有关 Amazon VPC 配额的更多信息,请参阅 Amazon VPC 用户指南中的 VPC 和子网。
-
或者,您可以为自动化创建并指定一个 AWS Identity and Access Management (IAM) 角色。如果您不指定此角色,自动化将在运行自动化的用户的环境中运行。
向 AWSSupport-EC2Rescue 授予在您的实例上执行操作的权限
在自动化期间,EC2Rescue 需要权限才能在您的实例上执行一系列操作。这些操作调用 AWS Lambda、IAM 和 Amazon EC2 服务,安全地尝试修复实例的问题。如果您在 AWS 账户 和/或 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" } ] }
使用 AWS CloudFormation 模板授予权限
AWS CloudFormation 使用预配置模板自动化创建 IAM 角色和策略的过程。使用 AWS CloudFormation,通过以下过程为 EC2Rescue 自动化创建所需的 IAM 角色和策略。
为 EC2Rescue 创建所需的 IAM 角色和策略
-
下载
AWSSupport-EC2RescueRole.zip
文件并将AWSSupport-EC2RescueRole.json
解压到本地计算机上的目录。 -
如果您的 AWS 账户是一个特殊分区,请编辑模板以将 ARN 值更改为您的分区的值。
例如,对于中国地区,将出现的所有
arn:aws
更改为arn:aws-cn
。 登录到 AWS Management Console 并打开 AWS CloudFormation 控制台 https://console.aws.amazon.com/cloudformation
。 -
依次选择创建堆栈和使用新资源(标准)。
-
在创建堆栈页面上,对于先决条件 - 准备模板,选择模板已就绪。
-
对于指定模板,选择上传模板文件。
-
选择选择文件,然后进行浏览并从您解压缩
AWSSupport-EC2RescueRole.json
文件的目录中选择此文件。 -
选择下一步。
-
在指定堆栈详细信息页上,对于堆栈名称字段,输入用于标识此堆栈的名称,然后选择下一步。
-
(可选)在标签 区域,将一个或多个标签键名称/值对应用到堆栈。
标签是您分配给资源的可选元数据。标签可让您按各种标准(如用途、所有者或环境)对资源进行分类。例如,您可能需要对堆栈进行标记,以确定其运行的任务类型、涉及的目标或其他资源的类型以及其运行的环境。
-
选择 Next(下一步)
-
在审核页面上,审核堆栈详细信息,向下滚动并选择我确认 AWS CloudFormation 可能创建 IAM 资源选项。
-
AWS CloudFormation 将持续几分钟显示 CREATE_IN_PROGRESS 状态。创建堆栈后,状态将变为 CREATE_COMPLETE。您还可以选择刷新图标来检查创建过程的状态。
-
在堆栈列表中,选择您刚刚创建的堆栈旁边的选项,然后选择输出选项卡。
-
复制值。这是 AssumeRole 的 ARN。在运行自动化时,您将指定此 ARN。
运行自动化
以下过程介绍如何使用 AWS Systems Manager 控制台运行 AWSSupport-ResetAccess
运行手册。
重要
以下自动化执行将停止实例。停止实例可能导致附加的实例存储卷(如果存在)上的数据丢失。如果未关联弹性 IP,停止实例也可能导致公有 IP 更改。要避免这些配置更改,请使用 Run Command 重置访问权限。有关更多信息,请参阅《Amazon EC2 用户指南》中的将 EC2Rescue for Windows Server 与 Systems Manager Run Command 结合使用。
要运行 AWSSupport-ResetAccess Automation,请执行以下操作:
访问 https://console.aws.amazon.com/systems-manager/
,打开 AWS Systems Manager 控制台。 在导航窗格中,选择 自动化。
-
选择执行自动化。
-
在自动化文档部分中,从列表中选择 Amazon 所拥有。
-
在运行手册列表中,选择 AWSSupport-ResetAccess 卡片中的按钮,然后选择下一步。
-
在执行运行手册页面上,选择简单执行。
-
在文档详细信息部分中,验证文档版本 是否设置为最高默认版本。例如,$DEFAULT 或 3 (默认值))。
-
在输入参数部分中,指定以下参数:
-
对于 InstanceID,指定无法访问实例的 ID。
-
对于 SubnetId,指定您指定的实例所在可用区中某个现有 VPC 的子网。默认情况下,Systems Manager 会新建一个 VPC,但您可以根据需要指定现有 VPC 中的某个子网。
注意
如果未看到指定子网 ID 的选项,请确认使用的是不是运行手册的最新默认版本。
-
对于 EC2RescueInstanceType,为 EC2Rescue 实例指定实例类型。默认的实例类型为
t2.medium
。 -
对于 AssumeRole,如果是使用本主题前面介绍的 AWS CloudFormation 过程为此自动化创建的角色,则指定您在 AWS CloudFormation 控制台记下的 AssumeRole ARN。
-
-
(可选)在标签区域,应用一个或多个标签键名称/值对以帮助识别自动化,例如
Key=Purpose,Value=ResetAccess
。 -
选择执行。
-
要监控自动化过程,请选择正在运行的自动化,然后选择步骤选项卡。完成自动化后,选择描述选项卡,然后选择查看输出以查看结果。要查看单个步骤的输出,请选择步骤选项卡,然后选择步骤旁的查看输出。
运行手册创建一个备份 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。