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

用于 Amazon EC2 控制台的策略示例。

您可以使用 IAM 策略向用户授予在 Amazon EC2 控制台中查看和使用特定资源的权限。您可以使用上一部分中的策略;但是,这些策略设计用于使用 AWS CLI 或 AWS 开发工具包发出的请求。控制台使用其他 API 操作实现其功能,因此这些策略可能不会按预期方式起作用。例如,只拥有 DescribeVolumes API 操作使用权限的用户在控制台中查看卷时会遇到错误。此部分演示使用户可以使用控制台的特定部分的策略。

注意

为帮助您了解在控制台中执行任务所需的相应 API 操作,您可以使用 AWS CloudTrail 等服务。有关更多信息,请参阅 AWS CloudTrail User Guide。如果您的策略不授予创建或修改特定资源的权限,则控制台显示一个包含诊断信息的编码消息。您可以使用适用于 AWS STS 的 DecodeAuthorizationMessage API 操作或 AWS CLI 中的 decode-authorization-message 命令对该消息解码。

有关创建 Amazon EC2 控制台的策略的更多信息,请参阅发布的以下 AWS 安全博客:授予用户在 Amazon EC2 控制台中工作的权限

1:只读访问

要允许用户在 Amazon EC2 控制台中查看所有资源,您可以使用与以下示例相同的策略:1:只读访问用户无法对这些资源执行任何操作或创建新资源 (除非其他语句向用户授予执行此操作的权限)。

a. 查看实例、AMI 和快照

或者,您可以提供对资源子集的只读访问权限。为此,请对每个资源将 ec2:Describe API 操作中的 * 通配符替换为特定 ec2:Describe 操作。以下策略允许用户在 Amazon EC2 控制台中查看所有实例、AMI 和快照。ec2:DescribeTags 操作允许用户查看公用 AMI。控制台需要标记信息来显示公用 AMI;但是,您可以删除此操作以允许用户只查看私有 AMI。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "ec2:DescribeImages", "ec2:DescribeTags", "ec2:DescribeSnapshots" ], "Resource": "*" } ] }

注意

当前,Amazon EC2 ec2:Describe* API 操作不支持资源级权限,因此您无法控制用户可以在控制台中查看的单个资源。因此,在以上语句的 Resource 元素中需要 * 通配符。想要了解更多有关哪些 ARN 可以与哪些 Amazon EC2 API 操作一起使用的信息,请参阅 Amazon EC2 API 操作支持的资源级权限

b. 查看实例和 CloudWatch 指标

以下策略允许用户在 Amazon EC2 控制台中查看实例,以及在 Instances 页面的 Monitoring 选项卡中查看 CloudWatch 警报和指标。Amazon EC2 控制台使用 CloudWatch API 显示警报和指标,因此您必须向用户授予对 cloudwatch:DescribeAlarmscloudwatch:GetMetricStatistics 操作的使用权。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "cloudwatch:DescribeAlarms", "cloudwatch:GetMetricStatistics" ], "Resource": "*" } ] }

2:使用 EC2 启动向导

Amazon EC2 启动向导是一系列屏幕,其中包含用于配置和启动实例的选项。您的策略必须包含允许用户使用向导选项的 API 操作使用权限。如果您的策略不包含使用这些操作的权限,则向导中的一些项目无法正确加载,用户无法完成启动。

a. 基本启动向导访问

要成功完成启动,必须向用户授予使用 ec2:RunInstances API 操作以及至少以下 API 操作的权限:

  • ec2:DescribeImages:查看并选择 AMI。

  • ec2:DescribeVPCs:查看可用网络选项,即 EC2-Classic 和 VPC 列表。即使您不在 VPC 中启动也需要此操作。

  • ec2:DescribeSubnets:如果在 VPC 中启动,请查看所选 VPC 的所有可用子网。

  • ec2:DescribeSecurityGroups:查看向导中的安全组页面。用户可以选择现有安全组。

  • ec2:DescribeKeyPairsec2:CreateKeyPair:选择现有密钥对或创建新密钥对。

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

您可以向策略添加 API 操作以便为用户提供更多选项,例如:

  • ec2:DescribeAvailabilityZones:如果启动到 EC2-Classic,请查看并选择特定可用区。

  • ec2:DescribeNetworkInterfaces:如果启动到 VPC,请查看并选择所选子网的现有网络接口。

  • ec2:CreateSecurityGroup创建新安全组;如创建向导推荐的 launch-wizard-x 安全组。但是,此操作仅单独创建安全组;不添加或修改任何规则。要添加入站规则,必须向用户授予使用 ec2:AuthorizeSecurityGroupIngress API 操作的权限。要向 VPC 安全组添加出站规则,必须向用户授予使用 ec2:AuthorizeSecurityGroupEgress API 操作的权限。要修改或删除现有规则,必须向用户授予使用相关 ec2:RevokeSecurityGroup* API 操作的权限。

  • ec2:CreateTags:标记通过 RunInstances 创建的资源。有关更多信息,请参阅 用于标记的资源级权限。如果用户没有使用此操作的权限而又尝试在启动向导的标记页上应用标签,则启动失败。

    重要

    向用户授予使用 ec2:CreateTags 操作的权限时请小心谨慎。这会限制您使用 ec2:ResourceTag 条件密钥限制其他资源的使用的能力;用户可以更改资源的标签以便绕过这些限制。

