2017-04-12 37 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 博客文章。

相關問題