2017-02-08 20 views
2

Я хочу, чтобы сценарий, запущенный на моем экземпляре EC2, указывал, когда он полезен для группы автомасштабирования. Для этого можно запустить следующие из моего сценария:Как я могу позволить экземпляру EC2 с ролью IAM устанавливать только работоспособность экземпляра для itselt?

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

Перед выдачей каких-либо специальных разрешений на IAM роли, я получаю следующее сообщение об ошибке (как я ожидал):

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 

Я мог бы добавить следующее заявление в мои IAM ролей, чтобы обойти эту проблему:

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

Но это не было бы разрешить экземпляры в этой роли, чтобы установить здоровье экземпляра всех случаи (при условии, что они знают идентификатор экземпляра)? Я бы не хотел, чтобы один скомпрометированный экземпляр мог вывести других из своих собственных ПГС.

+0

Этот метод может работать: [Предоставление доступа к ресурсам S3 на основе имени роли] (http://stackoverflow.com/a/35720528/174777). Он также имеет метод для использования идентификатора экземпляра. Однако он жестко закодирован, а не является переменной. –

ответ

0

В Supported Resource-Level Permissions списках документации Auto Scaling группы в колонки Resource АРН, показывая, что вы можете ограничить autoscaling:SetInstanceHealth по Resource.

В 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

Это не ответ, не так ли? –