Как создать политику IAM для управления доступом к ресурсам Amazon EC2 на основе тега имени подсети?

Мне нужно ограничить конкретную роль пользователя на выполнение любых действий экземпляра EC2 в общедоступных подсетях в любом VPC. Есть ли способ добиться этого с помощью тегов подсети? Я знаю, как использовать теги ресурсов EC2 для управления доступом к ресурсам EC2, как в приведенном ниже фрагменте кода, но в моем случае мне нужно основывать его на тегах vpc или подсети. Есть ли что-то вроде условия vpc: ResourceTag, которое я мог бы использовать?

{
                "Effect" : "Allow",
                "Action" : "ec2:*",
                "Resource" : "*",
                "Condition" : {
                     "StringEquals" : {
                          "ec2:ResourceTag/UserName" : "${aws:username}"
                     }

введите здесь описание изображения


person gbaz    schedule 10.11.2017    source источник


Ответы (2)


Я не уверен, что вы имеете в виду под «тегами подсети», но не похоже, что вы можете использовать IAM для ограничения на основе типа подсети (например, общедоступная или частная). Это имеет смысл, поскольку вы можете легко изменить тип подсети, добавив или удалив маршруты.

Если вам нужно запретить некоторым пользователям выполнять действия с некоторыми экземплярами EC2, используйте теги на экземплярах EC2 и используйте правила разрешения или запрета на основе тегов. Из блог, объявляющий об этом:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "ec2:StartInstances",
        "ec2:StopInstances",      
        "ec2:RebootInstances",
    "ec2:TerminateInstances"
      ],
      "Condition": {
        "StringEquals": {
          "ec2:ResourceTag/critical":"true"
        }
      },
      "Resource": [
        "arn:aws:ec2:your_region:your_account_ID:instance/*"

      ],
      "Effect": "Deny"
    }
  ]
}

Чтобы сделать это немного более безопасным, не забудьте запретить возможность редактировать или удалять теги!

person chris    schedule 10.11.2017
comment
Мне нужно запретить определенным группам пользователей создавать экземпляры EC2 в общедоступных подсетях. В настоящее время все подсети получают тег имени, который указывает, является ли подсеть общедоступной или частной, следующим образом: subnet-CIDR-REGION-Type (например, 10.0.4.0-ap-southeast-2-Public) - person gbaz; 11.11.2017
comment
Вы можете заменить StringEquals на StringLike, изменить критическое на имя вашего тега и использовать значение, которое заканчивается на public. Если вы указываете тег subnet-CIDR-Region-type, а не значение, это не сработает. - person chris; 11.11.2017

@Chris Спасибо за совет, который сработал для меня: я использовал приведенный ниже оператор и не смог запустить экземпляр в моих помеченных общедоступных подсетях

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Condition": {
                "StringLike": {
                    "ec2:ResourceTag/Name": "*public*"
                }
            },
            "Action": [
                "ec2:Run*",
                "ec2:Terminate*",
                "ec2:Cancel*",
                "ec2:Create*",
                "ec2:Delete*",
                "ec2:Modify*",
                "ec2:Start*",
                "ec2:Stop*"
            ],
            "Resource": "arn:aws:ec2:ap-southeast-2:106625493890:subnet/*",
            "Effect": "Deny",
            "Sid": "DenyInstanceActionsForPublicSubnets"
        },
person gbaz    schedule 13.11.2017