AWS Systems Manager
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

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

您可以使用 Automation 配合 AWSSupport-ResetAccess 文档解决以下问题:

Windows

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

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

Linux

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

注意

如果 EC2 Windows 实例为 Systems Manager 进行了配置,也可以使用 EC2Rescue 和 Run Command 重置本地管理员密码。有关更多信息,请参阅 Amazon EC2 User Guide for Windows Instances 中的通过 Systems Manager Run Command 将 EC2Rescue 用于 Windows Server

工作原理

使用自动化和 AWSSupport-ResetAccess 文档对实例进行故障排除的工作原理如下:

  • 您为实例指定 ID 并运行 Automation 工作流程。

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

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

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

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

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

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

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

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

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

开始前的准备工作

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

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

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

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

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

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

使用 IAM 策略授予权限

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

注意

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

适用于 AWSSupport-ResetAccess 的 IAM 策略

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "lambda:InvokeFunction", "lambda:DeleteFunction", "lambda:GetFunction" ], "Resource": "arn:aws:lambda:*:An-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::An-AWS-Account-ID:role/AWSSupport-EC2Rescue-*", "arn:aws:iam::An-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 角色和策略的过程。使用 AWS CloudFormation,通过以下过程为 EC2Rescue Automation 创建所需的 IAM 角色和策略。

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

  1. 选择 Launch Stack (启动堆栈) 按钮。该按钮会打开 AWS CloudFormation 控制台并用 EC2Rescue 模板的 URL 填充指定 Amazon S3 模板 URL 字段。

    注意

    选择 View (查看) 可以查看模板。

    查看 启动

    查看

  2. 选择 Next

  3. Specify Details 页面上的 Stack Name 字段中,选择保留默认值或指定您自己的值。选择 Next

  4. Options 页面上,您无需进行任何选择。选择 Next

  5. 审核页面上,向下滚动并选择我确认,AWS CloudFormation 可能创建 IAM 资源选项。

  6. 选择 Create

    大约三分钟左右,AWS CloudFormation 会显示 CREATE_IN_PROGRESS 状态。创建堆栈后,状态将变为 CREATE_COMPLETE

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

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

注意

此过程在US East (Ohio) Region (us-west-2) 中创建一个 AWS CloudFormation 堆栈,但此过程创建的 IAM 角色为全局资源,可在所有区域中使用。

运行 Automation

以下过程介绍了如何使用 AWS Systems Manager 控制台运行 AWSSupport-ResetAccess 文档。

重要

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

运行 AWSSupport-ResetAccess 自动化

  1. 通过以下网址打开 AWS Systems Manager 控制台:https://console.amazonaws.cn/systems-manager/

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

    -或者-

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

  3. 选择执行自动化

  4. Document name 部分中,选择列表中的 Owned by Me or Amazon

  5. 在文档列表中,选择 AWSSupport-ResetAccess。文档所有者是 Amazon。

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

  7. 执行模式部分中,选择简单执行

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

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

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

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

      注意

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

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

  9. 选择 Execute (执行)

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

在工作流程中,Automation 将创建备份 AMI 和启用了密码的 AMI。Automation 工作流程创建的所有其他资源都会自动删除,但这些 AMI 将保留在您的账户中。这些 AMI 遵从以下命名约定:

  • 备份 AMI:AWSSupport-EC2Rescue:InstanceId

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

可以通过搜索 Automation 执行 ID 查找这些 AMI。

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