配置对 EC2 Serial Console 的访问 - Amazon Elastic Compute Cloud

配置对 EC2 Serial Console 的访问

要配置对串行控制台的访问权限,您必须在账户级别授予串行控制台访问权限,然后配置 IAM policy 以向用户授予访问权限。对于 Linux 实例,您还必须在每个实例上配置基于密码的用户,以使您的用户能够使用串行控制台进行问题排查。

在开始之前,请务必查看先决条件

EC2 Serial Console 的访问级别

默认情况下,在账户级别无法访问串行控制台。您需要在账户级别明确授予对串行控制台的访问权限。有关更多信息,请参阅管理账户对 EC2 Serial Console 的访问权限

您可以使用服务控制策略 (SCP) 来允许在组织内访问串行控制台。然后,您可以使用 IAM policy 控制访问,从而在用户级别实现精确的访问控制。通过使用 SCP 和 IAM policy 的组合,您可以对串行控制台进行不同级别的访问控制。

组织级别

您可以使用服务控制策略 (SCP) 来允许组织内的成员账户访问串行控制台。有关 SCP 的更多信息,请参阅 AWS Organizations 用户指南中的服务控制策略

实例级别

您可以通过使用 IAM PrincipalTag 和 ResourceTag 构造以及通过其 ID 指定实例,来配置串行控制台访问策略。有关更多信息,请参阅 为 EC2 Serial Console 访问配置 IAM policy

用户级别

您可以通过配置 IAM policy 以允许或拒绝指定用户将 SSH 公钥推送到特定实例的串行控制台服务的权限,来配置用户级别的访问权限。有关更多信息,请参阅 为 EC2 Serial Console 访问配置 IAM policy

操作系统级别(仅限 Linux 实例)

您可以在访客操作系统级别设置用户密码。这为某些使用案例提供了对串行控制台的访问权限。但是,要监控日志,您不需要基于密码的用户。有关更多信息,请参阅在 Linux 实例上设置操作系统用户密码

管理账户对 EC2 Serial Console 的访问权限

默认情况下,在账户级别无法访问串行控制台。您需要在账户级别明确授予对串行控制台的访问权限。

授予用户账户访问管理权限

要允许用户管理对 EC2 Serial Console 的账户访问权限,您需要授予其所需的 IAM 权限。

以下策略授予查看账户状态以及允许和阻止账户访问 EC2 Serial Console 的权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:GetSerialConsoleAccessStatus", "ec2:EnableSerialConsoleAccess", "ec2:DisableSerialConsoleAccess" ], "Resource": "*" } ] }

有关更多信息,请参阅 IAM 用户指南 中的创建 IAM 策略

查看账户对串行控制台的访问权限状态

查看账户对串行控制台的访问权限状态(控制台)
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在左侧导航窗格上,选择 EC2 Dashboard (EC2 控制面板)

  3. Account attributes(账户属性)中,选择 EC2 Serial Console

    EC2 Serial Console access(EC2 Serial Console 访问)字段指示账户访问权限为 Allowed(允许)还是 Prevented(阻止)。

    以下屏幕截图显示,阻止了该账户使用 EC2 Serial Console。

    对 EC2 Serial Console 的访问被阻止。

查看账户对串行控制台的访问权限状态 (AWS CLI)

使用 get-serial-console-access-status 命令查看串行控制台的账户访问状态。

aws ec2 get-serial-console-access-status --region us-east-1

在以下输出中,true 表示允许该账户访问串行控制台。

{ "SerialConsoleAccessEnabled": true }

授予账户访问串行控制台的权限。

授予账户访问串行控制台的权限(控制台)
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在左侧导航窗格上,选择 EC2 Dashboard (EC2 控制面板)

  3. Account attributes(账户属性)中,选择 EC2 Serial Console

  4. 选择管理

  5. 要允许访问账户中所有实例的 EC2 Serial Console,请选中 Allow(允许)复选框。

  6. 选择更新

授予账户访问串行控制台的权限 (AWS CLI)

使用 enable-serial-console-access 命令允许账户访问串行控制台。

aws ec2 enable-serial-console-access --region us-east-1

在以下输出中,true 表示允许该账户访问串行控制台。

{ "SerialConsoleAccessEnabled": true }

拒绝账户访问串行控制台

拒绝账户访问串行控制台(控制台)
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在左侧导航窗格上,选择 EC2 Dashboard (EC2 控制面板)

  3. Account attributes(账户属性)中,选择 EC2 Serial Console

  4. 选择管理

  5. 要阻止访问账户中所有实例的 EC2 Serial Console,请清除 Allow(允许)复选框。

  6. 选择更新

拒绝账户访问串行控制台 (AWS CLI)

使用 disable-serial-console-access 命令阻止账户访问串行控制台。

aws ec2 disable-serial-console-access --region us-east-1

在以下输出中,false 表示拒绝该账户访问串行控制台。

