设置 EC2 Instance Connect
要使用 EC2 Instance Connect 连接到实例,您需要配置支持使用 Instance Connect 的每个实例(这是对每个实例的一次性要求),并且需要向将要使用 Instance Connect 的每个 IAM 用户授予权限。
用于设置 Instance Connect 的任务
有关设置 EC2 Instance Connect 的更多信息,请参阅使用 Amazon EC2 实例连接保护堡垒主机
限制
-
支持以下 Linux 发行版:
-
Amazon Linux 2(任何版本)
-
Ubuntu 16.04 或更高版本
-
-
如果为 SSH 身份验证配置了
AuthorizedKeysCommand
和AuthorizedKeysCommandUser
设置,则 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 并允许用户连接到实例:
-
确保与您实例关联的安全组允许来自您 IP 地址端口 22 上的传入 SSH 流量。默认情况下,VPC 的默认安全组不允许传入 SSH 流量。默认情况下,由启动向导创建的安全组允许传入的 SSH 流量。有关更多信息,请参阅为您的 Linux 实例授权入站流量。
-
(基于浏览器的客户端)我们建议实例允许来自以下位置的入站 SSH 流量:为该服务发布的建议 IP 块
。在 service
参数中使用EC2_INSTANCE_CONNECT
筛选条件以获取 EC2 Instance Connect 子集中的 IP 地址范围。有关更多信息,请参阅 Amazon Web Services 一般参考 中的 AWS IP 地址范围。
任务 2:(视情况而定)在实例上安装 EC2 Instance Connect
Amazon Linux 2 2.0.20190618 或更高版本和 Ubuntu 20.04 或更高版本预配置了 EC2 Instance Connect。如果您使用其中一个 AMI 启动了实例,则可以跳过此任务。对于其他受支持的 Linux 发行版,您必须在每个支持使用 Instance Connect 进行连接的实例上安装 Instance Connect。
安装 Instance Connect 将在实例上配置 SSH 守护程序。对于使用 Amazon Linux 2 和 Ubuntu 启动的实例,安装 Instance Connect 的过程是不同的。
有关 EC2 Instance Connect 程序包的更多信息,请参阅 GitHub 网站上的 aws/aws-ec2-instance-connect-config
任务 3:(可选)安装 EC2 Instance Connect CLI
EC2 Instance Connect CLI 提供与标准 SSH 调用类似的界面,包括查询 EC2 实例信息,生成和发布临时公有密钥以及通过单个命令 (mssh
) 建立 SSH 连接。
instance_id
如果用户仅使用基于浏览器的客户端或 SSH 客户端连接到实例,则无需安装 EC2 Instance Connect CLI。
安装 EC2 Instance Connect CLI 程序包
使用 pip
安装 ec2instanceconnectcli
程序包。有关更多信息,请参阅 GitHub 网站上的 aws/aws-ec2-instance-connect-cli
$
pip install ec2instanceconnectcli
任务 4:为 EC2 Instance Connect 配置 IAM 权限
如果 IAM 用户将使用 EC2 Instance Connect 连接到实例,您必须为其授予将公有密钥推送到实例的权限。您可以通过创建 IAM 策略并将策略附加到需要权限的 IAM 用户来向用户授予权限。有关更多信息,请参阅 IAM 用户指南 中的 Amazon EC2 Instance Connect 的操作、资源和条件键。
以下说明介绍如何使用 AWS CLI 创建并附加策略。有关如何使用 AWS 管理控制台的说明,请参阅 IAM 用户指南 中的创建 IAM 策略(控制台)和将策略直接附加到用户以添加权限。
为 IAM 用户授予 EC2 Instance Connect (AWS CLI) 权限
-
创建一个 JSON 策略文档,其中包含以下内容:
-
ec2-instance-connect:SendSSHPublicKey
操作。此操作为 IAM 用户授予将公有密钥推送到实例的权限。使用ec2-instance-connect:SendSSHPublicKey
,考虑限制对特定 EC2 实例的访问。否则,具有此权限的所有 IAM 用户都可以连接到所有 EC2 实例。 -
ec2:osuser
条件。这指定可以将公有密钥推送到实例的操作系统用户的名称。使用用于启动实例的 AMI 的默认用户名称。对于 Amazon Linux 2,默认用户名称为ec2-user
,对于 Ubuntu,为ubuntu
。 -
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": "*" } ] }上述策略允许访问特定的实例(由其实例 ID 标识)。或者,您也可以使用资源标签控制对实例的访问。基于属性的访问控制是一种授权策略,它根据可附加到用户和 AWS 资源的标签来定义权限。例如,只有在实例具有包含
tag-key
键和tag-value
值的资源标签时,以下策略才允许 IAM 用户访问该实例。有关使用标签控制对 AWS 资源的访问的更多信息,请参阅 IAM 用户指南 中的控制对 AWS 资源的访问。{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":"ec2-instance-connect:SendSSHPublicKey", "Resource": "arn:aws-cn:ec2:
region
:account-id
:instance/*
", "Condition":{ "StringEquals":{ "aws:ResourceTag/tag-key
":"tag-value
" } } }, { "Effect": "Allow", "Action": "ec2:DescribeInstances", "Resource": "*" } ] } -
-
使用 create-policy 命令创建新的托管策略,并指定您创建的 JSON 文档以作为新策略的内容。
$
aws iam create-policy --policy-name
my-policy
--policy-document file://JSON-file-name
-
使用 attach-user-policy 命令将托管策略附加到指定的 IAM 用户。对于
--user-name
参数,请指定 IAM 用户的友好名称(而不是 ARN)。$
aws iam attach-user-policy --policy-arn arn:aws:iam::
account-id
:policy/my-policy
--user-nameIAM-friendly-name