Я хотел бы создать пользователя с полным консольным доступом (в том числе и 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-*"
]
}
]
}
Надеюсь это поможет.