Amazon Elastic Compute Cloud
Windows 实例用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

策略结构

以下主题说明 IAM 策略的结构。

策略语法

IAM 策略是包含一个或多个语句的 JSON 文档。每个语句的结构如下:

{ "Statement":[{ "Effect":"effect", "Action":"action", "Resource":"arn", "Condition":{ "condition":{ "key":"value" } } } ] }

组成语句的各个元素如下:

  • Effect:effect 可以是 AllowDeny。默认情况下 IAM 用户没有使用资源和 API 操作的权限,因此,所有请求均会被拒绝。显式允许将覆盖默认规则。显式拒绝将覆盖任何允许。

  • Actionaction 是对其授予或拒绝权限的特定 API 操作。要了解有关指定 action 的信息,请参阅 Amazon EC2 操作

  • Resource:操作影响的资源。有些 Amazon EC2 API 操作允许您在策略中包括该操作可以创建或修改的特定资源。要在语句中指定资源,您需要使用其 Amazon 资源名称 (ARN)。有关指定 ARN 值的详细信息,请参阅 适用于 Amazon EC2 的 Amazon 资源名称。有关哪些 ARN 支持哪些 API 操作的更多信息,请参阅 Amazon EC2 API 操作支持的资源级权限。如果 API 操作不支持 ARN,请使用 * 通配符指定操作可以影响所有资源。

  • Condition:条件是可选的。它们可以用于控制策略生效的时间。想要了解更多有关为 Amazon EC2 指定条件的信息,请参阅 Amazon EC2 的条件键

想要了解更多有关 Amazon EC2 的示例 IAM 策略语句的信息,请参阅 使用 AWS CLI 或 AWS SDK 的策略示例

Amazon EC2 操作

在 IAM 策略语句中,您可以从支持 IAM 的任何服务中指定任何 API 操作。对于 Amazon EC2,请使用以下前缀为 API 操作命名:ec2:。例如:ec2:RunInstancesec2:CreateImage

要在单个语句中指定多项操作,请使用逗号将它们隔开,如下所示:

"Action": ["ec2:action1", "ec2:action2"]

您也可以使用通配符指定多项操作。例如,您可以指定名称以单词“Describe”开头的所有操作,如下所示:

"Action": "ec2:Describe*"

要指定所有 Amazon EC2 API 操作,请使用 * 通配符,如下所示:

"Action": "ec2:*"

有关 Amazon EC2 操作的列表,请参阅 Amazon EC2 API Reference 中的操作主题。

适用于 Amazon EC2 的 Amazon 资源名称

每个 IAM 策略语句适用于您使用资源的 ARN 指定的资源。

重要

当前,并非所有 API 操作都支持各个 ARN。我们以后将为其他 API 操作添加支持以及为其他 Amazon EC2 资源添加 ARN。有关哪些 ARN 可以与哪些 Amazon EC2 API 操作一起使用以及每个 ARN 支持的条件键的信息,请参阅 Amazon EC2 API 操作支持的资源级权限

ARN 的一般语法如下:

arn:aws-cn:[service]:[region]:[account]:resourceType/resourcePath
service

服务 (例如,ec2)。

区域

资源所在区域 (例如,us-east-1)。

账户

AWS 账户 ID,不包含连字符 (例如,123456789012)。

resourceType

资源类型 (例如,instance)。

resourcePath

识别资源的路径。您可以在路径中使用 * 通配符。

例如,您可以使用特定实例 (i-1234567890abcdef0) 的 ARN 在语句中指定它,如下所示:

"Resource": "arn:aws-cn:ec2:us-east-1:123456789012:instance/i-1234567890abcdef0"

还可以使用 * 通配符指定属于特定账户的所有实例,如下所示:

"Resource": "arn:aws-cn:ec2:us-east-1:123456789012:instance/*"

要指定所有资源,或者如果特定 API 操作不支持 ARN,请在 Resource 元素中使用 * 通配符,如下所示:

"Resource": "*"

下表介绍了 Amazon EC2 API 操作使用的每种类型资源的 ARN。

资源类型 ARN

所有 Amazon EC2 资源

arn:aws-cn:ec2:*

指定账户在指定地区拥有的所有 Amazon EC2 资源

arn:aws-cn:ec2:region:account:*

客户网关

arn:aws-cn:ec2:region:account:customer-gateway/cgw-id

其中 cgw-id 是 cgw-xxxxxxxx

DHCP 选项集

arn:aws-cn:ec2:region:account:dhcp-options/dhcp-options-id

其中 dhcp-options-id 是 dopt-xxxxxxxx

Elastic GPU

