Amazon web services 如何使用IAM策略将用户限制到AWS中的特定实例卷

Amazon web services 如何使用IAM策略将用户限制到AWS中的特定实例卷,amazon-web-services,amazon-ec2,amazon-iam,Amazon Web Services,Amazon Ec2,Amazon Iam,我正在Amazon web服务上工作。设计自定义IAM策略 我有一个用户对实例的访问受到限制,比如他可以启动、停止实例。同样,我想限制用户附加、删除特定卷。 我创建了以下策略: { "Version": "2012-10-17", "Statement": [ { "Sid": "TheseActionsDontSupportResourceLevelPermissions", "Effect": "Allow", "Action": ["ec2:DescribeInstances","ec2:

我正在Amazon web服务上工作。设计自定义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.
任何线索都很感激 谢谢更新 测试/调试IAM策略的最佳方法是使用fantastic(有关实际链接和说明,请参阅)。有了它的帮助,下面的解决方案可以很容易地验证是否正常工作

我建议向您的帐户添加一个没有附加任何策略的专用测试用户(即隐式拒绝所有策略),然后使用模式:New Policy来组合和模拟所讨论的策略,例如,对于手头的用例:

  • 使用两个卷并通过策略允许一个卷,然后使用这两个资源模拟策略,一个将产生拒绝,另一个允许
    AttachVolume
    DetachVolume
满意后,您可以将组合策略应用于帐户中的实体,并通过模式:现有策略重新检查


初步答复 我想知道您是如何应用它的,因为它在语法上是无效的JSON(第一个
语句
中的
Action
字段缺少任何值)

撇开语法错误不谈,这也是问题的根源:
正如ActionsDontSupportResourceLevelPermissions所指出的,一些EC2 API操作还不支持相对较新的操作,请参见以下说明:

重要目前,并非所有API行动都支持单个ARN;我们将为其他API操作添加支持,并为其他API操作添加ARN AmazonEC2资源。有关您可以使用哪些ARN的信息 使用哪些AmazonEC2API操作以及支持的条件 每个ARN的密钥,请参见

您会发现,在撰写本文时,所有的
ec2:descripe*
操作实际上仍然不存在。这还包括
ec2:DescribeVolume*
操作,这就是您收到错误的原因

修复下面概述的第一条语句可以解决此问题:

{
“声明”:[
{
“Sid”:“操作内容支持资源级别权限”,
“行动”:[
“ec2:DescribeVolumeAttribute”,
“ec2:DescribeVolumeStatus”,
“ec2:描述卷”
],
“效果”:“允许”,
“资源”:“*”
},
{
“Sid”:“TheseActionsSupportResourceLevelPermissions”,
“效果”:“允许”,
“行动”:[
“ec2:附加卷”,
“ec2:分离卷”
],
“资源”:“arn:aws:ec2:::卷/”
}
]
}

用户是否可以看到所有卷,但可以附加、删除特定卷。他还可以创建卷。有可能吗?我正在等待答复。只要你有时间,请回答我的问题。感谢概述的策略可以很好地启用附加/分离场景,我已经更新了我的答案,并说明了如何使用IAM策略模拟器来验证这一点-您也可以允许创建卷,但当然,您事先不知道生成的卷id,因此不能包括resp。预先附加/分离权限。这将需要一个基于标记的相当复杂的工作流,参见我对的回答中的部分解决方案一节,了解概念方法。顺便说一句,前面提到的部分解决方案的一个变体与您的用例更紧密地结合在一起,如所示。