Amazon Elastic Compute Cloud
Linux 实例用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

使用 AWS CLI 或 AWS SDK 的策略示例

以下示例显示了您可用于控制 IAM 用户 Amazon EC2 权限的策略语句。这些策略设计用于采用 AWS CLI 或 AWS 开发工具包发出的请求。有关用于 Amazon EC2 控制台的策略示例,请参阅 用于 Amazon EC2 控制台的策略示例。。有关特定于 Amazon VPC 的 IAM 策略示例,请参阅控制对 Amazon VPC 资源的访问.

1. 只读访问

以下策略为用户授予使用名称以 Describe 开头的所有 Amazon EC2 API 操作的权限。Resource 元素使用通配符表示用户可以通过这些 API 操作指定所有资源。在 API 操作不支持资源级权限的情况下,也需要 * 通配符。想要了解更多有关哪些 ARN 可以与哪些 Amazon EC2 API 操作一起使用的信息,请参阅 Amazon EC2 API 操作支持的资源级权限

用户无权对资源执行任何操作 (除非其他语句为用户授予执行此操作的权限),因为在默认情况下会对用户拒绝使用 API 操作的权限。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "ec2:Describe*", "Resource": "*" } ] }

2. 限制对特定区域的访问

以下策略为用户授予仅在 欧洲(法兰克福) 区域中使用所有 Amazon EC2 API 操作的权限。用户无法在任何其他区域中查看、创建、修改或删除资源。

{ "Version":"2012-10-17", "Statement":[ { "Effect": "Allow", "Action": "ec2:*", "Resource": "*", "Condition": { "StringEquals": { "ec2:Region": "eu-central-1" } } } ] }

3. 使用实例

描述、启动、停止和终止所有实例

以下策略为用户授予使用 Action 元素中指定的 API 操作的权限。Resource 元素使用 * 通配符表示用户可以通过这些 API 操作指定所有资源。在 API 操作不支持资源级权限的情况下,也需要 * 通配符。想要了解更多有关哪些 ARN 可以与哪些 Amazon EC2 API 操作一起使用的信息,请参阅 Amazon EC2 API 操作支持的资源级权限

用户无权使用任何其他 API 操作 (除非其他语句允许用户执行此操作),因为用户在默认情况下没有使用 API 操作的权限。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "ec2:DescribeImages", "ec2:DescribeKeyPairs", "ec2:DescribeSecurityGroups", "ec2:DescribeAvailabilityZones", "ec2:RunInstances", "ec2:TerminateInstances", "ec2:StopInstances", "ec2:StartInstances" ], "Resource": "*" } ] }

描述所有实例,以及仅停止、启动和终止特定实例

以下策略允许用户描述所有实例,但只能启动和停止实例 i-1234567890abcdef0 和 i-0598c7d356eba48d7,且只能终止在美国东部(弗吉尼亚北部)地区 (us-east-1) 中具有“purpose=test”资源标签的实例。

第一条语句为 Resource 元素使用 * 通配符以指示用户可以在操作中指定所有资源;在本例中,用户可以列出所有实例。在 API 操作不支持资源级权限的情况下 (在此情况下,为 ec2:DescribeInstances),也需要 * 通配符。想要了解更多有关哪些 ARN 可以与哪些 Amazon EC2 API 操作一起使用的信息,请参阅 Amazon EC2 API 操作支持的资源级权限

第二条语句为 StopInstancesStartInstances 操作使用资源级权限。特定实例在 Resource 元素中通过其 ARN 进行指示。

