如何通过AWS CDK为Lambda函数添加AWSStepFunctionsFullAccess托管策略
在AWS CDK中为Lambda添加AWSStepFunctionsFullAccess托管策略
要替换手动定义的权限策略,直接给Lambda的执行角色添加AWS托管策略AWSStepFunctionsFullAccess即可,具体实现分两种场景:
场景1:Lambda使用自定义创建的角色
如果你手动创建了Lambda的执行角色,直接给该角色添加托管策略:
import * as cdk from 'aws-cdk-lib'; import * as lambda from 'aws-cdk-lib/aws-lambda'; import * as iam from 'aws-cdk-lib/aws-iam'; import { Construct } from 'constructs'; export class YourStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // 1. 创建Lambda执行角色 const lambdaRole = new iam.Role(this, 'MachineLambdaRole', { assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com'), // 可添加Lambda基础日志权限 managedPolicies: [ iam.ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSLambdaBasicExecutionRole') ] }); // 2. 添加AWSStepFunctionsFullAccess托管策略 lambdaRole.addManagedPolicy( iam.ManagedPolicy.fromAwsManagedPolicyName('AWSStepFunctionsFullAccess') ); // 3. 创建Lambda并关联该角色 const MachineLambda = new lambda.Function(this, 'MachineLambda', { runtime: lambda.Runtime.NODEJS_20_X, code: lambda.Code.fromAsset('path/to/your/lambda/code'), handler: 'index.handler', role: lambdaRole }); } }
场景2:Lambda使用自动生成的角色
如果创建Lambda时未指定自定义角色,CDK会自动生成执行角色,此时通过Lambda实例的role属性获取角色并添加托管策略:
import * as cdk from 'aws-cdk-lib'; import * as lambda from 'aws-cdk-lib/aws-lambda'; import * as iam from 'aws-cdk-lib/aws-iam'; import { Construct } from 'constructs'; export class YourStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // 创建Lambda函数(自动生成执行角色) const MachineLambda = new lambda.Function(this, 'MachineLambda', { runtime: lambda.Runtime.NODEJS_20_X, code: lambda.Code.fromAsset('path/to/your/lambda/code'), handler: 'index.handler' }); // 给自动生成的角色添加托管策略 MachineLambda.role?.addManagedPolicy( iam.ManagedPolicy.fromAwsManagedPolicyName('AWSStepFunctionsFullAccess') ); } }
注意事项
- 删除你之前手动定义
PolicyStatement并调用addToRolePolicy的代码,避免权限重复。 - 确保已导入
aws-cdk-lib/aws-iam模块,否则无法使用ManagedPolicy相关API。 - 可选链操作符
?.用于处理自动生成角色可能为undefined的情况,若确认角色一定存在,也可直接调用MachineLambda.role.addManagedPolicy(...)。
内容的提问来源于stack exchange,提问作者ReactNewbie123
相关产品推荐
相关产品推荐

