Amazon Elastic Compute Cloud
Windows 实例用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

策略结构

以下主题说明 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 开发工具包的策略示例

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)

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-instance/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

竞价型实例请求

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 实施以下特定于服务的条件键。

条件键 键值对 评估类型

ec2:AccepterVpc

"ec2:AccepterVpc":"vpc-arn"

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

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: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: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:PlacementGroup

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

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

ARN,Null

ec2:PlacementGroupStrategy

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

其中 placement-group-strategycluster

字符串,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: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);其范围是从 100 到 20,000

数值,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 范围内的条件键 (请参阅可用键)。以下 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 资源一起使用的信息 (根据操作流程),请参阅 Amazon EC2 API 操作支持的资源级权限。有关适用于 Amazon EC2 的策略语句示例,请参阅 适用于 AWS CLI 或 AWS 开发工具包的策略示例

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

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

首先,创建一个用于测试目的的 IAM 用户,然后将您创建的 IAM 策略与该测试用户关联起来。然后,以测试用户身份提出请求。

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

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

重要

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

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