第三条语句允许用户终止在美国东部(弗吉尼亚北部)地区 (us-east-1) 中、属于指定 AWS 账户并且具有标签 "purpose=test" 的所有实例。当策略语句生效时,Condition 元素具备资格。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:DescribeInstances", "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:StopInstances", "ec2:StartInstances" ], "Resource": [ "arn:aws-cn:ec2:us-east-1:123456789012:instance/i-1234567890abcdef0", "arn:aws-cn:ec2:us-east-1:123456789012:instance/i-0598c7d356eba48d7" ] }, { "Effect": "Allow", "Action": "ec2:TerminateInstances", "Resource": "arn:aws-cn:ec2:us-east-1:123456789012:instance/*", "Condition": { "StringEquals": { "ec2:ResourceTag/purpose": "test" } } } ] }

4. 使用卷

附加和分离卷

在 API 操作需要发起人指定多种资源时,您必须创建一个策略语句,允许用户访问所需的所有资源。如果使用 Condition 元素时需要其中一种或多种资源,则必须创建多个语句,如本示例所示。

以下策略允许用户将带有 “volume_user=iam-user-name” 标签的卷附加到带有 “department=dev” 标签的实例,以及将这些卷与这些实例分离。如果您将此策略附加到 IAM 组,aws:username 策略变量将授权组中的每位 IAM 用户向具有 volume_user 标签 (将用户的 IAM 用户名作为值) 的实例附加卷,或从那些实例分离这些卷。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:AttachVolume", "ec2:DetachVolume" ], "Resource": "arn:aws:ec2:us-east-1:123456789012:instance/*", "Condition": { "StringEquals": { "ec2:ResourceTag/department": "dev" } } }, { "Effect": "Allow", "Action": [ "ec2:AttachVolume", "ec2:DetachVolume" ], "Resource": "arn:aws:ec2:us-east-1:123456789012:volume/*", "Condition": { "StringEquals": { "ec2:ResourceTag/volume_user": "${aws:username}" } } } ] }

创建卷

以下策略允许用户使用 CreateVolume API 操作。系统只允许用户创建加密且大小不足 20 GiB 的卷。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:CreateVolume" ], "Resource": "arn:aws:ec2:us-east-1:123456789012:volume/*", "Condition":{ "NumericLessThan": { "ec2:VolumeSize" : "20" }, "Bool":{ "ec2:Encrypted" : "true" } } } ] }

创建具有标签的卷

下面的策略包含 aws:RequestTag 条件键,该条件键要求用户标记其使用标签 costcenter=115stack=prod 创建的任何卷。aws:TagKeys 条件键使用 ForAllValues 修饰符指示只允许在请求中使用键 costcenterstack (不能指定任何其他标签)。如果用户不传递这些特定标签,或者根本不指定任何标签,则请求失败。

对于应用标签的资源创建操作,用户还必须具有使用 CreateTags 操作的权限。第二个语句使用 ec2:CreateAction 条件键使用户只能在 CreateVolume 上下文中创建标签。用户无法标记现有卷或任何其他资源。有关更多信息,请参阅 用于标记的资源级权限

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCreateTaggedVolumes", "Effect": "Allow", "Action": "ec2:CreateVolume", "Resource": "arn:aws:ec2:us-east-1:123456789012:volume/*", "Condition": { "StringEquals": { "aws:RequestTag/costcenter": "115", "aws:RequestTag/stack": "prod" }, "ForAllValues:StringEquals": { "aws:TagKeys": ["costcenter","stack"] } } }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:us-east-1:123456789012:volume/*", "Condition": { "StringEquals": { "ec2:CreateAction" : "CreateVolume" } } } ] }

下面的策略允许用户创建卷而无需指定标签。仅当用户在 CreateVolume 请求中指定了标签时,系统才会评估 CreateTags 操作。如果用户指定了标签,则标签必须为 purpose=test。请求中不允许使用任何其他标签。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:CreateVolume", "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:us-east-1:1234567890:volume/*", "Condition": { "StringEquals": { "aws:RequestTag/purpose": "test", "ec2:CreateAction" : "CreateVolume" }, "ForAllValues:StringEquals": { "aws:TagKeys": "purpose" } } } ] }

5. 启动实例 (RunInstances)

RunInstances API 操作启动一个或多个实例。RunInstances 需要一个 AMI 并创建实例;用户可以在请求中指定密钥对和安全组。启动到 EC2-VPC 中需要子网,会创建网络接口。从由 Amazon EBS 支持的 AMI 启动将创建卷。因此,用户必须具有使用这些 Amazon EC2 资源的权限。您可以创建要求用户对 RunInstances 指定可选参数或限制用户针对某个参数使用特定值的策略语句。

有关启动实例所需的资源级权限的更多信息,请参阅RunInstances 的资源级权限

默认情况下,用户没有描述、启动、停止或终止生成的实例的权限。授予用户管理所生成实例的权限的一种方法是:为每个实例创建一个特定标签,然后创建一个允许用户使用该标签管理实例的语句。有关更多信息,请参阅 3. 使用实例

AMI

以下策略仅允许用户使用指定的 AMI、ami-9e1670f7ami-45cf5c3c 启动实例。用户无法使用其他 AMI 启动实例 (除非其他语句允许用户执行此操作)。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws-cn:ec2:region::image/ami-9e1670f7", "arn:aws-cn:ec2:region::image/ami-45cf5c3c", "arn:aws-cn:ec2:region:account:instance/*", "arn:aws-cn:ec2:region:account:volume/*", "arn:aws-cn:ec2:region:account:key-pair/*", "arn:aws-cn:ec2:region:account:security-group/*", "arn:aws-cn:ec2:region:account:subnet/*", "arn:aws-cn:ec2:region:account:network-interface/*" ] } ] }

另外,以下策略还允许用户从 Amazon 拥有的所有 AMI 启动实例。第一个语句的 Condition 元素测试 ec2:Owner 是不是 amazon。用户无法使用其他 AMI 启动实例 (除非其他语句允许用户执行此操作)。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws-cn:ec2:region::image/ami-*" ], "Condition": { "StringEquals": { "ec2:Owner": "amazon" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws-cn:ec2:region:account:instance/*", "arn:aws-cn:ec2:region:account:subnet/*", "arn:aws-cn:ec2:region:account:volume/*", "arn:aws-cn:ec2:region:account:network-interface/*", "arn:aws-cn:ec2:region:account:key-pair/*", "arn:aws-cn:ec2:region:account:security-group/*" ] } ] }

[仅 EC2-Classic] 以下策略仅允许用户使用拥有与之关联的指定标签“department=dev”的 AMI 启动实例。用户无法使用其他 AMI 启动实例,因为第一条语句的 Condition 元素要求用户指定带有此标签的 AMI。用户只能启动到 EC2-Classic 中,因为该策略未授予子网和网络接口资源的权限。第二条语句会使用通配符来允许用户创建实例资源,并要求用户指定密钥对 project_keypair 和安全组 sg-1a2b3c4d。用户仍能够在没有密钥对的情况下启动实例。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws-cn:ec2:region::image/ami-*" ], "Condition": { "StringEquals": { "ec2:ResourceTag/department": "dev" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws-cn:ec2:region:account:instance/*", "arn:aws-cn:ec2:region:account:volume/*", "arn:aws-cn:ec2:region:account:key-pair/project_keypair", "arn:aws-cn:ec2:region:account:security-group/sg-1a2b3c4d" ] } ] }

实例类型

以下策略仅允许用户使用 t2.microt2.small 实例类型启动实例,您也可以通过此操作控制成本。用户无法启动更大的实例,因为第一条语句的 Condition 元素会测试 ec2:InstanceType 是否是 t2.microt2.small

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws-cn:ec2:region:account:instance/*" ], "Condition": { "StringEquals": { "ec2:InstanceType": ["t2.micro", "t2.small"] } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws-cn:ec2:region::image/ami-*", "arn:aws-cn:ec2:region:account:subnet/*", "arn:aws-cn:ec2:region:account:network-interface/*", "arn:aws-cn:ec2:region:account:volume/*", "arn:aws-cn:ec2:region:account:key-pair/*", "arn:aws-cn:ec2:region:account:security-group/*" ] } ] }

或者,您也可以创建一个策略,以拒绝用户启动 t2.microt2.small 实例类型之外的任何实例的权限。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": [ "arn:aws-cn:ec2:region:account:instance/*" ], "Condition": { "StringNotEquals": { "ec2:InstanceType": ["t2.micro", "t2.small"] } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws-cn:ec2:region::image/ami-*", "arn:aws-cn:ec2:region:account:network-interface/*", "arn:aws-cn:ec2:region:account:instance/*", "arn:aws-cn:ec2:region:account:subnet/*", "arn:aws-cn:ec2:region:account:volume/*", "arn:aws-cn:ec2:region:account:key-pair/*", "arn:aws-cn:ec2:region:account:security-group/*" ] } ] }

子网

以下策略仅允许用户使用指定子网 subnet-12345678 启动实例。组无法将实例启动到任何其他子网中 (除非其他语句授予执行此操作的用户权限)。用户仍能够将实例启动到 EC2-Classic 中。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws-cn:ec2:region:account:subnet/subnet-12345678", "arn:aws-cn:ec2:region:account:network-interface/*", "arn:aws-cn:ec2:region:account:instance/*", "arn:aws-cn:ec2:region:account:volume/*", "arn:aws-cn:ec2:region::image/ami-*", "arn:aws-cn:ec2:region:account:key-pair/*", "arn:aws-cn:ec2:region:account:security-group/*" ] } ] }

或者,您也可以创建一个策略,以拒绝用户将实例启动到任何其他子网的权限。该语句通过拒绝创建网络接口的权限来执行此操作,除非指定了子网 subnet-12345678。此拒绝会覆盖创建的任何其他策略以允许将实例启动到其他子网中。用户仍能够将实例启动到 EC2-Classic 中。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": [ "arn:aws-cn:ec2:region:account:network-interface/*" ], "Condition": { "ArnNotEquals": { "ec2:Subnet": "arn:aws-cn:ec2:region:account:subnet/subnet-12345678" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws-cn:ec2:region::image/ami-*", "arn:aws-cn:ec2:region:account:network-interface/*", "arn:aws-cn:ec2:region:account:instance/*", "arn:aws-cn:ec2:region:account:subnet/*", "arn:aws-cn:ec2:region:account:volume/*", "arn:aws-cn:ec2:region:account:key-pair/*", "arn:aws-cn:ec2:region:account:security-group/*" ] } ] }

EBS 卷

仅当实例的 EBS 卷为加密卷时,下面的策略才允许用户启动实例。用户必须从使用加密快照创建的 AMI 启动实例,以确保根卷是加密的。此外,用户在启动期间附加到此实例的任何其他卷也必须是加密的。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:*:*:volume/*" ], "Condition": { "Bool": { "ec2:Encrypted": "true" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:*::image/ami-*", "arn:aws:ec2:*:*:network-interface/*", "arn:aws:ec2:*:*:instance/*", "arn:aws:ec2:*:*:subnet/*", "arn:aws:ec2:*:*:key-pair/*", "arn:aws:ec2:*:*:security-group/*" ] } ] }

正在应用标签

下面的策略允许用户启动实例并在创建期间标记实例。对于应用标签的资源创建操作,用户必须具有使用 CreateTags 操作的权限。第二个语句使用 ec2:CreateAction 条件键使用户只能在 RunInstances 上下文中且只能为实例创建标签。用户无法标记现有资源,并且用户无法使用 RunInstances 请求标记卷。

有关更多信息,请参阅 用于标记的资源级权限

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:us-east-1:123456789012:instance/*", "Condition": { "StringEquals": { "ec2:CreateAction" : "RunInstances" } } } ] }

下面的策略包含 aws:RequestTag 条件键,该条件键要求用户标记使用标签 environment=productionpurpose=webserver 通过 RunInstances 创建的任何卷。aws:TagKeys 条件键使用 ForAllValues 修饰符指示只允许在请求中使用键 environmentpurpose (不能指定任何其他标签)。如果未在请求中指定任何标签,则请求失败。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:region::image/*", "arn:aws:ec2:region:account:subnet/*", "arn:aws:ec2:region:account:network-interface/*", "arn:aws:ec2:region:account:security-group/*", "arn:aws:ec2:region:account:key-pair/*" ] }, { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:region:account:volume/*", "arn:aws:ec2:region:account:instance/*" ], "Condition": { "StringEquals": { "aws:RequestTag/environment": "production" , "aws:RequestTag/purpose": "webserver" }, "ForAllValues:StringEquals": { "aws:TagKeys": ["environment","purpose"] } } }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:region:account:*/*", "Condition": { "StringEquals": { "ec2:CreateAction" : "RunInstances" } } } ] }

