为 EC2 Instance Connect 授予 IAM 权限 - Amazon Elastic Compute Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

为 EC2 Instance Connect 授予 IAM 权限

要使用 EC2 Instance Connect 连接到实例,您必须创建 IAM policy,从而向您的用户授予以下操作和条件的权限:

  • ec2-instance-connect:SendSSHPublicKey 操作 - 授予将公有密钥推送到实例的权限。

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

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

考虑限制对特定 EC2 实例的访问。否则,具有适用于 ec2-instance-connect:SendSSHPublicKey 操作的权限的所有 IAM 主体可以连接到所有 EC2 实例。您可以通过指定资源 ARN 或使用资源标签作为条件键来限制访问。

有关更多信息,请参阅 Amazon EC2 Instance Connect 的操作、资源和条件键

有关如何创建 IAM policy 的信息,请参阅 IAM 用户指南中的创建 IAM policy

允许用户连接到特定实例

以下 IAM policy 授予连接到特定实例的权限,这些实例由其资源 ARN 标识。

在以下示例 IAM policy 中,指定了以下操作和条件:

  • ec2-instance-connect:SendSSHPublicKey 操作向用户授予连接到两个实例的权限,这两个实例由资源 ARN 指定。要向用户授予连接到所有 EC2 实例的权限,请将资源 ARN 替换为 * 通配符。

  • 只有在连接时指定 ami-username 时,ec2:osuser 条件才会授予连接到实例的权限。

  • 指定 ec2:DescribeInstances 操作向使用控制台连接到您的实例的用户授予权限。如果您的用户仅使用 SSH 客户端连接到您的实例,可以省略 ec2:DescribeInstances。注意,ec2:Describe* API 操作不支持资源级权限。因此,Resource 元素中需要 * 通配符。

{ "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": "*" } ] }

允许用户连接到具有特定标签的实例

基于属性的访问权限控制(ABAC)是一种授权策略,该策略根据可附加到用户和 Amazon 资源的标签来定义权限。您可以使用资源标签来控制对实例的访问。有关使用标签控制对Amazon资源的访问的更多信息,请参阅 IAM 用户指南中的控制对Amazon资源的访问

在以下示例 IAM policy 中,ec2-instance-connect:SendSSHPublicKey 操作向用户授予连接到任何实例的权限(由资源 ARN 中的 * 通配符指示),条件是该实例的资源标签带有 key=tag-key 和 value=tag-value

指定 ec2:DescribeInstances 操作向使用控制台连接到您的实例的用户授予权限。如果您的用户仅使用 SSH 客户端连接到您的实例,可以省略 ec2:DescribeInstances。注意,ec2:Describe* API 操作不支持资源级权限。因此,Resource 元素中需要 * 通配符。

{ "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": "*" } ] }