以IAM用户创建Lambda函数遇iam:CreatePolicy权限错误,缺少什么配置?
解决IAM用户创建Lambda时的iam:CreatePolicy权限错误
这个问题我之前帮同事排查过,本质是Lambda控制台自动创建执行角色时,你的IAM用户没有足够的IAM权限来完成策略和角色的创建流程。下面给你几种可行的解决思路:
1. 给IAM用户添加必要的IAM权限(推荐最小权限)
当你在Lambda控制台选择"创建新角色"时,Lambda会自动帮你完成三件事:创建IAM角色、创建对应的执行策略(就是你报错里的AWSLambdaBasicExecutionRole系列)、把策略附加到角色上。所以你的用户需要这几个关键权限:iam:CreatePolicy、iam:CreateRole、iam:AttachRolePolicy,还有后续Lambda调用需要的iam:PassRole。
你可以创建一个自定义IAM策略,然后附加到这个用户(或者所属用户组),示例策略如下(记得替换你的AWS账号ID):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:CreatePolicy", "iam:CreateRole", "iam:AttachRolePolicy", "iam:PassRole" ], "Resource": [ "arn:aws:iam::123334324324234:policy/AWSLambdaBasicExecutionRole*", "arn:aws:iam::123334324324234:role/AWSLambdaBasicExecutionRole*" ] } ] }
用*通配符是因为Lambda如果发现基础名称的策略已存在,会自动加UUID后缀(就是你报错里的e3e28520-4b65-439e-a006-24de73479562),这样能覆盖两种情况。
2. 提前手动创建好Lambda执行角色(无需修改用户权限)
如果你的权限管控比较严格,不想给用户IAM创建权限,可以提前在IAM控制台手动建好执行角色:
- 进入IAM控制台,点击"角色" > "创建角色"
- 信任实体类型选择"AWS服务",然后选"Lambda",点击下一步
- 搜索并附加AWS托管的
AWSLambdaBasicExecutionRole策略(这个是AWS预定义的,不用自己创建) - 完成角色创建,记住角色名称
- 回到Lambda创建页面,选择"使用现有角色",选中你刚创建的角色即可
3. 注意权限的最小化原则
如果是企业环境,尽量避免给用户*资源范围的权限,比如上面的示例里只限定了AWSLambdaBasicExecutionRole前缀的策略和角色,这样用户只能创建Lambda相关的执行策略,不会有过度授权的风险。
内容的提问来源于stack exchange,提问作者Pand005




