使用AWS CDK创建Lambda函数时遭遇403权限错误求助
解决CDK部署Lambda时的403权限错误
问题根源
你手动创建了CloudFormation角色,但CDK部署时默认使用自动生成的cdk-hnb659fds-cfn-exec-role角色,这个默认角色没有lambda:CreateFunction权限,导致部署失败。你创建的example-iam-role因为没被指定为CDK的执行角色,所以未生效。另外你的代码还存在IAM模块未导入的问题,会导致编译报错。
解决方案
方案1:给CDK默认执行角色添加权限
- 登录AWS IAM控制台,搜索错误信息里的角色名:
cdk-hnb659fds-cfn-exec-role-xxxx-ap-south-1 - 进入该角色的权限页面,点击「添加权限」→「附加策略」
- 搜索并附加
AWSLambda_FullAccess管理策略(若需最小权限,可自定义策略仅包含lambda:CreateFunction、lambda:GetFunction、lambda:TagResource等必要动作) - 重新运行
cdk deploy --profile myprofile
方案2:指定CDK使用自定义角色部署
先修复代码的IAM导入问题,再指定执行角色:
- 修改
lib/api_lamda-stack.ts的导入部分,补全IAM模块:
import * as cdk from 'aws-cdk-lib'; import { Construct } from 'constructs'; import { Code, Function as LamdaFunction, Runtime } from 'aws-cdk-lib/aws-lambda'; import { join } from 'path'; import * as iam from 'aws-cdk-lib/aws-iam'; // 补全IAM模块导入
- 调整代码结构,将自定义角色传入Stack构造参数:
export class ApiLamdaStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { // 先创建自定义CloudFormation执行角色 const cfnExecRole = new iam.Role(this, 'example-iam-role', { assumedBy: new iam.ServicePrincipal('cloudformation.amazonaws.com'), managedPolicies: [ iam.ManagedPolicy.fromAwsManagedPolicyName( 'AWSLambda_FullAccess', ), ], }); // 调用父类构造时指定执行角色 super(scope, id, { ...props, cloudFormationExecutionRole: cfnExecRole, }); const helloLamda = new LamdaFunction(this, 'helloLamda', { runtime: Runtime.NODEJS_16_X, code: Code.fromAsset(join(__dirname, '..', 'services', 'hello')), handler: 'hello.main' }); } }
- 重新运行
cdk synth和cdk deploy --profile myprofile
额外提示
- 若仅需创建简单Lambda,CDK会自动为Lambda生成运行所需的执行角色,无需手动创建,除非有特殊权限需求。
- 尽量遵循最小权限原则,避免直接使用
AWSLambda_FullAccess,可根据实际需求创建自定义IAM策略。
内容的提问来源于stack exchange,提问作者karthik_personal
相关产品推荐
相关产品推荐

