2017-01-18 8 views
3

Создал политику AWS IAM для предоставления пользователю разрешения только для запуска и запуска экземпляра, но если я дам конкретный ресурс ARN, то он не работает. По умолчанию EC2 только для чтения разрешение было дано пользователю для описания экземпляров EC2 и на вершине этой добавленной настроенной политики образца следующим образом:AWS IAM настраиваемая политика на уровне экземпляра для EC2 не работает

Пример политики:

{ 
     "Version": "2012-10-17", 
     "Statement": [ 
      { 
       "Action": [ 
        "ec2:Describe*", 
        "ec2:StopInstances", 
        "ec2:RunInstances", 
        "ec2:StartInstances" 
       ], 
       "Effect": "Allow", 
       "Resource": "*"  

This works

   "Resource": "arn:aws:ec2:<region>:<account id>:instance/<instance id>" 
       "Resource": "arn:aws:ec2:<region>:<account id>:instance/*" 
       "Resource": "arn:aws:ec2:<region>::instance/*" 
       "Resource": "arn:aws:ec2:::instance/*" 
       "Resource": "arn:aws:ec2:::*"  

These doesn’t work

  } 
     ] 
    } 

Отредактировано 23 января (Чтобы показать, что именно я hav e done)

Цель: Запустить и остановить разрешение экземпляра для одного экземпляра EC2 для пользователя.

Испытано различные политики комбо, но ни один из них не работал, кроме "Resource": "*":

на форуме: admin_user (Полный доступ)

создал экземпляр следующим образом:

  1. Регион: Oregon

  2. Наличие зоны: нас-запад-2с

  3. Instance Id: я-xxx3dxxx32xxxxxxe

  4. Владелец: xxx23xxx11

Создано пользователем: testec2_user

Права, предоставляемые Пользователь:

  1. EC2 только для чтения (имеется политика)
  2. Customized политику, чтобы разрешить только остановить и начать я-xxx38xxx32xx45 экземпляра следующим образом:

    { 
    "Version": "2012-10-17", 
    "Statement": [ 
        { 
         "Action": [ 
          "ec2:Describe*", 
          "ec2:RunInstances" 
         ], 
         "Effect": "Allow", 
         "Resource": "*" 
        }, 
        { 
         "Action": [ 
          "ec2:StopInstances", 
          "ec2:StartInstances" 
         ], 
         "Effect": "Allow", 
         "Resource": "arn:aws:ec2:us-west-2c:xxx23xxx11:instance/i-xxx3dxxx32xxxxxxe" 
        } 
         ] } 
    

Зашли как testec2_user и попытался пуск остановленного экземпляра и полученная следующая ошибка:

You are not authorized to perform this operation. Encoded authorization failure message 

У меня есть план для декодирования сообщения, полученного с использованием sts decode authorization message AWS.

ответ

0

Это, как вы указать несколько ресурсов:

… 
     "Effect": "Allow", 
     "Action": "s3:*", 
     "Resource": [ 
     "arn:aws:s3:::BUCKET-NAME/home/${aws:username}", 
     "arn:aws:s3:::BUCKET-NAME/home/${aws:username}/*" 
     ] 
    } 
    ] 
} 

Источник: http://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_examples.html

EDIT:

Вы также можете использовать условия, если вы хотите, чтобы отфильтровать вместо включения всех требуемые ресурсы вручную.

+0

Благодарим за отзыв. Я пробовал S3, и он работает отлично, но мой вопрос связан с разрешением уровня экземпляра EC2. –

2

DescribeInstances не поддерживает разрешения на уровне ресурсов. (См. Unsupported Resource-Level Permissions).

If an Amazon EC2 API action does not support resource-level permissions, you can grant users permission to use the action, but you have to specify a * for the resource element of your policy statement.

Read more

Таким образом, вы можете переписать свою политику как:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Action": [ 
       "ec2:Describe*", 
       "ec2:RunInstances" 
      ], 
      "Effect": "Allow", 
      "Resource": "*" 
     }, 
     { 
      "Action": [ 
       "ec2:StopInstances", 
       "ec2:StartInstances" 
      ], 
      "Effect": "Allow", 
      "Resource": "arn:aws:ec2:<region>:<account>:instance/<instance-id>" 
     } 
    ] 
} 

EDIT

RunInstances необходим доступ к нескольким типам ресурсов, кроме Instance (Такие, как изображения, Группа ключей, Сетевой интерфейс, группа Размещение, Группа безопасности, Snapshot, Subnet и Volume) и принимает определенный формат ARN для каждого типа ресурса. Таким образом, arn:aws:ec2:<region>:<account id>:instance/* будет недостаточно, и вы получите сообщение об ошибке UnauthorizedOperation. «Ресурс» элемент должен быть либо:

"Resource": "*" 

Что является самым простым способом, или:

"Resource": [ 
    "arn:aws:ec2:<region>:<account>:instance/*", 
    "arn:aws:ec2:<region>::image/*", 
    "arn:aws:ec2:<region>:<account>:key-pair/*", 
    "arn:aws:ec2:<region>:<account>:network-interface/*", 
    "arn:aws:ec2:<region>:<account>:placement-group/*", 
    "arn:aws:ec2:<region>:<account>:security-group/*", 
    "arn:aws:ec2:<region>::snapshot/*", 
    "arn:aws:ec2:<region>:<account>:subnet/*", 
    "arn:aws:ec2:<region>:<account>:volume/*" 
] 

Что является более сложным, но обеспечивает детализированный контроль на каждом ресурсе. Например, вы можете разрешить выполнение RunInstances для определенного идентификатора изображения EC2 или идентификатора подсети. Для получения дополнительной информации см. Раздел RunInstanceshere.

Дополнительное примечание на PassRole Разрешение

При выполнении RunInstances, если экземпляр EC2 должен включать в себя профиль экземпляра, пользователь, который запускает экземпляр EC2 также должен иметь IAM PassRole разрешение для того, чтобы связать роль с экземпляром во время запуска. Например:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     ... 
     { 
      "Action": "iam:PassRole", 
      "Effect": "Allow", 
      "Resource":"arn:aws:iam::<account>:role/<role-name>" 
     } 
    ] 
} 

Таким образом, вы убедитесь, что пользователь не проходит роль экземпляра EC2, где роль имеет больше прав, чем вы хотите, чтобы пользователь имел.

Дополнительную информацию о предоставлении разрешения на запуск экземпляров EC2 с ролями IAM см. В статье this в блоге AWS.

+0

Я пробовал все возможные решения, но разрешение на уровне экземпляра не работает. Я пробовал политику без Описания, потому что Describe доступен в политике EC2 Read Only (назначается пользователю). Тем не менее, они останавливают, запускают и запускают разрешения экземпляров на уровне ресурсов, но все же проблема разрешения сохраняется для пользователя. Как работает «Ресурс»: «*» работает, а не «Ресурс»: «arn: aws: ec2: : : instance/« 'для запуска, запуска и запуска экземпляров. –

+0

Кажется, что 'RunInstances' не принимает ARN формата' arn: aws: ec2: : : instance/ '. Это должно быть 'arn: aws: ec2: : : instance/*'. Я соответствующим образом обновил свой ответ. Для получения дополнительной информации см. Раздел «RunInstances» здесь: http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ec2-api-permissions.html#instance –

+0

Благодарим вас за быстрый ответ. Позвольте мне попробовать! –

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