我正在开发亚马逊网络服务。设计自定义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.
任何领导都表示赞赏 感谢
答案 0 :(得分:1)
测试/调试IAM策略的最佳方法是通过精彩的IAM Policy Simulator(有关实际链接和说明,请参阅Using the IAM Policy Simulator)。在其帮助下,可以轻松验证以下解决方案是否正常工作。
我建议您在帐户中添加专用测试用户,但不附加任何政策(即隐式拒绝所有),然后使用模式:新政策进行汇总和模拟有问题的政策,例如对于手头的用例:
AttachVolume
和DetachVolume
一旦满意,您可以将汇编的政策应用于您帐户中的实体,并通过模式:现有政策重新检查。
我想知道你是如何应用这个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>"
}
]
}