Amazon Elastic Compute Cloud
用户指南(适用于 Linux 实例)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

设置 EC2 Instance Connect

Amazon Linux 2 2.0.20190618 或更高版本预配置了 EC2 Instance Connect。对于支持的其他 Linux 发行版,您必须为将支持使用 Instance Connect 的每个实例设置 Instance Connect。这是每个实例的一次性要求。

限制

  • 支持以下 Linux 发行版:

    • Amazon Linux 2(任何版本)

    • Ubuntu 16.04 或更高版本

  • 如果为 SSH 身份验证配置了 AuthorizedKeysCommandAuthorizedKeysCommandUser 设置,则 EC2 Instance Connect 安装不会更新它们。因此,您无法使用 Instance Connect。

先决条件

  • 确认满足使用 SSH 连接到实例的一般先决条件。

    有关更多信息,请参阅 连接到您的实例的常规先决条件

  • 在您的本地计算机上安装 SSH 客户端。

    您的本地计算机很可能已默认安装 SSH 客户端。您可以通过在命令行键入 ssh 来检查 SSH 客户端。如果您的本地计算机无法识别该命令,您可安装 SSH 客户端。有关在 Linux 或 macOS X 上安装 SSH 客户端的信息,请参阅 http://www.openssh.com。有关在 Windows 10 上安装 SSH 客户端的信息,请参阅 Windows 中的 OpenSSH

  • 在本地计算机上安装 AWS CLI。

    要配置 IAM 权限,您必须使用 AWS CLI。有关安装 AWS CLI 的更多信息,请参阅 AWS Command Line Interface 用户指南 中的安装 AWS CLI

  • [Ubuntu] 在实例上安装 AWS CLI。

    要在 Ubuntu 实例上安装 EC2 Instance Connect,您必须在实例上使用 AWS CLI。有关安装 AWS CLI 的更多信息,请参阅 AWS Command Line Interface 用户指南 中的安装 AWS CLI

步骤 1:配置对实例的网络访问

您必须配置对实例的以下网络访问权限,以便可以安装 EC2 Instance Connect 并允许用户连接到实例:

步骤 1:在实例上安装 EC2 Instance Connect

安装 EC2 Instance Connect 将在实例上配置 SSH 守护程序。对于使用 Amazon Linux 2 和 Ubuntu 启动的实例,安装 EC2 Instance Connect 的过程是不同的。

Amazon Linux 2Ubuntu
Amazon Linux 2

在使用 Amazon Linux 2 启动的实例上安装 EC2 Instance Connect

  1. 使用 SSH 连接到您的实例。

    可以使用在启动实例时为其分配的 SSH 密钥对以及用于启动实例的 AMI 的默认用户名。对于 Amazon Linux 2,默认用户名是 ec2-user

    例如,如果实例是使用 Amazon Linux 2 启动的,实例的公有 DNS 是 ec2-a-b-c-d.us-west-2.compute.amazonaws.com,并且密钥对是 my_ec2_private_key.pem,请使用以下命令通过 SSH 连接到实例:

    $ ssh -i my_ec2_private_key.pem ec2-user@ec2-a-b-c-d.us-west-2.compute.amazonaws.com

    有关连接到实例的更多信息,请参阅使用 SSH 连接到 Linux 实例

  2. 在实例上安装 EC2 Instance Connect 程序包。

    对于 Amazon Linux 2,请使用 yum install 命令。

    [ec2-user ~]$ sudo yum install ec2-instance-connect

    将会在 /opt/aws/bin/ 文件夹中看到四个新文件:

    eic_curl_authorized_keys eic_harvest_hostkeys eic_parse_authorized_keys eic_run_authorized_keys
  3. (可选)验证是否在实例上成功安装了 Instance Connect。

    可以使用 sudo less 命令检查是否正确更新了 /etc/ssh/sshd_config 文件,如下所示:

    [ec2-user ~]$ sudo less /etc/ssh/sshd_config

    如果 /etc/ssh/sshd_config 文件中的 AuthorizedKeysCommandAuthorizedKeysCommandUser 行包含以下值,则成功安装了 Instance Connect:

    AuthorizedKeysCommand /opt/aws/bin/eic_run_authorized_keys %u %f AuthorizedKeysCommandUser ec2-instance-connect
    • AuthorizedKeysCommand 设置 eic_run_authorized_keys 文件以从实例元数据中查找密钥

    • AuthorizedKeysCommandUser 将系统用户设置为 ec2-instance-connect

    注意

    如果以前配置了 AuthorizedKeysCommandAuthorizedKeysCommandUser,则 Instance Connect 安装不会更改这些值,并且您无法使用 Instance Connect。

Ubuntu

