2017-04-12 23 views
2

我试图为我们的供应商启用对EC2的访问。所以,我做了什么:为专用EC2实例添加标签“供应商”。允许用户通过其标签管理EC2

enter image description here

然后,我添加了以下政策..

{ 
    "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实例:供应商= Takamol

回答

5

什么你想实现是不可能的。这是因为有一个名为“资源级权限”的概念。支持资源级权限的操作允许您使用IAM来允许/拒绝用户对某些有问题资源子集执行操作的能力,例如,具有特定标记的EC2实例,S3存储桶,VPC等。不支持资源级权限的操作只能针对所有资源被允许/拒绝,并且只能在资源为*的语句中允许用户使用没有条件。

不幸的是,并非所有EC2操作都支持资源级权限。您的用户无法使用上述IAM策略查看任何EC2实例的原因是,ec2:Describe * API调用(在控制台中用于列出帐户中的所有实例)不支持资源级权限。

因此,尽管ec2:Describe *属于ec2:*,您可以在策略的第一条语句中允许标记实例,但ec2:Describe *的条件计算结果为DENY all 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": [ 
      "*" 
     ] 
    } 
] 

}

什么EC2 API调用支持资源级权限什么都支持Supported Resource-Level Permissions for Amazon EC2 API Actions是记录条件一起列表。我也推荐阅读Demystifying EC2 Resource-Level Permissions 博客文章。

相关问题