AWS Lambda函数部署失败:需配置何种CloudFormation权限策略?
解决Serverless部署时的CloudFormation权限问题
嘿,这个问题我碰到过好几次了——Serverless Framework底层依赖CloudFormation来编排你的Lambda和相关资源,所以当你跑serverless deploy时,它会尝试更新对应的CloudFormation栈,而你的IAM用户刚好缺了cloudformation:UpdateStack权限,这才报了错。
下面给你两种权限配置方案,按需选择:
最小权限策略(推荐生产环境)
如果你想遵循最小权限原则,可以精准限定权限到报错里的那个CloudFormation栈ARN,同时补充部署流程必需的配套权限:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudformation:UpdateStack", "cloudformation:DescribeStacks", "cloudformation:DescribeStackEvents", "cloudformation:GetTemplate" ], "Resource": "arn:aws:cloudformation:ap-south-1:你的AWS账号ID:stack/你的Serverless栈名/*" }, // Lambda相关操作权限,根据你的服务调整 { "Effect": "Allow", "Action": [ "lambda:CreateFunction", "lambda:UpdateFunctionCode", "lambda:UpdateFunctionConfiguration", "lambda:GetFunction" ], "Resource": "arn:aws:lambda:ap-south-1:你的AWS账号ID:function:你的Lambda函数名*" }, // Serverless创建/更新IAM执行角色所需权限 { "Effect": "Allow", "Action": [ "iam:PassRole", "iam:GetRole", "iam:CreateRole", "iam:AttachRolePolicy", "iam:PutRolePolicy" ], "Resource": "arn:aws:iam::你的AWS账号ID:role/你的Serverless执行角色名*" } ] }
通用权限策略(适合开发环境)
如果是开发环境,不想太细粒度地配置,可以用更宽泛的权限(生产环境严禁使用):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudformation:*", "lambda:*", "iam:PassRole", "iam:GetRole", "iam:CreateRole", "iam:AttachRolePolicy", "iam:PutRolePolicy" ], "Resource": "*" } ] }
额外提醒
- 记得把策略里的
你的AWS账号ID、你的Serverless栈名等占位符替换成实际值。 - 如果是首次部署(之前没创建过这个CloudFormation栈),还要加上
cloudformation:CreateStack权限,否则会触发类似的权限报错。 - AWS托管的
AWSLambdaFullAccess和CloudFormationFullAccess策略也能解决问题,但权限过于宽泛,只适合临时测试用。
内容的提问来源于stack exchange,提问作者Dnyanesh
相关产品推荐
相关产品推荐