下面的策略对 aws:TagKeys 条件使用了 ForAnyValue 修饰符,以指示必须在请求中指定至少一个标签,并且其必须包含键 environmentwebserver。标签必须应用于实例及卷。可以在请求中指定任何标签值。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:region::image/*", "arn:aws:ec2:region:account:subnet/*", "arn:aws:ec2:region:account:network-interface/*", "arn:aws:ec2:region:account:security-group/*", "arn:aws:ec2:region:account:key-pair/*" ] }, { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:region:account:volume/*", "arn:aws:ec2:region:account:instance/*" ], "Condition": { "ForAnyValue:StringEquals": { "aws:TagKeys": ["environment","webserver"] } } }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:region:account:*/*", "Condition": { "StringEquals": { "ec2:CreateAction" : "RunInstances" } } } ] }

在下面的策略中,用户不必在请求中指定标签,但如果用户指定标签,则标签必须为 purpose=test。不允许使用任何其他标签。用户可以在 RunInstances 请求中向任何可标记资源应用标签。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:region:account:*/*", "Condition": { "StringEquals": { "aws:RequestTag/purpose": "test", "ec2:CreateAction" : "RunInstances" }, "ForAllValues:StringEquals": { "aws:TagKeys": "purpose" } } } ] }

在启动模板中应用标签

在以下示例中,用户可以启动实例,但前提是他们使用特定的启动模板 (lt-09477bcd97b0d310e)。ec2:IsLaunchTemplateResource 条件键禁止用户覆盖任何启动模板参数。语句的第二部分允许用户在创建时标记实例;如果在启动模板中为实例指定了标签,则该语句部分是必需的。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "*", "Condition": { "ArnLike": { "ec2:LaunchTemplate": "arn:aws:ec2:region:account:launch-template/lt-09477bcd97b0d310e" }, "Bool": { "ec2:IsLaunchTemplateResource": "true" } } }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:region:account:instance/*", "Condition": { "StringEquals": { "ec2:CreateAction" : "RunInstances" } } } ] }

附加 Elastic GPU

在以下策略中,用户可以启动实例并指定要附加到实例的 Elastic GPU。用户可以在任何区域中启动实例,但他们只能在 us-east-2 区域中启动期间附加 Elastic GPU。

ec2:ElasticGpuType 条件键使用 ForAnyValue 修饰符指示只允许在请求中使用 Elastic GPU 类型 eg1.mediumeg1.large

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:*:account:elastic-gpu/*" ], "Condition": { "StringEquals": { "ec2:Region": "us-east-2" }, "ForAnyValue:StringLike": { "ec2:ElasticGpuType": [ "eg1.medium", "eg1.large" ] } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:*::image/ami-*", "arn:aws:ec2:*:account:network-interface/*", "arn:aws:ec2:*:account:instance/*", "arn:aws:ec2:*:account:subnet/*", "arn:aws:ec2:*:account:volume/*", "arn:aws:ec2:*:account:key-pair/*", "arn:aws:ec2:*:account:security-group/*" ] } ] }

启动模板

在以下示例中,用户可以启动实例,但前提是他们使用特定的启动模板 (lt-09477bcd97b0d310e)。用户可以在 RunInstances 操作中指定参数以覆盖启动模板中的任何参数。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "*", "Condition": { "ArnLike": { "ec2:LaunchTemplate": "arn:aws:ec2:region:account:launch-template/lt-09477bcd97b0d310e" } } } ] }

在该示例中,只有在用户使用启动模板时,他们才能启动实例。该策略使用 ec2:IsLaunchTemplateResource 条件键禁止用户覆盖 RunInstances 请求中的任何启动模板参数。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "*", "Condition": { "ArnLike": { "ec2:LaunchTemplate": "arn:aws:ec2:region:account:launch-template/*" }, "Bool": { "ec2:IsLaunchTemplateResource": "true" } } } ] }

以下示例策略允许用户启动实例,但前提是他们使用启动模板。用户无法覆盖请求中的子网和网络接口参数;只能在启动模板中指定这些参数。语句的第一部分使用 NotResource 元素允许子网和网络接口以外的所有其他资源。语句的第二部分允许子网和网络接口资源,但前提是它们来自于启动模板。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "NotResource": ["arn:aws:ec2:region:account:subnet/*", "arn:aws:ec2:region:account:network-interface/*" ], "Condition": { "ArnLike": { "ec2:LaunchTemplate": "arn:aws:ec2:region:account:launch-template/*" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": ["arn:aws:ec2:region:account:subnet/*", "arn:aws:ec2:region:account:network-interface/*" ], "Condition": { "ArnLike": { "ec2:LaunchTemplate": "arn:aws:ec2:region:account:launch-template/*" }, "Bool": { "ec2:IsLaunchTemplateResource": "true" } } } ] }

以下示例允许用户启动实例,但前提是他们使用启动模板,并且启动模板具有标签 Purpose=Webservers。用户无法覆盖 RunInstances 操作中的任何启动模板参数。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "NotResource": "arn:aws:ec2:region:account:launch-template/*", "Condition": { "ArnLike": { "ec2:LaunchTemplate": "arn:aws:ec2:region:account:launch-template/*" }, "Bool": { "ec2:IsLaunchTemplateResource": "true" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:region:account:launch-template/*", "Condition": { "StringEquals": { "ec2:ResourceTag/Purpose": "Webservers" } } } ] }

您可以为 VPC 启用 ClassicLink,然后将 EC2-Classic 实例链接到 VPC。您还可以查看启用了 ClassicLink 的 VPC 和所有链接到 VPC 的 EC2-Classic 实例。可以为 ec2:EnableVpcClassicLinkec2:DisableVpcClassicLinkec2:AttachClassicLinkVpcec2:DetachClassicLinkVpc 操作创建包含资源级权限的策略,以控制用户对这些操作的使用。ec2:Describe* 操作不支持资源级权限。

以下策略为用户授予以下权限:查看启用了 ClassicLink 的 VPC 和链接的 EC2-Classic 实例,为 VPC 启用和禁用 ClassicLink,以及在启用了 ClassicLink 的 VPC 中链接和取消链接实例。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:DescribeClassicLinkInstances", "ec2:DescribeVpcClassicLink", "ec2:EnableVpcClassicLink", "ec2:DisableVpcClassicLink", "ec2:AttachClassicLinkVpc", "ec2:DetachClassicLinkVpc" ], "Resource": "*" } ] }

以下策略允许用户为具有特定标签“purpose=classiclink”的 VPC 启用和禁用 ClassicLink。用户不能为其他任何 VPC 启用或禁用 ClassicLink。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:*VpcClassicLink", "Resource": "arn:aws-cn:ec2:region:account:vpc/*", "Condition": { "StringEquals": { "ec2:ResourceTag/purpose":"classiclink" } } } ] }

以下策略为用户授予将实例链接到 VPC 的权限,但前提是实例具有 m3.large 实例类型。第二条语句允许用户使用 VPC 以及将实例链接到 VPC 所需的安全组资源。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:AttachClassicLinkVpc", "Resource": "arn:aws-cn:ec2:region:account:instance/*", "Condition": { "StringEquals": { "ec2:InstanceType":"m3.large" } } }, { "Effect": "Allow", "Action": "ec2:AttachClassicLinkVpc", "Resource": [ "arn:aws-cn:ec2:region:account:vpc/*", "arn:aws-cn:ec2:region:account:security-group/*" ] } ] }

以下策略为用户授予以下权限:仅将实例链接到特定 VPC (vpc-1a2b3c4d) 以及仅将 VPC 中的特定安全组 (sg-1122aabbsg-aabb2233) 与实例相关联。用户不能将实例链接到任何其他 VPC,因此他们不能在请求中指定任何 VPC 其他安全组与实例关联。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:AttachClassicLinkVpc", "Resource": [ "arn:aws-cn:ec2:region:account:vpc/vpc-1a2b3c4d", "arn:aws-cn:ec2:region:account:instance/*", "arn:aws-cn:ec2:region:account:security-group/sg-1122aabb", "arn:aws-cn:ec2:region:account:security-group/sg-aabb2233" ] } ] }

以下策略授予用户从 VPC 取消与任何链接的 EC2-Classic 实例的链接的权限,但仅当实例具有标签“unlink=true”时才有效。第二条语句为用户授予使用 VPC 资源的权限,需要具有该权限才能从 VPC 中取消链接实例。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "ec2:DetachClassicLinkVpc", "Resource": [ "arn:aws-cn:ec2:region:account:instance/*" ], "Condition": { "StringEquals": { "ec2:ResourceTag/unlink":"true" } } }, { "Effect": "Allow", "Action": "ec2:DetachClassicLinkVpc", "Resource": [ "arn:aws-cn:ec2:region:account:vpc/*" ] } ] }

7. 使用Reserved Instance

以下策略为用户授予在您的账户中查看、修改和购买Reserved Instance的权限。

无法为单独的Reserved Instance设置资源级权限。该策略表示用户有权访问账户中的所有Reserved Instance。

Resource 元素使用 * 通配符指示用户可以在操作中指定所有资源;在本例中,他们可以列出并修改账户中的所有Reserved Instance。他们还可以使用账户凭证购买Reserved Instance。在 API 操作不支持资源级权限的情况下,也需要 * 通配符。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:DescribeReservedInstances", "ec2:ModifyReservedInstances", "ec2:PurchaseReservedInstancesOffering", "ec2:DescribeAvailabilityZones", "ec2:DescribeReservedInstancesOfferings" ], "Resource": "*" } ] }

要允许用户查看和修改您的账户中的Reserved Instance,但不允许购买新的Reserved Instance,请使用以下命令。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:DescribeReservedInstances", "ec2:ModifyReservedInstances", "ec2:DescribeAvailabilityZones" ], "Resource": "*" } ] }

8. 标记资源

仅当标签包含键 environment 和值 production 时,下面的策略才允许用户使用 CreateTags 操作向实例应用标签。ForAllValues 修饰符与 aws:TagKeys 条件键配合使用,以指示只允许在请求中使用键 environment (不允许使用任何其他标签)。用户无法标记任何其他资源类型。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:region:account:instance/*", "Condition": { "StringEquals": { "aws:RequestTag/environment": "production" }, "ForAllValues:StringEquals": { "aws:TagKeys": [ "environment" ] } } } ] }

以下策略允许用户标记已具有键为 owner、值为 IAM 用户名的标签的任何可标记资源。此外,用户还必须在请求中指定键为 test、值为 environmentprod 的标签。用户可以在请求中指定其他的标签。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:region:account:*/*", "Condition": { "StringEquals": { "aws:RequestTag/environment": ["test","prod"], "ec2:ResourceTag/owner": "${aws:username}" } } } ] }

