我正在尝试为我们的供应商启用EC2访问权限。那么,我做了什么:我添加标签"供应商"对于专用的EC2实例。
然后,我在下面添加政策..
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:*",
"Resource": "*",
"Condition": {
"StringEquals": {
"ec2:ResourceTag/Vendor": "Takamol"
}
}
},
{
"Effect": "Deny",
"Action": [
"ec2:CreateTags",
"ec2:DeleteTags",
"ec2:TerminateInstances"
],
"Resource": "*"
}
]
}
尽管如此,用户(属于附加组的用户)也无法看到任何EC2实例,即使策略条件受到标记"供应商"的限制。 (正如你所注意到的那样)。
如何允许用户仅管理具有标签的EC2实例:Vendor = Takamol
答案 0 :(得分:6)
你想要实现的目标是不可能的。这是因为一个名为"资源级别权限的概念"。支持资源级别权限的操作允许您使用IAM来允许/拒绝用户对相关资源的某些子集执行操作的能力,例如,具有特定标记,S3存储桶,VPC等的EC2实例。不支持所有资源的不支持资源级别权限的操作,并且只能在资源为*的语句中允许用户使用并且没有条件。
不幸的是,并非所有EC2操作都支持资源级别权限。您的用户无法使用上述IAM策略查看任何EC2实例的原因是ec2:Describe * API调用(在控制台中用于列出帐户中的所有实例)不支持资源级别权限。 / p>
因此即使ec2:Describe *属于ec2:*,你允许在策略的第一个语句中使用标记实例,ec2:描述*并且条件评估为DENY所有ec2:Describe *。
人们通常最终会做的是允许供应商访问以查看帐户中的所有实例,然后只允许他们获得特定实例集所需的其他权限。请参阅下面的策略,它将允许用户查看所有实例,但只能使用所需标记启动,停止和重新启动实例。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowSeeEverything",
"Effect": "Allow",
"Action": [
"ec2:Describe*"
],
"Resource": [
"*"
]
},
{
"Sid": "ThingsIAllowThemToDoForTaggedEc2s",
"Effect": "Allow",
"Action": [
"ec2:RebootInstances",
"ec2:StartInstances",
"ec2:StopInstances"
],
"Condition": {
"StringEquals": {
"ec2:ResourceTag/Vendor": "Takamol"
}
},
"Resource": [
"*"
]
}
]
}
Supported Resource-Level Permissions for Amazon EC2 API Actions中记录了EC2 API调用的列表以及支持的条件,以及支持的条件。我还建议您阅读Demystifying EC2 Resource-Level Permissions 博文。