2015-03-06 6 views
1

Я хочу создать пользователя IAM, которому разрешено создавать новые экземпляры и полностью управлять ими (включая их завершение), но не имеет доступа к каким-либо другим экземплярам. Я попробовал следующее (IAM имя пользователя auto-provision):Какие разрешения я должен предоставить IAM, чтобы он мог создавать экземпляры и управлять ими?

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": "ec2:Describe*", 
      "Resource": "*" 
     }, 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "cloudwatch:ListMetrics", 
       "cloudwatch:GetMetricStatistics", 
       "cloudwatch:Describe*" 
      ], 
      "Resource": "*" 
     }, 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "ec2:RunInstances" 
      ], 
      "Resource":"*" 
     }, 
     { 
      "Effect":"Allow", 
      "Action":["ec2:*"], 
      "Resource":"*", 
      "Condition": { 
       "StringEquals": { 
        "ec2:Owner": "auto-provision" 
       } 
      } 
     } 

    ] 
} 

Это не работает, как ожидалось. Пользователь может создать экземпляр отлично, но не имеет доступа к управлению им. Я предполагаю, что мой Condition в последнем утверждении не работает, потому что «владелец» - это вся учетная запись, а не пользователь?

+0

Ключ ec2: owner относится к идентификатору учетной записи, а не к пользователю, который создал экземпляр: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-policy-structure.html#policy -syntax –

+0

@AssafLavie Спасибо за подтверждение этого. Есть ли у вас какие-либо предложения относительно того, что я мог бы использовать вместо этого? – troelskn

+0

В настоящее время, я боюсь. Моя первая мысль была CFN стеками, но это просто сводится к ограничению доступа на основе тегов ... даст ему больше мысли. –

ответ

1

Я нашел для этого работу, с некоторыми предложениями Ассафа Лави в комментариях.

Сначала я создал группу размещения auto-provision-placement-group. Затем я изменил свой файл политики на что-то вроде:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": "ec2:Describe*", 
      "Resource": "*" 
     }, 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "cloudwatch:ListMetrics", 
       "cloudwatch:GetMetricStatistics", 
       "cloudwatch:Describe*" 
      ], 
      "Resource": "*" 
     }, 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "ec2:RunInstances", 
       "ec2:CreateTags", 
       "ec2:DeleteTags" 
      ], 
      "Resource":"*" 
     }, 
     { 
      "Effect":"Allow", 
      "Action":["ec2:*"], 
      "Resource":"*", 
      "Condition": { 
       "StringEquals": { 
        "ec2:PlacementGroup": "arn:aws:ec2:eu-west-1:111111111111:placement-group/auto-provision-placement-group" 
       } 
      } 
     } 

    ] 
} 

При запуске новых экземпляров я назначаю соответствующую группу мест размещения. Например. (С использованием Ruby, туман):

fog.compute.servers.create(:placement_group => 'auto-provision-placement-group', ...) 

серверы создаются в группе размещения, которая затем используется для управления доступом к большинству функций. Я преднамеренно разрешил полный доступ к тегам, так как я использую его для определения собственности на машины. Затем группа размещения становится моим «контролем доступа».

Рубашка, но она работает.

Смежные вопросы