我正在尝试为 IAM 角色设置权限,该角色将在需要时提交新的 Spot 实例请求。它将由 Lambda 函数使用。
该代码执行以下 AWS API 调用:
- ec2.describeSpotInstanceRequests
- ec2.requestSpotInstances
- ec2.createTags
我为其制定了以下策略(在尝试了很多其他选项之后......):
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1437749945000",
"Effect": "Allow",
"Action": [
"ec2:Describe*",
"ec2:RequestSpotInstances",
"ec2:RunInstances",
"ec2:CreateTags",
"iam:List*"
],
"Resource": [
"*"
]
}
]
}
如果我添加iam:*
它就会起作用,但显然我不想这样做。
有人能帮我猜一下它真正需要什么权限吗?有人知道 AWS API 调用和所有必需权限之间的映射吗?
答案1
ec2 API 函数和权限之间通常存在一一对应关系。因此,策略中的大部分内容都是没问题的。
您需要添加iam:PassRole
权限。这是因为您的现货请求可能正在为运行的新 EC2 实例提供 IAM 角色。
需要该iam:PassRole
权限是因为您的 lambda 角色可能会创建一个权限高于其自身权限的实例。这可能会导致危险的安全情况。因此需要此额外权限,并且通常将其限制为可以使用该Resource
属性分配的有限角色列表。