设置 EC2 Instance Connect
要使用 EC2 Instance Connect 连接到实例,您需要配置支持使用 Instance Connect 连接的每个实例(对于每个实例而言这是一次性的要求),并且需要向将要使用 Instance Connect 的每个 IAM 主体授予权限。完成以下设置任务后,您可以使用 EC2 Instance Connect 连接到实例。
用于设置 EC2 Instance Connect 的任务
有关设置 EC2 Instance Connect 的更多信息,请参阅使用 Amazon EC2 实例连接保护堡垒主机
限制
-
您可以在以下受支持的 Linux 分发上安装 EC2 Instance Connect:
Amazon Linux 2(任何版本)
Ubuntu 16.04 或更高版本
-
如果为 SSH 身份验证配置了
AuthorizedKeysCommand和AuthorizedKeysCommandUser设置,则 EC2 Instance Connect 安装不会更新它们。因此,您无法使用 Instance Connect。
安装 EC2 Instance Connect 的先决条件
-
确认满足使用 SSH 连接到实例的一般先决条件。
有关更多信息,请参阅设置以连接到实例。
-
获取实例 ID。
您可以使用 Amazon EC2 控制台获取实例 ID(从 Instance ID (实例 ID) 列)。如果您愿意,可以使用 describe-instances (Amazon CLI) 或 Get-EC2Instance (Amazon Tools for Windows PowerShell) 命令。
-
在您的本地计算机上安装 SSH 客户端。
您的本地计算机很可能已默认安装 SSH 客户端。您可以通过在命令行键入 ssh 来检查 SSH 客户端。如果您的本地计算机无法识别该命令,您可安装 SSH 客户端。有关在 Linux 或 macOS X 上安装 SSH 客户端的信息,请参阅 http://www.openssh.com
。有关在 Windows 10 上安装 SSH 客户端的信息,请参阅 Windows 中的 OpenSSH 。 -
在本地计算机上安装 Amazon CLI。
要配置 IAM 权限,您必须使用 Amazon CLI。有关安装 Amazon CLI 的信息,请参阅《Amazon Command Line Interface 用户指南》中的安装 Amazon CLI。
-
[Ubuntu] 在实例上安装 Amazon CLI。
要在 Ubuntu 实例上安装 EC2 Instance Connect,您必须在实例上使用 Amazon CLI。有关安装 Amazon CLI 的信息,请参阅《Amazon Command Line Interface 用户指南》中的安装 Amazon CLI。
任务 1:配置对实例的网络访问
您必须配置以下网络访问权限,以便用户可以使用 EC2 Instance Connect 连接到您的实例:
-
如果您的用户将通过 Internet 访问您的实例,则您的实例必须具有公有 IP 地址,并位于公有子网中。有关更多信息,请参阅 Amazon VPC 用户指南中的启用 Internet 访问。
-
如果您的用户要通过实例的私有 IP 地址访问您的实例,则必须建立与您的 VPC 的私有网络连接,例如使用 Amazon Direct Connect、Amazon Site-to-Site VPN 或 VPC 对等连接,以便用户能够访问实例的私有 IP 地址。
-
确保与您实例关联的安全组允许来自您 IP 地址端口 22 或您网络上的传入 SSH 流量。默认情况下,VPC 的默认安全组不允许传入 SSH 流量。默认情况下,由启动向导创建的安全组允许传入的 SSH 流量。有关更多信息,请参阅为您的 Linux 实例授权入站流量。
-
(Amazon EC2 控制台)确保与您的实例关联的安全组允许来自此服务的 IP 地址范围的入站 SSH 流量。要识别地址范围,请下载由 Amazon 提供的 JSON 文件并筛选 EC2 Instance Connect 的子网,使用
EC2_INSTANCE_CONNECT作为服务值。有关下载 JSON 文件和按服务进行筛选的更多信息,请参阅《Amazon Web Services 一般参考》中的 Amazon IP 地址范围。
任务 2:(视情况而定)在实例上安装 EC2 Instance Connect
如果您使用以下 AMI 之一启动了您的实例,那么您可以跳过此任务,因为它们预安装了 EC2 Instance Connect:
-
Amazon Linux 2 2.0.20190618 或更高版本
-
Ubuntu 20.04 或更高版本
对于这些 AMI 的早期版本,您必须在每个支持使用 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 ConnectCLI 提供了通过单个命令连接到 EC2 实例的简化体验 mssh
。有关更多信息,请参阅使用 EC2 Instance Connect CLI 进行连接。instance_id
注意
如果用户仅使用 Amazon EC2 控制台或 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 policy 并将策略附加到需要权限的 IAM 委托人来向用户授予权限。有关更多信息,请参阅 Amazon EC2 Instance Connect 的操作、资源和条件键。
以下说明介绍如何使用 Amazon CLI 创建策略并将其附加到用户。同样的策略可以应用于其他 IAM 委托人,例如 IAM 角色。有关如何使用 Amazon Web Services Management Console 的说明,请参阅 IAM 用户指南中的创建 IAM policy(控制台)、将策略直接附加到用户以添加权限和创建 IAM 角色。
为 EC2 Instance Connect (Amazon CLI) 授予 IAM 委托人权限
-
创建一个 JSON 策略文档,其中包含以下内容:
-
ec2-instance-connect:SendSSHPublicKey操作。此操作为 IAM 委托人授予将公有密钥推送到实例的权限。使用ec2-instance-connect:SendSSHPublicKey,考虑限制对特定 EC2 实例的访问。否则,具有此权限的所有 IAM 用户都可以连接到所有 EC2 实例。您还可以通过指定资源 ARN 或使用资源标签作为 条件键来限制访问。 -
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:ec2:region:account-id:instance/i-1234567890abcdef0", "arn:aws:ec2:region:account-id:instance/i-0598c7d356eba48d7" ], "Condition": { "StringEquals": { "ec2:osuser": "ami-username" } } }, { "Effect": "Allow", "Action": "ec2:DescribeInstances", "Resource": "*" } ] }上述策略允许访问特定的实例(由其实例 ID 标识)。或者,您也可以使用资源标签控制对实例的访问。基于属性的访问控制是一种授权策略,它根据可附加到用户和 Amazon 资源的标签来定义权限。例如,只有在实例具有包含
tag-key键和tag-value值的资源标签时,以下策略才允许用户访问该实例。有关使用标签控制对Amazon资源的访问的更多信息,请参阅 IAM 用户指南中的控制对Amazon资源的访问。{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":"ec2-instance-connect:SendSSHPublicKey", "Resource": "arn:aws: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-namemy-policy--policy-document file://JSON-file-name -
使用 attach-user-policy 命令将托管式策略附加到指定用户。对于
--user-name参数,请指定用户的友好名称(而不是 ARN)。$aws iam attach-user-policy --policy-arn arn:aws:iam::account-id:policy/my-policy--user-nameIAM-friendly-name