当前,Amazon EC2 Describe* API 操作不支持资源级权限,因此您无法限制用户可以在启动向导中查看的单个资源。但是,您可以对 ec2:RunInstances API 操作应用资源级权限,以限制用户可以用于启动实例的资源。如果用户选择未授权他们使用的选项,则启动会失败。

b. 限制对特定实例类型、子网和区域的访问

以下策略允许用户使用 Amazon 拥有的 AMI 启动 m1.small 实例,并且仅在特定子网 (subnet-1a2b3c4d) 中启动。用户只能在 sa-east-1 区域中启动。如果用户在启动向导中选择不同区域或选择不同实例类型、AMI 或子网,则启动会失败。

第一条语句向用户授予查看启动向导中的选项的权限,如上例所示。第二条语句向用户授予将网络接口、卷、密钥对、安全组和子网资源 (在 VPC 中启动实例需要这些资源) 用于 ec2:RunInstances 操作的权限。有关使用 ec2:RunInstances 操作的更多信息,请参阅 5:启动实例 (RunInstances)。第三和第四条语句分别向用户授予使用实例 (仅当实例是 m1.small 实例时) 和 AMI 资源 (仅当 AMI 由 Amazon 所有时) 的权限。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "ec2:DescribeImages", "ec2:DescribeKeyPairs","ec2:DescribeVpcs", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups" ], "Resource": "*" }, { "Effect": "Allow", "Action":"ec2:RunInstances", "Resource": [ "arn:aws-cn:ec2:sa-east-1:111122223333:network-interface/*", "arn:aws-cn:ec2:sa-east-1:111122223333:volume/*", "arn:aws-cn:ec2:sa-east-1:111122223333:key-pair/*", "arn:aws-cn:ec2:sa-east-1:111122223333:security-group/*", "arn:aws-cn:ec2:sa-east-1:111122223333:subnet/subnet-1a2b3c4d" ] }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws-cn:ec2:sa-east-1:111122223333:instance/*" ], "Condition": { "StringEquals": { "ec2:InstanceType": "m1.small" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws-cn:ec2:sa-east-1::image/ami-*" ], "Condition": { "StringEquals": { "ec2:Owner": "amazon" } } } ] }

3:使用卷

以下策略向用户授予查看和创建卷以及将卷与特定实例连接和断开的权限。

用户可以将任何卷连接到具有标签“purpose=test”的实例,也可以从这些实例断开卷。要使用 Amazon EC2 控制台连接卷,用户有权使用 ec2:DescribeInstances 操作会很有帮助,因为这可以让他们从 Attach Volume (连接卷) 对话框的预填充列表中选择实例。但是,这也会允许用户在控制台的 Instances 页面上查看所有实例,因此,您可以省略此操作。

在第一条语句中,需要 ec2:DescribeVolumeStatusec2:DescribeAvailabilityZones 操作以确保卷在控制台中正确显示。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:DescribeVolumes", "ec2:DescribeVolumeStatus", "ec2:DescribeAvailabilityZones", "ec2:CreateVolume", "ec2:DescribeInstances" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:AttachVolume", "ec2:DetachVolume" ], "Resource": "arn:aws-cn:ec2:region:111122223333:instance/*", "Condition": { "StringEquals": { "ec2:ResourceTag/purpose": "test" } } }, { "Effect": "Allow", "Action": [ "ec2:AttachVolume", "ec2:DetachVolume" ], "Resource": "arn:aws-cn:ec2:region:111122223333:volume/*" } ] }

4:使用安全组

a. 查看安全组以及添加和删除规则

以下策略向用户授予在 Amazon EC2 控制台中查看安全组,以及为具有标签 Department=Test 的现有安全组添加和删除入站和出站规则的权限。

注意

您无法为 EC2-Classic 安全组修改出站规则。有关安全组的更多信息,请参阅 Windows 实例的 Amazon EC2 个安全组

在第一条语句中,ec2:DescribeTags 操作允许用户在控制台中查看标签,这样,用户更易于识别自己可修改的安全组。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:DescribeSecurityGroups", "ec2:DescribeTags" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:AuthorizeSecurityGroupIngress", "ec2:RevokeSecurityGroupIngress", "ec2:AuthorizeSecurityGroupEgress", "ec2:RevokeSecurityGroupEgress" ], "Resource": [ "arn:aws-cn:ec2:region:111122223333:security-group/*" ], "Condition": { "StringEquals": { "ec2:ResourceTag/Department": "Test" } } } ] }

b. 使用 Create Security Group 对话框

您可以创建一个策略,以允许用户使用 Amazon EC2 控制台中的 Create Security Group (创建安全组) 对话框。要使用此对话框,必须向用户授予使用至少以下 API 操作的权限:

  • ec2:CreateSecurityGroup: 创建新安全组。

  • ec2:DescribeVpcs查看 VPC 列表中的现有 VPC 列表。在 EC2-Classic 上创建安全组不需要此操作。

借助这些权限,用户可以成功创建新安全组,但是他们不能向其中添加任何规则。要在 Create Security Group (创建安全组) 对话框中使用规则,您可以向策略添加以下 API 操作:

  • ec2:AuthorizeSecurityGroupIngress:添加入站规则。

  • ec2:AuthorizeSecurityGroupEgress:向 VPC 安全组添加出站规则。

  • ec2:RevokeSecurityGroupIngress:修改或删除现有入站规则。如果要允许用户使用控制台中的 Copy to new 功能,这十分有用。此功能会打开 Create Security Group (创建安全组) 对话框,并使用所选安全组的规则进行填充。

  • ec2:RevokeSecurityGroupEgress:修改或删除适用于 VPC 安全组的出站规则。若要允许用户修改或删除允许所有出站流量的默认出站规则,这十分有用。

  • ec2:DeleteSecurityGroup:适用于无效规则无法保存的情况。控制台首先创建安全组,然后添加指定的规则。如果规则无效,则操作会失败,而控制台会尝试删除安全组。用户仍会停留在“Create Security Group”对话框中,这样就能更正无效规则和尝试重新创建安全组。此 API 操作不是必需的,但是如果用户在无权使用它的情况下尝试创建具有无效规则的安全组,则会创建不包含任何规则的安全组,用户必须在之后添加规则。

当前,ec2:CreateSecurityGroup API 操作不支持资源级权限;但是,您可以向 ec2:AuthorizeSecurityGroupIngressec2:AuthorizeSecurityGroupEgress 操作应用资源级权限以控制用户创建规则的方式。

以下策略向用户授予使用 Create Security Group (创建安全组) 对话框,以及为与特定 VPC (vpc-1a2b3c4d) 关联的安全组创建入站和出站规则的权限。用户可以为 EC2-Classic 或其他 VPC 创建安全组,但是无法向它们添加任何规则。同样,用户无法向不与 VPC vpc-1a2b3c4d 关联的任何现有安全组添加任何规则。还向用户授予了在控制台中查看所有安全组的权限。这样,用户更易于识别自己可添加入站规则的安全组。此策略还向用户授予删除与 VPC vpc-1a2b3c4d 关联的安全组的权限。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:DescribeSecurityGroups", "ec2:CreateSecurityGroup", "ec2:DescribeVpcs" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:DeleteSecurityGroup", "ec2:AuthorizeSecurityGroupIngress", "ec2:AuthorizeSecurityGroupEgress" ], "Resource": "arn:aws-cn:ec2:region:111122223333:security-group/*", "Condition":{ "ArnEquals": { "ec2:Vpc": "arn:aws-cn:ec2:region:111122223333:vpc/vpc-1a2b3c4d" } } } ] }

5:使用弹性 IP 地址

为了让用户能够查看 Amazon EC2 控制台中的弹性 IP 地址,您必须授予用户使用 ec2:DescribeAddresses 操作的权限。

要允许用户使用弹性 IP 地址,可将以下操作添加到您策略中.

  • ec2:AllocateAddress:分配可在 VPC 或 EC2-Classic 中使用的地址。

  • ec2:ReleaseAddress: 解除弹性 IP 地址。

  • ec2:AssociateAddress:将弹性 IP 地址与实例或网络接口关联。

  • ec2:DescribeNetworkInterfacesec2:DescribeInstances:使用 Associate Address (关联地址) 屏幕。屏幕显示了您可以将弹性 IP 地址关联到的可用实例或网络接口。对于一个 EC2-Classic 实例,用户只需拥有使用 ec2:DescribeInstances 的权限。

  • ec2:DisassociateAddress:取消弹性 IP 地址与实例或网络接口的关联。

以下策略允许用户查看弹性 IP 地址并将其分配给实例和与实例相关联。用户不可以将弹性 IP 地址与网络接口关联、取消弹性 IP 地址的关联或释放弹性 IP 地址。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeAddresses", "ec2:AllocateAddress", "ec2:DescribeInstances", "ec2:AssociateAddress" ], "Resource": "*" } ] }

6. 预留实例的使用

以下策略可以附加到 IAM 用户。它可让用户查看和修改您账户中的预留实例,同时也能在AWS 管理控制台内购买新的预留实例。

该策略允许用户查看账户内的所有预留实例和按需实例。无法为单个预留实例设置资源级别的许可。

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

必须进行 ec2:DescribeAvailabilityZones 操作才能确保 Amazon EC2 控制台可以显示有关您能够购买预留实例的可用区的信息。ec2:DescribeInstances 操作不是必须的,但是请确保用户可查看账户内的实例并且能够购买预留实例,以匹配正确的规格。

您可以调整 API 操作,以限制用户访问,例如移除ec2:DescribeInstances,而ec2:DescribeAvailabilityZones表示用户有只读形式的访问权。