{ "SerialConsoleAccessEnabled": false }

为 EC2 Serial Console 访问配置 IAM policy

默认情况下,用户无权访问串行控制台。您的组织必须配置 IAM policy 以授予用户所需的访问权限。有关更多信息,请参阅 IAM 用户指南 中的创建 IAM 策略

对于串行控制台访问,请创建包含 ec2-instance-connect:SendSerialConsoleSSHPublicKey 操作的 JSON 策略文档。此操作会授予用户将公钥推送到串行控制台服务的权限,该服务将启动串行控制台会话。我们建议限制对特定 EC2 实例的访问。否则,具有此权限的所有用户都可以连接到所有 EC2 实例的串行控制台。

明确允许访问串行控制台

默认情况下,没有人可以访问串行控制台。要授予对串行控制台的访问权限,您需要将策略配置为明确允许访问。我们建议配置一个策略以限制对特定实例的访问。

以下策略允许访问由实例 ID 标识的特定实例的串行控制台。

请注意,DescribeInstancesDescribeInstanceTypesGetSerialConsoleAccessStatus 操作不支持资源级权限,因此必须为这些操作指定以 *(星号)表示的所有资源。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowDescribeInstances", "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "ec2:DescribeInstanceTypes", "ec2:GetSerialConsoleAccessStatus" ], "Resource": "*" }, { "Sid": "AllowinstanceBasedSerialConsoleAccess", "Effect": "Allow", "Action": [ "ec2-instance-connect:SendSerialConsoleSSHPublicKey" ], "Resource": "arn:aws:ec2:region:account-id:instance/i-0598c7d356eba48d7" } ] }

明确拒绝访问串行控制台

以下 IAM policy 允许访问标有 *(星号)的所有实例的串行控制台,并明确拒绝访问由 ID 标识的特定实例的串行控制台。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowSerialConsoleAccess", "Effect": "Allow", "Action": [ "ec2-instance-connect:SendSerialConsoleSSHPublicKey", "ec2:DescribeInstances", "ec2:DescribeInstanceTypes", "ec2:GetSerialConsoleAccessStatus" ], "Resource": "*" }, { "Sid": "DenySerialConsoleAccess", "Effect": "Deny", "Action": [ "ec2-instance-connect:SendSerialConsoleSSHPublicKey" ], "Resource": "arn:aws:ec2:region:account-id:instance/i-0598c7d356eba48d7" } ] }

使用资源标签控制对串行控制台的访问

您可以使用资源标签来控制对实例的串行控制台的访问。

基于属性的访问控制是一种授权策略,它根据可附加到用户和 AWS 资源的标签来定义权限。例如,只有当实例的资源标签和委托人标签具有相同的标签键 SerialConsole 值时,以下策略才会允许用户启动该实例的串行控制台连接。

有关使用标签控制对AWS资源的访问的更多信息,请参阅 IAM 用户指南中的控制对AWS资源的访问

请注意,DescribeInstancesDescribeInstanceTypesGetSerialConsoleAccessStatus 操作不支持资源级权限,因此必须为这些操作指定以 *(星号)表示的所有资源。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowDescribeInstances", "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "ec2:DescribeInstanceTypes", "ec2:GetSerialConsoleAccessStatus" ], "Resource": "*" }, { "Sid": "AllowTagBasedSerialConsoleAccess", "Effect": "Allow", "Action": [ "ec2-instance-connect:SendSerialConsoleSSHPublicKey" ], "Resource": "arn:aws:ec2:region:account-id:instance/*", "Condition": { "StringEquals": { "aws:ResourceTag/SerialConsole": "${aws:PrincipalTag/SerialConsole}" } } } ] }

在 Linux 实例上设置操作系统用户密码

注意

此部分仅适用于 Linux 实例。

您可以在没有密码的情况下连接到串行控制台。但是,要使用串行控制台对 Linux 实例进行故障排查,实例必须拥有基于密码的操作系统用户。

您可以为任何 OS 用户(包括根用户)设置密码。请注意,根用户可以修改所有文件,而每个 OS 用户可能只有有限权限。

您必须为要使用串行控制台的每个实例设置用户密码。这是每个实例的一次性要求。

注意

以下说明仅在使用 AWS 提供的 Linux AMI 启动实例时才适用,因为默认情况下,AWS 提供的 AMI 不通过基于密码的用户配置。如果您使用已配置了根用户密码的 AMI 启动实例,则可以跳过这些说明。

在 Linux 实例上设置操作系统用户密码
  1. 连接到您的 实例。除 EC2 Serial Console 连接方法外,您还可以使用任何方法连接到自己的实例。

  2. 要为用户设置密码,请使用 passwd 命令。在以下示例中,用户是 root

    [ec2-user ~]$ sudo passwd root

    下面是示例输出。

    Changing password for user root. New password:
  3. 出现提 New password 示时,输入新密码。

  4. 出现提示时,重新输入密码。