
Я просмотрелофициальные документыи, похоже, не удалось найти никаких ссылок на то, какие разрешения необходимы пользователю IAM для использования этой команды.
Я хочу, чтобы пользователь IAM мог создавать изображения только для этого конкретного экземпляра, поэтому я настроил политику следующим образом:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt999",
"Effect": "Allow",
"Action": [
"ec2:CreateImage"
],
"Effect": "Allow",
"Resource": [
"arn:aws:ec2:us-east-1:<my account id>:instance/<my instance id>"
]
}
]
}
Но я продолжал получать ошибки Access Denied при использовании EC2 CLI. Я изменил часть Resource
на just "*"
и теперь это работает, но теперь мой пользователь IAM может создавать AMI (следовательно, вызывать перезагрузки) для любых экземпляров EC2 в моей учетной записи.
Как я могу это заблокировать?
решение1
К сожалению, на данный момент вы не можете заблокировать это на уровне ресурсов. Естькуча действий EC2который не поддерживает разрешения на уровне ресурсов и ec2:CreateImage
является одним из них.
решение2
Создание образа также подразумевает создание снимков, прикрепленных к этому экземпляру. Ниже политика IAM должна работать.
{
"Effect": "Allow",
"Action": [
"ec2:Describe*",
"ec2:CreateSnapshot",
"ec2:CreateImage"
],
"Resource": [
"*"
]
}
решение3
Вы не можете заблокировать/ограничить CreateImage на уровне ресурсов, и ответ @nkryption был правильным. http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ec2-api-permissions.html
решение4
CreateImage теперь поддерживает политики уровня ресурсов. Следующая политика позволяет создать образ, но только для указанного идентификатора экземпляра:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowCreateImage",
"Effect": "Allow",
"Action": "ec2:CreateImage",
"Resource": "arn:aws:ec2:*::image/*"
},
{
"Sid": "RestrictCreateImageToInstance",
"Effect": "Allow",
"Action": "ec2:CreateImage",
"Resource": "arn:aws:ec2:*:999999999999:instance/i-999999999",
}
]
}
Обновите номер учетной записи и идентификатор экземпляра в соответствии с вашими требованиями. Вы также можете ограничить это на основе тегов экземпляра:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowCreateImage",
"Effect": "Allow",
"Action": "ec2:CreateImage",
"Resource": "arn:aws:ec2:*::image/*"
},
{
"Sid": "RestrictCreateImageToInstances",
"Effect": "Allow",
"Action": "ec2:CreateImage",
"Resource": "arn:aws:ec2:*:999999999999:instance/*",
"Condition": {
"StringEquals": {
"ec2:ResourceTag/Name": "Test"
}
}
}
]
}