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 以进行连接。这是每个实例的一次性要求。

限制

如果 SSH 设置使用或要求使用 AuthorizedKeysCommandAuthorizedKeysCommandUser,则无法安装 EC2 Instance Connect。

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

Instance Connect 支持以下 Linux 发行版:

  • Amazon Linux 2(任何版本)

  • Ubuntu 16.04 或更高版本

先决条件

  • 确认满足使用 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 程序包

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

如果 IAM 用户将使用 EC2 Instance Connect 连接到实例,您必须为其授予所需的权限以将公有密钥推送到实例。以下说明介绍如何使用 AWS CLI 创建策略并将其附加到用户。有关如何使用 AWS 管理控制台执行该操作的信息,请参阅 IAM 用户指南 中的创建 IAM 策略(控制台)将策略直接附加到用户以添加权限

注意

对于 Instance Connect,我们目前不支持基于标签的授权。ec2 命名空间中的标签和上下文键不会自动应用于 ec2-instance-connect

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

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

    • 如果您的用户仅使用控制台或 SSH 客户端连接到实例,请在策略中使用以下内容:

      { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "ec2-instance-connect:SendSSHPublicKey", "Resource": "arn:aws:ec2:region:account-id:instance/i-instance-id", "Condition": { "StringEquals": { "ec2:osuser": "ami-username" } } }] }
    • 如果您的用户使用 EC2 Instance Connect CLI 连接到实例,请在策略中使用以下内容,其中包括 ec2:DescribeInstances 操作:

      { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "ec2-instance-connect:SendSSHPublicKey", "Resource": "arn:aws:ec2:region:account-id:instance/i-instance-id", "Condition": { "StringEquals": { "ec2:osuser": "ami-username" } } }, { "Effect": "Allow", "Action": "ec2:DescribeInstances", "Resource": "*" } ] }
    • ec2-instance-connect:SendSSHPublicKey 操作为 IAM 用户授予将公有密钥推送到实例的权限。

    • ec2:osuser 条件指定用于启动实例的 AMI 的默认用户名。对于 Amazon Linux 2,默认用户名是 ec2-user。对于 Ubuntu AMI,默认用户名是 ubuntu

    • (仅通过 EC2 Instance Connect CLI 进行连接)ec2:DescribeInstances 操作是必需的,因为包装程序在第一步进行 describe 调用。

    有关更多信息,请参阅 IAM 用户指南 中的 Amazon EC2 的操作、资源和条件键

  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