我已为AWS用户设置了一个策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect":"Allow",
"Action": "ec2:Describe*",
"Resource":"*"
}
]
}
目的是允许具有此策略的用户在控制台上查看 EC2实例,但不能实际执行任何操作。问题是,一旦应用此策略,用户就可以启动,停止,终止和启动新实例,即使上述策略AFAIK中没有解决这些权限。
为什么上述政策会发生这种情况,我该怎样做才能阻止它(即实现我所追求的“观看但不触摸”的结果)?
答案 0 :(得分:2)
Amazon IAM政策默认为拒绝,与明确否认不同,有关详情,请参阅The Difference Between Denying by Default and Explicit Deny。
因此,默认情况下,观察到的行为是不可能的,因此必须有另一个策略为此用户明确授予ec2:RunInstances
等不需要的操作。您可以使用以下选项来解决此问题:
您可以通过优秀的新AWS Identity and Access Management Policy Simulator分析哪个政策授予不受欢迎的操作,这对此类问题非常有帮助。
您可以为用户无法执行的操作添加显式拒绝,例如:
{
"Statement": [
{
"Action": [
"ec2:RebootInstances",
"ec2:RunInstances",
"ec2:StartInstances",
"ec2:StopInstances",
"ec2:TerminateInstances"
],
"Effect": "Deny",
"Resource": "*"
}
]
}
请注意,后者仍然会允许您可能不需要的其他一些其他EC2操作,因此更明确地拒绝除了所需的所有操作之外的其他操作将更方便NotAction:
NotAction元素允许您指定操作列表的例外。例如,您可以使用NotAction让用户仅使用Amazon SQS SendMessage操作,而无需列出不允许用户执行的所有操作。使用NotAction有时可以导致比使用Action元素和列出许多操作更短的策略。
NotAction
明确Deny
时,很容易限制超出预期甚至锁定自己 - 始终确保Resource
语句仅定位到所需的资源。例如,仅使用公共通配符*
而不是像arn:aws:ec2:*:*:*
这样的更具体的资源选择器归结为“拒绝除了这些操作每个服务的所有” - 例如这包括再次删除错误政策的能力!最好通过仔细模拟策略来避免这种情况。分别政策可能如下所示:
{
"Statement": [
{
"NotAction": [
"ec2:Describe*"
],
"Effect": "Deny",
"Resource": "arn:aws:ec2:*:*:*"
}
]
}
答案 1 :(得分:0)
对于user3086014,请创建类似于以下内容的策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect":"Allow",
"Action": [
"ec2:DescribeInstances",
"ec2:StartInstances",
"ec2:StopInstances",
"ec2:RebootInstances"
],
"Resource":[
"arn:aws:ec2:us-west-1:0123456789012:instance/i-ffffffff"
]
}
]
}
将操作更改为您希望用户执行的操作。更改资源以识别您的实例 - 即更改帐户ID(我上面写的是0123456789012)和实例ID(我上面写的是i-ffffffff)。然后将该政策应用于您的用户。如果要允许使用两个实例,请在ARN之间添加第二个带逗号分隔符的ARN(如需要的JSON格式)。
请下次再提出一个问题。在评论中自己有问题 - 答案很尴尬。谢谢!