我浏览了官方文档并且似乎找不到任何关于 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>"
]
}
]
}
但是使用 EC2 CLI 时,我不断收到“访问被拒绝”错误。我将该Resource
部分更改为仅此"*"
而已,现在它可以正常工作,但现在我的 IAM 用户可以为我的帐户中的任何 EC2 实例创建 AMI(因此导致重新启动)。
我怎样才能锁定它?
答案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 现在支持资源级策略。以下策略允许创建映像,但仅限于指定的实例 ID:
{
"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",
}
]
}
更新帐号和实例 ID 以满足您的要求。您还可以根据实例标签进行限制:
{
"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"
}
}
}
]
}