我想限制特定用户的访问权限,使其仅能看到几个EC2实例。我在IAM角色中创建了一个新用户,并为其附加了新策略。该政策的内容如下。我试图查看文档并自己这样做:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:*",
"Resource": [
"arn:aws:ec2:eu-west-1:ACCOUNT_ID:instance/i-INSTANCE_ID1",
"arn:aws:ec2:eu-west-1:ACCOUNT_ID:instance/i-INSTANCE_ID2"
]
}
]
}
我放置了region
,ACCOUNT_ID
(所有者ID,不是创建的新用户的所有者)和instance-id
,但是当我与该用户建立联系时,我列出了所有实例我得到了这个An error occurred fetching instance data: You are not authorized to perform this operation.
。
将代码放入JSON编辑器后,在策略审核步骤中,我收到以下消息:
此策略定义了一些不符合要求的操作,资源或条件 提供权限。要授予访问权限,策略必须采取措施 具有适用的资源或条件。有关详细信息,请选择显示 剩下的了解更多
AWS documentation提到的配置或these examples完全相同。
答案 0 :(得分:2)
我假设您以控制台中的该用户身份进行连接(但是与CLI相同),这是我认为正在发生的事情:
要列出所有实例,控制台很可能会调用DescribeInstances API。根据IAM策略中可以使用的action/resources/tags列表,此API不支持IAM中的资源过滤器。
这意味着您的用户无权列出实例,并且这些实例不会在控制台中显示。您可以通过使用CLI要求特定实例ID的详细信息来验证这一理论,如果我的假设正确,它将被授权。
由于DescribeInstances不受资源或标签的限制,因此我认为无法为用户过滤实例列表。
要使控制台正常工作,您需要在IAM策略中添加以下语句
"Statement": [
{ your existing statement },
{
"Effect": "Allow",
"Action": "ec2:DescribeInstances",
"Resource": "*"
}
]
请报告我是否正确:-)您问题中的example you mentioned确切显示:Resources = *
上的DescribeInstances
和其他操作上的资源特定InstanceId。
答案 1 :(得分:0)
上一个答案是错误的,您可以有条件地允许通过标签名称访问ec2:DescribeInstances。这也是AWS的最佳实践。还要明确拒绝访问ec2:CreateTags和ec2:DeleteTags操作,以防止用户创建或删除标记来控制实例。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:DescribeInstances",
"Resource": "*",
"Condition": {
"StringEquals": {
"ec2:ResourceTag/UserName": "${aws:username}"
}
}
},
{
"Effect": "Deny",
"Action": [
"ec2:CreateTags",
"ec2:DeleteTags"
],
"Resource": "*"
}
]
}
答案 2 :(得分:0)
DescribeInstances
操作不支持条件。
https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html