如何限制 IAM 身份对特定 Amazon EC2 资源的访问?
我想限制 AWS Identity and Access Management (IAM) 身份对特定 Amazon Elastic Compute Cloud (Amazon EC2) 资源的访问。
简短描述
Amazon EC2 对资源级权限或条件提供部分支持。可以使用资源级权限来控制如何允许 IAM 身份访问特定 Amazon EC2 资源。
还可以使用 ABAC(基于标签的授权)来控制对 AWS 资源的访问。有关详细信息,请参阅 IAM tutorial: Define permissions to access AWS resources based on tags(IAM 教程:根据标签定义对 AWS 资源的访问权限)。
解决方法
使用以下 IAM 策略示例,根据使用案例限制对 Amazon EC2 实例的访问。然后,将策略附加到想要限制访问的 IAM 身份。
将访问权限限制为仅启动、停止或重启实例
以下策略示例将 IAM 身份的访问权限限制为仅启动、停止或重启 EC2 实例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:Describe*", "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:StartInstances", "ec2:StopInstances", "ec2:RebootInstances" ], "Resource": [ "arn:aws:ec2:*:AccountId:instance/*" ], "Condition": { "StringEquals": { "ec2:ResourceTag/Owner": "Bob" } } } ] }
注意: 将 Owner 替换为您的标签键,将 Bob 替换为您的标签值,并将 AccountId 替换为您的 AWS 账户 ID。
注意: EC2 实例具有 Owner 标签键,其值为 Bob。
要按标签限制其他 Amazon EC2 资源,请确保这些操作支持资源级权限和条件。
按标签限制 EC2 实例的启动
以下策略示例使用 Owner 标签键将 IAM 身份的访问权限限制为仅启动 EC2 实例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:*:AccountId:instance/*" ], "Condition": { "StringNotLike": { "aws:RequestTag/Owner": "*" } } }, { "Sid": "AllowRunInstances", "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:*::image/*", "arn:aws:ec2:*::snapshot/*", "arn:aws:ec2:*:*:subnet/*", "arn:aws:ec2:*:*:network-interface/*", "arn:aws:ec2:*:*:security-group/*", "arn:aws:ec2:*:*:key-pair/*", "arn:aws:ec2:*:*:instance/*", "arn:aws:ec2:*:*:volume/*" ] }, { "Sid": "AllowToDescribeAll", "Effect": "Allow", "Action": [ "ec2:Describe*" ], "Resource": "*" }, { "Sid": "AllowCreateTagsOnLaunching", "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": [ "arn:aws:ec2:*:AccountId:*/*" ], "Condition": { "StringEquals": { "ec2:CreateAction": [ "RunInstances" ] } } } ] }
注意: 将 Owner 替换为您的标签键,并将 AccountId 替换为您的账户 ID。
注意: 如果 IAM 身份尝试启动没有 Owner 标签键的 EC2 实例,则操作将失败并出现“AccessDenied”错误。
按实例类型限制 EC2 实例的启动
以下策略示例将 IAM 身份的访问权限限制为仅使用 t3.* 实例类型启动 EC2 实例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:*:AccountId:instance/*" ], "Condition": { "StringNotLike": { "ec2:InstanceType": "t3.*" } } }, { "Sid": "AllowRunInstances", "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:*::image/*", "arn:aws:ec2:*::snapshot/*", "arn:aws:ec2:*:*:subnet/*", "arn:aws:ec2:*:*:network-interface/*", "arn:aws:ec2:*:*:security-group/*", "arn:aws:ec2:*:*:key-pair/*", "arn:aws:ec2:*:*:instance/*", "arn:aws:ec2:*:*:volume/*" ] }, { "Sid": "AllowToDescribeAll", "Effect": "Allow", "Action": [ "ec2:Describe*" ], "Resource": "*" }, { "Sid": "AllowCreateTagsOnLaunching", "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": [ "arn:aws:ec2:*:AccountId:*/*" ], "Condition": { "StringEquals": { "ec2:CreateAction": [ "RunInstances" ] } } } ] }
**注意:**将实例类型 t3.* 替换为您的实例类型,例如 t3.nano.。另外,将 AccountId 替换为您的账户 ID。
有关详细信息,请参阅 Amazon EC2 instance type naming conventions(Amazon EC2 实例类型命名规范)。
注意: ec2:CreateAction 条件将标签创建限制为创建 EC2 资源的操作。
相关信息
如何创建 IAM 策略以通过标签控制对 Amazon EC2 资源的访问?
如何使用 IAM 策略标签限制 EC2 实例或 EBS 卷的创建和访问方式?
Identity-based policies for Amazon EC2(Amazon EC2 基于身份的策略)
This article was reviewed and updated on 2026-03-02.
相关内容
AWS 官方已更新 2 年前
