

• AWS Systems Manager CloudWatch 控制面板在 2026 年 4 月 30 日之后将不再可用。客户可以像现在一样继续使用 Amazon CloudWatch 控制台来查看、创建和管理其 Amazon CloudWatch 控制面板。有关更多信息，请参阅 [Amazon CloudWatch 控制面板文档](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)。

# 在 EC2 实例上重置密码和 SSH 密钥
<a name="automation-ec2reset"></a>

您可以使用 `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 结合使用](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2rw-ssm.html)。

**相关信息**  
《Amazon EC2 用户指南》**中的[使用 PuTTY 从 Windows 连接到 Linux 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html)。

## 工作原理
<a name="automation-ec2reset-how"></a>

使用自动化和 `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 连接到实例。

## 开始前的准备工作
<a name="automation-ec2reset-begin"></a>

运行以下自动化之前，请执行以下操作：
+ 复制要重置管理员密码的实例的实例 ID。您将在过程中指定此 ID。
+ (可选) 收集无法访问实例所在可用区中子网的 ID。EC2Rescue 实例将在此子网中创建。如果不指定子网，自动化会在您的 AWS 账户中创建新建一个临时 VPC。验证您的 AWS 账户是否至少有一个可用 VPC。默认情况下，一个区域中可以创建 5 个 VPC。如果您已在该区域中创建 5 个 VPC，自动化将会失败，但不会对您的实例进行更改。有关 Amazon VPC 配额的更多信息，请参阅 *Amazon VPC 用户指南*中的 [VPC 和子网](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html#vpc-limits-vpcs-subnets)。
+ 或者，您可以为自动化创建并指定一个 AWS Identity and Access Management (IAM) 角色。如果您不指定此角色，自动化将在运行自动化的用户的环境中运行。

### 向 AWSSupport-EC2Rescue 授予在您的实例上执行操作的权限
<a name="automation-ec2reset-access"></a>

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

#### 使用 IAM policy 授予权限
<a name="automation-ec2reset-access-iam"></a>

您可以将以下 IAM policy 作为内联策略附加到您的用户、组或角色；也可以创建新的 IAM 托管策略，并将其附加到您的用户、组或角色。有关将内联策略添加到您的用户、组或角色的更多信息，请参阅[使用内联策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_inline-using.html)。有关创建新的托管策略的更多信息，请参阅[使用托管策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html)。

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

**`AWSSupport-ResetAccess` 的 IAM policy**

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

------
#### [ JSON ]

****  

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

------

#### 使用 CloudFormation 模板授予权限
<a name="automation-ec2reset-access-cfn"></a>

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

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

1. 下载 [https://docs.aws.amazon.com/systems-manager/latest/userguide/samples/AWSSupport-EC2RescueRole.zip](https://docs.aws.amazon.com/systems-manager/latest/userguide/samples/AWSSupport-EC2RescueRole.zip) 文件并将 `AWSSupport-EC2RescueRole.json` 解压到本地计算机上的目录。

1. 如果您的 AWS 账户是一个特殊分区，请编辑模板以将 ARN 值更改为您的分区的值。

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

1. 登录到 AWS 管理控制台 并打开 CloudFormation 控制台 [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)。

1. 依次选择**创建堆栈**和**使用新资源（标准）**。

1. 在**创建堆栈**页面上，对于**先决条件 - 准备模板**，选择**模板已就绪**。

1. 对于**指定模板**，选择**上传模板文件**。

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

1. 选择**下一步**。

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

1. （可选）在**标签** 区域，将一个或多个标签键名称/值对应用到堆栈。

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

1. 选择 **Next**（下一步）

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

1. CloudFormation 将持续几分钟显示 **CREATE\$1IN\$1PROGRESS** 状态。创建堆栈后，状态将变为 **CREATE\$1COMPLETE**。您还可以选择刷新图标来检查创建过程的状态。

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

1. 复制**值**。这是 AssumeRole 的 ARN。在运行自动化时，您将指定此 ARN。

## 运行自动化
<a name="automation-ec2reset-executing"></a>

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

**重要**  
以下自动化执行将停止实例。停止实例可能导致附加的实例存储卷（如果存在）上的数据丢失。如果未关联弹性 IP，停止实例也可能导致公有 IP 更改。要避免这些配置更改，请使用 Run Command 重置访问权限。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[将 EC2Rescue for Windows Server 与 Systems Manager Run Command 结合使用](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2rw-ssm.html)。

**要运行 AWSSupport-ResetAccess Automation，请执行以下操作：**

1. 访问 [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)，打开 AWS Systems Manager 控制台。

1. 在导航窗格中，选择 **自动化**。

1. 选择**执行自动化**。

1. 在**自动化文档**部分中，从列表中选择 **Amazon 所拥有**。

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

1. 在**执行运行手册**页面上，选择**简单执行**。

1. 在**文档详细信息**部分中，验证**文档版本** 是否设置为最高默认版本。例如，**\$1DEFAULT** 或 **3 (默认值))**。

1. 在**输入参数**部分中，指定以下参数：

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

   1. 对于 **SubnetId**，指定您指定的实例所在可用区中某个现有 VPC 的子网。默认情况下，Systems Manager 会新建一个 VPC，但您可以根据需要指定现有 VPC 中的某个子网。
**注意**  
如果未看到指定子网 ID 的选项，请确认使用的是不是运行手册的最新**默认**版本。

   1. 对于 **EC2RescueInstanceType**，为 EC2Rescue 实例指定实例类型。默认的实例类型为 `t2.medium`。

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

1. （可选）在**标签**区域，应用一个或多个标签键名称/值对以帮助识别自动化，例如 `Key=Purpose,Value=ResetAccess`。

1. 选择**执行**。

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

运行手册创建一个备份 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**。