Назад | Перейти на главную страницу

Можно ли ограничить доступ консоли EC2 к компьютерам в определенном VPC через IAM?

Я хотел бы создать пользователя с полным консольным доступом (в том числе и API) только к одному VPC в нашей среде AWS.

Результат должен быть таким, чтобы при нажатии на экземпляры EC2 пользователь видел только машины в указанном VPC.

Я попытался сделать следующее, и это не сработало:

{
  "Statement": [
    {
      "Sid": "Stmt1393948025170",
      "Action": "ec2:*",
      "Effect": "Allow",
      "Resource": "arn:aws:ec2:*:*:vpc/<vpc-id>"
    }
  ]
}

Получил обратно от службы поддержки Amazon:

К сожалению, в настоящее время это невозможно сделать. Хотя сейчас мы предлагаем разрешения на уровне ресурсов для ресурсов EC2 (подробнее здесь ... http://aws.typepad.com/aws/2013/07/resource-permissions-for-ec2-and-rds-resources.html) условное управление доступом на основе указанного VPC не поддерживается.

Они упомянули, что это потому, что эта ссылка: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-policies-for-amazon-ec2.html#ec2-supported-iam-actions-resources показывают, что поддерживается ограниченное количество действий API EC2, и ни одно из них не поддерживает VPC в качестве ARN.

Также существует ограничение на «ec2: Describe *», которое вообще не может быть указано ресурсным ARN и не может контролироваться условно.

Существует обходной путь с использованием условного оператора ResourceTag / tag-key, который можно использовать для большинства вызовов API. Таким образом, вы потенциально можете пометить свои экземпляры с помощью «Control»: «Allow» и не включать права на создание или удаление тегов в политику, которая будет прикреплена к соответствующему пользователю. Ваша политика будет выглядеть так:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ec2:Describe*",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:StartInstances",
                "ec2:StopInstances",
                "ec2:RebootInstances",
                "ec2:TerminateInstances"
            ],
            "Resource": "arn:aws:ec2:REGION:ACCOUNTNUMBER:instance/*",
            "Condition": {
                "StringEquals": {
                    "ec2:ResourceTag/Control": "Allow"
                }
            }
        }
    ]
}

Затем вы можете ограничить пользователя запуском экземпляра только в конкретном VPC, используя его subnet-id:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ec2:RunInstances",
            "Resource": [
                "arn:aws:ec2:region:account:instance/*",
                "arn:aws:ec2:region:account:subnet/SUBNET-ID-HERE",
                "arn:aws:ec2:region:account:volume/*",
                "arn:aws:ec2:region:account:network-interface/*",
                "arn:aws:ec2:region:account:key-pair/*",
                "arn:aws:ec2:region:account:security-group/*",
                "arn:aws:ec2:region::image/ami-*"
            ]
        }
    ]
}

Надеюсь это поможет.