您可以创建允许用户删除资源的特定标签的 IAM 策略。例如,当在请求中指定的标签键为 environmentcost-center 时,下面的策略允许用户删除卷的标签。可以为此标签指定任何值,但标签键必须匹配某个指定键。

注意

如果删除资源,则所有与资源相关的标签都将被删除。用户不需要使用 ec2:DeleteTags 操作删除具有标签的资源的权限,他们仅需要执行删除操作的权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:DeleteTags", "Resource": "arn:aws:ec2:us-east-1:123456789012:volume/*", "Condition": { "ForAllValues:StringEquals": { "aws:TagKeys": ["environment","cost-center"] } } } ] }

该策略仅允许用户删除任何资源上的 environment=prod 标签,但前提是已使用键为 owner、值为 IAM 用户名的标签标记该资源。用户无法删除资源的任何其他标签。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DeleteTags" ], "Resource": "arn:aws:ec2:region:account:*/*", "Condition": { "StringEquals": { "aws:RequestTag/environment": "prod", "ec2:ResourceTag/owner": "${aws:username}" }, "ForAllValues:StringEquals": { "aws:TagKeys": ["environment"] } } } ] }

9. 使用 IAM 角色

以下策略允许用户将 IAM 角色附加、替换到具有标签 department=test 的实例或与分离。替换或分离 IAM 角色需要一个关联 ID,因此策略还允许用户使用 ec2:DescribeIamInstanceProfileAssociations 操作。

