如何使用IAM策略将用户限制在AWS中的特定实例卷

时间:2014-04-03 03:07:38

标签: amazon-web-services amazon-ec2 policy amazon-iam

我正在开发亚马逊网络服务。设计自定义IAM策略。

我有一个用户可以对实例进行限制访问,例如他可以启动,停止实例。同样,我想限制用户附加,删除特定的卷。 我创建了这个政策:

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "TheseActionsDontSupportResourceLevelPermissions",
"Effect": "Allow",
"Action": ["ec2:DescribeInstances","ec2:DescribeInstanceStatus","ec2:DescribeVolumeAttribute","ec2:DescribeVolumeStatus","ec2:DescribeVolumes"], ,
"Resource": "*"
},
{
"Sid": "TheseActionsSupportResourceLevelPermissions",
"Effect": "Allow",
"Action": [
"ec2:RunInstances",
"ec2:TerminateInstances",
"ec2:StopInstances",
"ec2:StartInstances",
"ec2:AttachVolume",
"ec2:DetachVolume"
],
"Resource": "arn:aws:ec2:us-west-2:AccountID:instance/instanceID",
"Resource": "arn:aws:ec2:us-west-2:AccountID:instance/instanceID",
"Resource": "arn:aws:ec2:us-west-2:AccountID:instance/instanceID",
"Resource": "arn:aws:ec2:us-east-1:123456789012:volume/volID",
"Resource": "arn:aws:ec2:us-east-1:123456789012:volume/volID",
"Resource": "arn:aws:ec2:us-east-1:123456789012:volume/volID"
}
]
}

当我应用此政策时,它不向我显示任何数量。

我收到错误:

error fetching the volume details.

任何领导都表示赞赏 感谢

1 个答案:

答案 0 :(得分:1)

更新

测试/调试IAM策略的最佳方法是通过精彩的IAM Policy Simulator(有关实际链接和说明,请参阅Using the IAM Policy Simulator)。在其帮助下,可以轻松验证以下解决方案是否正常工作。

我建议您在帐户中添加专用测试用户,但不附加任何政策(即隐式拒绝所有),然后使用模式:新政策进行汇总和模拟有问题的政策,例如对于手头的用例:

  • 使用两个卷并通过策略允许一个,然后使用两个资源模拟策略,一个将产生被拒绝,另一个允许用于AttachVolumeDetachVolume

一旦满意,您可以将汇编的政策应用于您帐户中的实体,并通过模式:现有政策重新检查。


初步答复

我想知道你是如何应用这个IAM policy的,因为它在语法上是无效的JSON(第一个Action中的Statement字段缺少任何值)?

除了语法错误之外,这也是问题的根源:
TheseActionsDontSupportResourceLevelPermissions 所示,一些EC2 API操作不支持相对较新的Resource-Level Permissions for EC2 and RDS Resources,请参阅Amazon Resource Names for Amazon EC2中的此注释:

  

重要目前,并非所有API操作都支持单个ARN;我们会额外添加对其他API操作和ARN的支持   Amazon EC2资源稍后。有关您可以使用哪些ARN的信息   使用Amazon EC2 API操作以及支持的条件   每个ARN的密钥,请参阅Supported Resources and Conditions for Amazon EC2 API Actions

在撰写本文时,您会发现Supported Resources and Conditions for Amazon EC2 API Actions的所有ec2:Describe*行动确实不存在。这还包括ec2:DescribeVolume*操作,这就是您收到错误的原因。

修复下面列出的第一个语句可以解决问题:

{
  "Statement": [
    {
      "Sid": "TheseActionsDontSupportResourceLevelPermissions",
      "Action": [
        "ec2:DescribeVolumeAttribute",
        "ec2:DescribeVolumeStatus",
        "ec2:DescribeVolumes"
      ],
      "Effect": "Allow",
      "Resource": "*"
    },
    {
      "Sid": "TheseActionsSupportResourceLevelPermissions",
      "Effect": "Allow",
      "Action": [
        "ec2:AttachVolume",
        "ec2:DetachVolume"
      ],
      "Resource": "arn:aws:ec2:<region>:<account number>:volume/<volume id>"
    }
  ]
}