我想限制特定用户的访问权限,以查看少数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文档提及完全相同的配置或这些示例。
我假设您将作为控制台中的用户连接(但与CLI是相同的),这是我认为正在发生的事情:
要列出所有实例,控制台很可能称为descriptInstances api。根据可以在IAM策略中使用的操作/资源/标签列表,此API不支持IAM中的资源过滤器。
这意味着您的用户无权列出实例,并且不会在控制台中显示。您可以通过使用CLI请求特定实例ID的详细信息来验证该理论,如果我的假设正确,它将被授权。
作为描述Instances不能受到资源或标签的限制,我认为无法过滤用户的实例列表。
要使控制台工作,您需要在IAM策略
中添加以下语句 "Statement": [
{ your existing statement },
{
"Effect": "Allow",
"Action": "ec2:DescribeInstances",
"Resource": "*"
}
]
请报告您是否正确的话:-)您在问题中提到的示例准确显示了:DescribeInstances
上的Resources = *
和其他操作中的资源特定实例ID。
上一个答案是错误的,您可以有条件允许访问ec2:通过标签名称描述启动。这也是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": "*"
}
]
}
DescribeInstances
操作不支持条件。
https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html