arn:aws-cn:ec2:region:account:elastic-gpu/*

图片

arn:aws-cn:ec2:region::image/image-id

其中 image-id 是 AMI、AKI 或 ARI 的 ID,而不使用 account

实例

arn:aws-cn:ec2:region:account:instance/instance-id

其中,instance-id 是 i-xxxxxxxx 或 i-xxxxxxxxxxxxxxxxx

实例配置文件

arn:aws-cn:iam::account:instance-profile/instance-profile-name

其中 instance-profile-name 是实例配置文件的名称,而不使用 region

Internet 网关

arn:aws-cn:ec2:region:account:internet-gateway/igw-id

其中 igw-id 是 igw-xxxxxxxx

密钥对

arn:aws-cn:ec2:region:account:key-pair/key-pair-name

其中 key-pair-name 是密钥对名称 (例如,gsg-keypair)

启动模板

arn:aws-cn:ec2:region:account:launch-template/launch-template-id

其中 launch-template-id 是 lt-xxxxxxxxxxxxxxxxx

NAT 网关

arn:aws-cn:ec2:region:account:natgateway/natgateway-id

其中 natgateway-id 是 nat-xxxxxxxxxxxxxxxxx

网络 ACL

arn:aws-cn:ec2:region:account:network-acl/nacl-id

其中 nacl-id 是 acl-xxxxxxxx

网络接口

arn:aws-cn:ec2:region:account:network-interface/eni-id

其中 eni-id 是 eni-xxxxxxxx

置放群组

arn:aws-cn:ec2:region:account:placement-group/placement-group-name

其中 placement-group-name 是置放群组名称 (例如,my-cluster)

Reserved Instance

arn:aws-cn:ec2:region:account:reserved-instances/reservation-id

其中,reservation-idxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

路由表

arn:aws-cn:ec2:region:account:route-table/route-table-id

其中 route-table-id 是 rtb-xxxxxxxx

安全组

arn:aws-cn:ec2:region:account:security-group/security-group-id

其中 security-group-id 是 sg-xxxxxxxx

快照

arn:aws-cn:ec2:region::snapshot/snapshot-id

其中 snapshot-id 是 snap-xxxxxxxx 或 snap-xxxxxxxxxxxxxxxxx,而不使用 account

Spot 实例请求

arn:aws-cn:ec2:region:account:spot-instances-request/spot-instance-request-id

其中 spot-instance-request-id 是 sir-xxxxxxxx

子网

arn:aws-cn:ec2:region:account:subnet/subnet-id

其中 subnet-id 是 subnet-xxxxxxxx

arn:aws-cn:ec2:region:account:volume/volume-id

其中,volume-id 是 vol-xxxxxxxx 或 vol-xxxxxxxxxxxxxxxxx

VPC

arn:aws-cn:ec2:region:account:vpc/vpc-id

其中 vpc-id 是 vpc-xxxxxxxx

VPC 对等连接

arn:aws-cn:ec2:region:account:vpc-peering-connection/vpc-peering-connection-id

其中vpc-peering connection-id 是 pcx-xxxxxxxx

VPN 连接

arn:aws-cn:ec2:region:account:vpn-connection/vpn-connection-id

其中 vpn-connection-id 是 vpn-xxxxxxxx

VPN 网关

arn:aws-cn:ec2:region:account:vpn-gateway/vpn-gateway-id

其中 vpn-gateway-id 是 vgw-xxxxxxxx

许多 Amazon EC2 API 操作涉及多种资源。例如,AttachVolume 将一个 Amazon EBS 卷附加到一个实例,从而使 IAM 用户必须获得相应权限才能使用该卷和该实例。要在单个语句中指定多种资源,请使用逗号将它们隔开,如下所示:

"Resource": ["arn1", "arn2"]

更多有关 ARN 的一般信息,请参阅 Amazon Web Services 一般参考 中的 Amazon 资源名称 (ARN) 和 AWS 服务命名空间主题。有关 Amazon EC2 操作所创建或修改的资源以及可以在 IAM 策略语句中使用的 ARN 的更多信息,请参阅 Amazon EC2 API Reference 中的授予 IAM 用户所需的 Amazon EC2 资源使用权限主题。

Amazon EC2 的条件键

在策略语句中,您可以选择性指定控制策略生效时间的条件。每个条件都包含一个或多个键值对。条件键不区分大小写。我们已经定义了 AWS 范围内的条件键以及其他特定于服务的条件键。

如果您指定了多个条件或在单一条件中指定了多个密钥,我们将通过逻辑 AND 操作对其进行评估。如果您在单一条件中指定了一个具有多个值的密钥,我们将通过逻辑 OR 操作对其进行评估。必须满足所有条件才能授予权限。

在指定条件时,您也可使用占位符。例如,您可以授予 IAM 用户通过指定其 IAM 用户名的标签使用资源的权限。有关更多信息,请参阅 IAM 用户指南 中的策略变量

重要

许多条件键是特定于某个资源的,而某些 API 操作会使用多个资源。如果您使用条件键编写策略,请使用语句的 Resource 元素指定要应用该条件键的资源。否则,该策略可能会完全阻止用户执行操作,因为针对未应用条件键的资源的条件检查失败。如果您不想指定资源,或者如果您已将策略的 Action 元素编写为包含多个 API 操作,则必须使用 ...IfExists 条件类型以确保对不使用条件键的资源忽略条件键。有关更多信息,请参阅 IAM 用户指南 中的 ...IfExists 条件

Amazon EC2 实施以下特定于服务的条件键。有关那个条件键可以与那些 Amazon EC2 资源一起使用的信息 (根据操作流程),请参阅 Amazon EC2 API 操作支持的资源级权限

条件键 键值对 评估类型

ec2:AccepterVpc

"ec2:AccepterVpc":"vpc-arn"

其中,vpc-arn 是 VPC 对等连接中接受方 VPC 的 VPC ARN

ARN,Null

ec2:AuthorizedService

"ec2:AuthorizedService":"service-principal"

其中 service-principal 为服务委托方 (例如,ecs.amazonaws.com)

字符串,Null

ec2:AuthorizedUser

"ec2:AuthorizedUser":"principal-arn"

其中 principal-arn 是委托人的 ARN (例如,arn:aws:iam::123456789012:root)

ARN,Null

ec2:AvailabilityZone

"ec2:AvailabilityZone":"az-api-name"

其中 az-api-name 是可用区的名称 (例如,us-west-2a)

要列出您的可用区,请使用 describe-availability-zones

字符串,Null

ec2:CreateAction "ec2:CreateAction":"api-name"

其中,api-name 是资源创建操作的名称 (例如,RunInstances)

字符串,Null

ec2:EbsOptimized

"ec2:EbsOptimized":"optimized-flag"

其中,optimized-flagtrue | false (对于实例)

布尔值,Null

ec2:ElasticGpuType

"ec2:ElasticGpuType":"elastic-gpu-type"

其中,elastic-gpu-type 是 Elastic GPU 类型的名称

字符串,Null

ec2:Encrypted "ec2:Encrypted":"encrypted-flag"

其中 encrypted-flagtrue | false (对于 EBS 卷)

布尔值,Null

ec2:ImageType

"ec2:ImageType":"image-type-api-name"

其中 image-type-api-nameami | aki | ari

字符串,Null

ec2:InstanceMarketType

"ec2:InstanceMarketType":"market-type"

其中 market-typespot | on-demand

字符串,Null

ec2:InstanceProfile

"ec2:InstanceProfile":"instance-profile-arn"

其中 instance-profile-arn 是实例配置文件 ARN

ARN,Null

ec2:InstanceType

"ec2:InstanceType":"instance-type-api-name"

其中,instance-type-api-name 是实例类型的名称。

字符串,Null

ec2:IsLaunchTemplateResource

"ec2:IsLaunchTemplateResource":"launch-template-resource-flag"

其中 launch-template-resource-flagtrue | false

布尔值,Null

ec2:LaunchTemplate

"ec2:LaunchTemplate":"launch-template-arn"

其中 launch-template-arn 是启动模板 ARN

ARN,Null

ec2:Owner

"ec2:Owner":"account-id"

其中 account-idamazon | aws-marketplace | aws-account-id

字符串,Null

ec2:ParentSnapshot

"ec2:ParentSnapshot":"snapshot-arn"

其中 snapshot-arn 是快照 ARN

ARN,Null

ec2:ParentVolume

"ec2:ParentVolume":"volume-arn"

其中 volume-arn 是卷 ARN

ARN,Null

ec2:Permission

"ec2:Permission":"permission"

其中 permissionINSTANCE-ATTACH | EIP-ASSOCIATE

字符串,Null

ec2:PlacementGroup

"ec2:PlacementGroup":"placement-group-arn"

其中 placement-group-arn 是置放群组 ARN

ARN,Null

ec2:PlacementGroupStrategy

"ec2:PlacementGroupStrategy":"placement-group-strategy"

其中 placement-group-strategycluster | spread

字符串,Null

ec2:ProductCode

"ec2:ProductCode":"product-code"

其中 product-code 是产品代码

字符串,Null

ec2:Public

"ec2:Public":"public-flag"

其中 public-flagtrue | false (对于 AMI)

布尔值,Null

ec2:Region

"ec2:Region":"region-name"

其中 region-name 是区域的名称 (例如,us-west-2)。要列出您的区域,请使用 describe-regions。此条件键可用于所有 Amazon EC2 操作。

字符串,Null

ec2:RequesterVpc

"ec2:RequesterVpc":"vpc-arn"

其中,vpc-arn 是 VPC 对等连接中请求方 VPC 的 VPC ARN

ARN,Null

ec2:ReservedInstancesOfferingType

"ec2:ReservedInstancesOfferingType":"offering-type

其中 offering-typeNo Upfront | Partial Upfront | All Upfront

字符串,Null

ec2:ResourceTag/tag-key

"ec2:ResourceTag/tag-key":"tag-value"

其中 tag-keytag-value 是标签键对

字符串,Null

ec2:RootDeviceType

"ec2:RootDeviceType":"root-device-type-name"

其中 root-device-type-nameebs | instance-store

字符串,Null

ec2:SnapshotTime

"ec2:SnapshotTime":"time"

其中 time 是快照创建时间 (例如,2013-06-01T00:00:00Z)

日期,Null

ec2:Subnet

"ec2:Subnet":"subnet-arn"

其中 subnet-arn 是子网 ARN

ARN,Null

ec2:Tenancy

"ec2:Tenancy":"tenancy-attribute"

其中 tenancy-attributedefault | dedicated | host

字符串,Null

ec2:VolumeIops

"ec2:VolumeIops":"volume-iops"

其中 volume-iops 是每秒输入/输出操作 (IOPS)。有关更多信息,请参阅 Amazon EBS 卷类型

数值,Null

ec2:VolumeSize

"ec2:VolumeSize":"volume-size"

其中 volume-size 是卷的大小 (以 GiB 为单位)

数值,Null

ec2:VolumeType

"ec2:VolumeType":"volume-type-name"

其中,volume-type-name 对于通用型 SSD 卷是 gp2,对于预配置 IOPS SSD 卷是 io1,对于吞吐优化 HDD 卷是 st1,对于Cold HDD 卷是 sc1,对于磁介质卷是 standard

字符串,Null

ec2:Vpc

"ec2:Vpc":"vpc-arn"

其中 vpc-arn 是 VPC ARN

ARN,Null

Amazon EC2 还实施 AWS 范围的条件键。有关更多信息,请参阅IAM 用户指南中的在所有请求中可用的信息

ec2:SourceInstanceARN 键可用于指定作为请求源的实例的 ARN 的条件。此条件键在 AWS 范围内可用,并不特定于服务。有关策略示例,请参阅允许 EC2 实例附加或分离卷12. 允许特定实例查看其他 AWS 服务中的资源ec2:SourceInstanceARN 键不能用作变量来填充语句中 Resource 元素的 ARN。

以下 AWS 条件键是针对 Amazon EC2 引入的,只有有限数量的额外服务支持它们。

条件键 键值对 评估类型

aws:RequestTag/tag-key

"aws:Request/tag-key":"tag-value"

其中,tag-keytag-value 是标签键值对

字符串,Null

aws:TagKeys

"aws:TagKeys":"tag-key"

其中,tag-key 是标签键列表 (例如,["A","B"])

字符串,Null

有关适用于 Amazon EC2 的策略语句示例,请参阅 使用 AWS CLI 或 AWS SDK 的策略示例

检查用户是否具有所需权限

在您创建 IAM 策略后,建议您检查它是否允许用户使用策略生效前所需的特定 API 操作和资源。

首先,创建一个用于测试目的的 IAM 用户,然后将您创建的 IAM 策略附加到该测试用户。然后,以测试用户身份提出请求。

如果您测试的 Amazon EC2 操作创建或修改了一种资源,您在提交请求时应该使用 DryRun 参数 (或运行带有 --dry-run 选项的 AWS CLI 命令)。在这种情况下,调用会完成身份验证检查,但是不会完成该操作。例如,您可以检查用户能否终止特定实例,但不会真的终止它。如果测试用户具有所需的权限,请求会返回 DryRunOperation;否则,它会返回 UnauthorizedOperation

如果策略未授予用户您所期望的权限,您可以根据需要调节策略并重新测试,直到您获得预期的结果。

重要

在其生效之前,它需要几分钟时间将策略更改为适合状态。因此,我们建议您在测试策略更新前,等候五分钟的时间。

如果身份验证检查失败,该请求将返回一个带有诊断信息的代码消息。您可以使用 DecodeAuthorizationMessage 操作对消息进行解码。有关更多信息,请参阅 AWS Security Token Service API Reference中的 DecodeAuthorizationMessage,以及 AWS CLI Command Reference中的 decode-authorization-message