You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过AWS CDK为Lambda授予DynamoDB表的读写权限?

问题解决:AWS CDK中Lambda访问DynamoDB权限配置错误

错误原因

table.grantReadWriteData()方法的参数要求是IGrantable类型对象(即拥有IAM角色的资源,比如Lambda函数的执行角色),而非直接传入PolicyStatement对象。你提供的代码混淆了权限授予的正确方式,导致类型不匹配错误。

正确实现方式

方式一:使用CDK内置grant方法(推荐)

CDK提供了封装好的权限授予方法,会自动处理IAM角色的权限添加,无需手动创建PolicyStatement。只需将需要授权的Lambda函数传入grantReadWriteData即可:

// 创建DynamoDB表(保持原有配置)
const table = new dynamodb.Table(scope, utils.prefixed('stable-diffusion'), {
    partitionKey: { name: 'ID', type: dynamodb.AttributeType.STRING },
    billingMode: dynamodb.BillingMode.PAY_PER_REQUEST,
    removalPolicy: cdk.RemovalPolicy.DESTROY,
    tableName: utils.prefixed('stable-diffusion'),
});

// 定义你的CRUD Lambda函数(示例配置)
const crudLambda = new lambda.Function(scope, utils.prefixed('crud-handler'), {
    runtime: lambda.Runtime.NODEJS_18_X,
    handler: 'index.handler',
    code: lambda.Code.fromAsset('lambda'), // 替换为你的Lambda代码路径
});

// 直接给Lambda授予表的读写权限
table.grantReadWriteData(crudLambda);

方式二:手动创建权限并附加到Lambda角色

如果需要更精细的权限控制(比如仅允许特定DynamoDB操作),可以手动创建PolicyStatement,再将其附加到Lambda的执行角色上:

// 创建DynamoDB表(同上)
const table = new dynamodb.Table(scope, utils.prefixed('stable-diffusion'), {
    partitionKey: { name: 'ID', type: dynamodb.AttributeType.STRING },
    billingMode: dynamodb.BillingMode.PAY_PER_REQUEST,
    removalPolicy: cdk.RemovalPolicy.DESTROY,
    tableName: utils.prefixed('stable-diffusion'),
});

// 定义Lambda函数
const crudLambda = new lambda.Function(scope, utils.prefixed('crud-handler'), {
    runtime: lambda.Runtime.NODEJS_18_X,
    handler: 'index.handler',
    code: lambda.Code.fromAsset('lambda'),
});

// 创建自定义权限语句
const dynamoDbPolicy = new iam.PolicyStatement({
    effect: iam.Effect.ALLOW,
    actions: ['dynamodb:GetItem', 'dynamodb:PutItem', 'dynamodb:DeleteItem'],
    resources: [table.tableArn],
});

// 将权限附加到Lambda的执行角色
crudLambda.addToRolePolicy(dynamoDbPolicy);

两种方式对比

  • 方式一:CDK自动生成符合最佳实践的权限,覆盖所有读写操作,代码简洁高效。
  • 方式二:适合需要严格控制权限粒度的场景,仅开放必要的DynamoDB动作。

内容的提问来源于stack exchange,提问作者sak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 22:07:34