AWS Lambda调用sts:AssumeRole遇AccessDenied错误排查
Lambda角色假设AccessDenied问题排查与修复
问题描述
在AWS Lambda中使用角色假设功能时,触发如下权限错误:
ClientError: An error occurred (AccessDenied) when calling the AssumeRole operation:
User: "..." is not authorized to perform: sts:AssumeRole on resource: "..."
当前使用的CloudFormation模板(template.yml)配置:
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Parameters: Role1: Type: String Resources: Function1: Type: 'AWS::Serverless::Function' Properties: Handler: core.lambda_function.lambda_handler Policies: - Statement: - Sid: AssumeRol Effect: Allow Action: - sts:AssumeRole Resource: '*' Environment: Variables: ROLE: !Ref Role1
Lambda Python代码片段:
role_arn = get_role_arn_from_env_parameter() assumed_role_object = sts_client.assume_role( RoleArn=role_arn, RoleSessionName="AssumeRoleSession")
补充的目标角色信任策略:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
问题原因与修复方案
1. 策略拼写小问题
模板中策略的Sid为AssumeRol(缺失末尾的'e'),虽不影响权限生效,但建议修正为AssumeRole以保证配置可读性。
2. 核心权限配置调整
当前Policies的配置位置是正确的,但需要同时确认两个关键环节:
- Lambda执行角色权限:确保
sts:AssumeRole权限精准指向目标角色ARN(避免使用Resource: '*',降低权限范围更安全)。修改后的策略片段:Policies: - Statement: - Sid: AssumeRole Effect: Allow Action: - sts:AssumeRole Resource: !Ref Role1 - 目标角色信任策略:当前信任策略允许所有Lambda服务角色假设该角色,若要限制到当前Lambda的执行角色,需将Principal修改为Lambda执行角色的ARN:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowSpecificLambdaRole", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::你的账号ID:role/你的Lambda执行角色名称" }, "Action": "sts:AssumeRole" } ] }
3. 验证步骤
- 重新部署更新后的CloudFormation模板,确保权限策略正确附加到Lambda执行角色。
- 登录IAM控制台,检查Lambda执行角色的权限列表,确认
sts:AssumeRole权限存在且Resource为目标角色ARN。 - 检查目标角色的信任策略,确认Principal包含Lambda执行角色ARN或
lambda.amazonaws.com(按需选择)。
内容的提问来源于stack exchange,提问作者Lucke
相关产品推荐
相关产品推荐

