已为Lambda附加全DynamoDB权限角色,为何仍需grantReadWriteData?
关于Lambda与DynamoDB授权的疑问解答
首先明确:不存在所谓的「双向授权」,你看到的两种写法本质都是在给Lambda的执行角色添加IAM权限,示例里的代码属于重复操作,完全没必要同时写。
两种写法的本质
- 你手动创建
GoalsPolicy并附加到dynamoDbRole:这是直接给Lambda的执行角色添加了对goalsTable的全量DynamoDB操作权限(dynamodb:*),从IAM主体(Lambda)的角度授予了它操作该表的资格。 goalsTable.grantReadWriteData(functionUpdateGoal):这是AWS CDK提供的语法糖,底层逻辑自动给Lambda的执行角色添加了读写DynamoDB表所需的具体权限(比如dynamodb:GetItem、dynamodb:PutItem、dynamodb:UpdateItem等),和手动写PolicyStatement的效果完全一致,并不是让「表给Lambda授权」。
为什么示例里同时写了两种?
这是冗余操作,二选一即可:
- 如果已经手动给角色加了
dynamodb:*的全量权限,再调用grantReadWriteData只会重复添加部分权限,没有任何额外作用。 - 反过来,用
grantReadWriteData可以不用手动写Policy,CDK会帮你生成更贴合需求的最小权限(而不是全量的dynamodb:*),更符合权限最小化原则。
是不是所有资源都要这么做?
不是,这只是CDK为了简化开发提供的便捷方法。比如操作S3时,bucket.grantRead(lambdaFn)也是同样的逻辑——本质都是给Lambda的执行角色添加对应的IAM权限,而非资源本身单独授权。DynamoDB、S3这类AWS服务的访问控制都是通过IAM统一管理的,资源本身不需要额外给主体授权。
内容的提问来源于stack exchange,提问作者Danny Shen
相关产品推荐
相关产品推荐