IAM 用户必须具有使用 iam:PassRole 操作的授权,才能将角色传递到实例。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:AssociateIamInstanceProfile", "ec2:ReplaceIamInstanceProfileAssociation", "ec2:DisassociateIamInstanceProfile" ], "Resource": "arn:aws-cn:ec2:region:account:instance/*", "Condition": { "StringEquals": { "ec2:ResourceTag/department":"test" } } }, { "Effect": "Allow", "Action": "ec2:DescribeIamInstanceProfileAssociations", "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "*" } ] }

以下策略允许用户为所有实例附加或替换 IAM 角色。用户仅可以附加或替换名称以 TestRole- 开头的 IAM 角色。对于 iam:PassRole 操作,请确保您指定的是 IAM 角色的名称而不是实例配置文件的名称 (如果名称不同)。有关更多信息,请参阅 实例配置文件

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:AssociateIamInstanceProfile", "ec2:ReplaceIamInstanceProfileAssociation" ], "Resource": "*" }, { "Effect": "Allow", "Action": "ec2:DescribeIamInstanceProfileAssociations", "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::account:role/TestRole-*" } ] }

10. 使用路由表

以下策略允许用户添加、删除和替换仅与 VPC vpc-ec43eb89 关联的路由表的路由。要为 ec2:Vpc 条件键指定 VPC,必须指定 VPC 的完整 ARN。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DeleteRoute", "ec2:CreateRoute", "ec2:ReplaceRoute" ], "Resource": [ "arn:aws:ec2:region:account:route-table/*" ], "Condition": { "StringEquals": { "ec2:Vpc": "arn:aws:ec2:region:account:vpc/vpc-ec43eb89" } } } ] }

11. 允许特定实例查看其他 AWS 服务中的资源

下面是您可能附加到 IAM 角色的策略的示例。该策略允许实例查看不同 AWS 服务中的资源。它使用 ec2:SourceInstanceARN 条件键指定从中发出请求的实例必须是实例 i-093452212644b0dd6。如果同一个 IAM 角色还与另一个实例关联,则另一个实例无法执行任何这些操作。

ec2:SourceInstanceARN 键是一个 AWS 范围的条件键,因此可以用于其他服务操作,而不仅仅是 Amazon EC2。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeVolumes", "s3:ListAllMyBuckets", "dynamodb:ListTables", "rds:DescribeDBInstances" ], "Resource": [ "*" ], "Condition": { "ArnEquals": { "ec2:SourceInstanceARN": "arn:aws:ec2:region:account:instance/i-093452212644b0dd6" } } } ] }

12. 使用启动模板

以下策略允许用户创建启动模板版本和修改启动模板,但仅适用于特定的启动模板 (lt-09477bcd97b0d3abc)。用户无法使用其他启动模板。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ec2:CreateLaunchTemplateVersion", "ec2:ModifyLaunchTemplate" ], "Effect": "Allow", "Resource": "arn:aws:ec2:region:account:launch-template/lt-09477bcd97b0d3abc" } ] }

以下策略允许用户删除任何启动模板和启动模板版本,但前提是启动模板具有标签 Purpose=Testing

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ec2:DeleteLaunchTemplate", "ec2:DeleteLaunchTemplateVersions" ], "Effect": "Allow", "Resource": "arn:aws:ec2:region:account:launch-template/*", "Condition": { "StringEquals": { "ec2:ResourceTag/Purpose": "Testing" } } } ] }