2017-02-08 53 views
2

我想讓運行在我的EC2實例上的腳本能夠指示自動調整組對它的健康狀態。要做到這一點,我可以運行從我的腳本如下:如何允許具有IAM角色的EC2實例爲itselt設置實例健康狀況?

An error occurred (AccessDenied) when calling the SetInstanceHealth operation: User: arn:aws:sts::ACCOUNTID:assumed-role/ROLENAME/i-INSTANCEID is not authorized to perform: autoscaling:SetInstanceHealth 

aws --region $AWSREGION \ 
    autoscaling \ 
    set-instance-health \ 
    --instance-id $(curl http://169.254.169.254/latest/meta-data/instance-id) \ 
    --health-status Unhealthy 

授予任何特殊權限的IAM角色,我得到以下錯誤(如我期望的)前我可以添加以下語句到我的IAM角色來解決這個問題:

{ 
    "Action": [ 
    "autoscaling:SetInstanceHealth" 
    ], 
    "Effect": "Allow", 
    "Resource": "*" 
} 

但不會說,這一角色的實例來設置實例的健康上的所有實例(假設他們知道實例ID)?我不希望一個受損的實例能夠將其他人從他們自己的ASG中拿走。

+0

此方法可能有效:[根據角色名稱授予對S3資源的訪問權限](http://stackoverflow.com/a/35720528/174777)。它也有使用實例ID的方法。但是,它是硬編碼的而不是變量。 –

回答

0

Supported Resource-Level Permissions文檔列表自動縮放組資源ARN列,表示可以通過Resource限制autoscaling:SetInstanceHealth

IAM Policy Simulator有異議:

此操作不支持資源級權限

...但我已經驗證以下IAM策略允許發現自動縮放組的成員,檢查他們的CloudWatch指標,然後設置成員的實例健康狀況只有一個自動縮放組:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "autoscaling:SetInstanceHealth" 
      ], 
      "Resource": "arn:aws:autoscaling:REGION:ACCOUNT:autoScalingGroup:UUID:autoScalingGroupName/NAME" 
     }, 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "autoscaling:DescribeAutoScalingGroups", 
       "cloudwatch:ListMetrics", 
       "cloudwatch:GetMetricStatistics" 
      ], 
      "Resource": "*" 
     } 
    ] 
} 
+0

這不是一個答案,對吧? –