我想创建一个允许用户部署实例的 IAM 策略,如下所示:
- 他们只能使用 1 个 AMI
- 他们只能部署到 1 个特定的 VPC 子网
- 他们只能使用 1 个特定的 VPC 安全组
此场景在此处的 VPC 文档中得到解决(示例 4):
http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_IAM.html#subnet-sg-example-iam
我已经尝试过我自己的政策版本:
{
"Version": "2012-10-17",
"Statement":[{
"Effect":"Allow",
"Action": "ec2:RunInstances",
"Resource": [
"arn:aws:ec2:eu-west-1:937821706121:image/ami-141ac363",
"arn:aws:ec2:eu-west-1:937821706121:subnet/subnet-733de516",
"arn:aws:ec2:eu-west-1:937821706121:network-interface/*",
"arn:aws:ec2:eu-west-1:937821706121:volume/*",
"arn:aws:ec2:eu-west-1:937821706121:key-pair/*",
"arn:aws:ec2:eu-west-1:937821706121:security-group/sg-4aa80f2f"
]
}]
}
它不起作用。当我尝试将实例部署为应用此策略的组的成员时,我的权限被拒绝。我需要包含其他一些策略以允许以这种方式部署实例吗?
基本上,当涉及到设置全局管理或只读策略之外的任何事情时,IAM 文档是完全不可靠的。
这是我最终开始工作的策略(至少对于子网位):
这需要大量的试验和错误。
基本上,当您想根据特定资源限制用户时,您需要创建一个语句,首先拒绝运行实例的能力,除非特定 arn 资源满足条件,然后最后允许它们执行任何操作。
更新:
亚马逊承认他们的文档不准确:
https://forums.aws.amazon.com/thread.jspa?threadID=160287&tstart=0
您实际上无法基于 VPC 做到这一点。AWS 不支持针对资源级别权限的 EC2-Describe* API 操作。相反,您可以基于安全组上的单个 VPC 应用类似的东西,如下所示:
您可以根据需要更改 EC2 操作。