在使用 Ubuntu 16.04 或更高版本启动的实例上安装 EC2 Instance Connect

  1. 使用 SSH 连接到您的实例。

    可以使用在启动实例时为其分配的 SSH 密钥对以及用于启动实例的 AMI 的默认用户名。对于 Ubuntu AMI,用户名称是 ubuntu

    如果实例是使用 Ubuntu 启动的,实例的公有 DNS 是 ec2-a-b-c-d.us-west-2.compute.amazonaws.com,并且密钥对是 my_ec2_private_key.pem,请使用以下命令通过 SSH 连接到实例:

    $ ssh -i my_ec2_private_key.pem ubuntu@ec2-a-b-c-d.us-west-2.compute.amazonaws.com

    有关连接到实例的更多信息,请参阅使用 SSH 连接到 Linux 实例

  2. (可选)确保您的实例具有最新 Ubuntu AMI。

    对于 Ubuntu,使用 apt-get update 命令更新实例上的所有程序包。

    ubuntu:~$ sudo apt-get update
  3. 在实例上安装 Instance Connect 程序包。

    对于 Ubuntu,请使用 sudo apt-get 命令安装 .deb 程序包。

    ubuntu:~$ sudo apt-get install ec2-instance-connect

    将会在 /usr/share/ec2-instance-connect/ 文件夹中看到四个新文件:

    eic_curl_authorized_keys eic_harvest_hostkeys eic_parse_authorized_keys eic_run_authorized_keys
  4. (可选)验证是否在实例上成功安装了 Instance Connect。

    可以使用 sudo less 命令检查是否正确更新了 /lib/systemd/system/ssh.service.d/ec2-instance-connect.conf,如下所示:

    ubuntu:~$ sudo less /lib/systemd/system/ssh.service.d/ec2-instance-connect.conf

    如果 /lib/systemd/system/ssh.service.d/ec2-instance-connect.conf 文件中的 AuthorizedKeysCommandAuthorizedKeysCommandUser 行包含以下值,则成功安装了 Instance Connect:

    AuthorizedKeysCommand /usr/share/ec2-instance-connect/eic_run_authorized_keys %u %f AuthorizedKeysCommandUser ec2-instance-connect
    • AuthorizedKeysCommand 设置 eic_run_authorized_keys 文件以从实例元数据中查找密钥

    • AuthorizedKeysCommandUser 将系统用户设置为 ec2-instance-connect

    注意

    如果以前配置了 AuthorizedKeysCommandAuthorizedKeysCommandUser,则 Instance Connect 安装不会更改这些值,并且您无法使用 Instance Connect。

有关 EC2 Instance Connect 程序包的更多信息,请参阅 GitHub 网站上的 aws/aws-ec2-instance-connect-config

步骤 3:(可选)安装 EC2 Instance Connect CLI

EC2 Instance Connect CLI 提供与标准 SSH 调用类似的界面,包括查询 EC2 实例信息,生成和发布临时公有密钥以及通过单个命令 (mssh instance_id) 建立 SSH 连接。

注意

如果用户仅使用基于浏览器的客户端或 SSH 客户端连接到实例,则无需安装 EC2 Instance Connect CLI。

安装 EC2 Instance Connect CLI 程序包

使用 pip 安装 ec2instanceconnectcli 程序包。有关更多信息,请参阅 GitHub 网站上的 aws/aws-ec2-instance-connect-cli,以及 Python Package Index (PyPI) 网站上的 https://pypi.org/project/ec2instanceconnectcli/

$ pip install ec2instanceconnectcli

步骤 4:为 EC2 Instance Connect 配置 IAM 权限

如果 IAM 用户将使用 EC2 Instance Connect 连接到实例,您必须为其授予将公有密钥推送到实例的权限。有关更多信息,请参阅 IAM 用户指南 中的 Amazon EC2 Instance Connect 的操作、资源和条件键

以下说明介绍如何使用 AWS CLI 创建并附加策略。有关如何使用 AWS 管理控制台的说明,请参阅 IAM 用户指南 中的创建 IAM 策略(控制台)将策略直接附加到用户以添加权限

限制

对于 Instance Connect,我们目前不支持基于标签的授权。

为 IAM 用户授予 EC2 Instance Connect (AWS CLI) 权限

  1. 创建一个 JSON 策略文档,其中包含以下内容:

    • ec2-instance-connect:SendSSHPublicKey 操作。此操作为 IAM 用户授予将公有密钥推送到实例的权限。使用 ec2-instance-connect:SendSSHPublicKey,考虑限制对特定 EC2 实例的访问。否则,具有此权限的所有 IAM 用户都可以连接到所有 EC2 实例。

    • ec2:osuser 条件。这指定可以将公有密钥推送到实例的操作系统用户的名称。使用用于启动实例的 AMI 的默认用户名称。例如,对于 Ubuntu,Amazon Linux 2 的默认用户名为 ec2-userubuntu

    • ec2:DescribeInstances 操作。使用 EC2 Instance Connect CLI 时此操作是必需的,因为包装程序会调用此操作。IAM 用户可能已经拥有从另一个策略调用此操作的权限。

    下面是示例策略文档。如果您的用户将仅使用 SSH 客户端连接到您的实例,则可以省略 ec2:DescribeInstances 操作的语句。您可以替换 Resource 中的指定实例,以授予用户使用 EC2 Instance Connect 访问所有 EC2 实例的权限。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2-instance-connect:SendSSHPublicKey", "Resource": [ "arn:aws-cn:ec2:region:account-id:instance/i-1234567890abcdef0", "arn:aws-cn:ec2:region:account-id:instance/i-0598c7d356eba48d7" ], "Condition": { "StringEquals": { "ec2:osuser": "ami-username" } } }, { "Effect": "Allow", "Action": "ec2:DescribeInstances", "Resource": "*" } ] }
  2. 使用 create-policy 命令创建新的托管策略,并指定您创建的 JSON 文档以作为新策略的内容。

    $ aws iam create-policy --policy-name my-policy --policy-document file://JSON-file-name
  3. 使用 attach-user-policy 命令将托管策略附加到指定的 IAM 用户。对于 --user-name 参数,请指定 IAM 用户的友好名称(而不是 ARN)。

    $ aws iam attach-user-policy --policy-arn arn:aws:iam::account-id:policy/my-policy --user-name IAM-friendly-name