AWS SAM部署的Lambda无法获取角色权限访问DynamoDB
Lambda无法执行DynamoDB PutItem操作的原因及解决办法
问题背景
部署包含Lambda的AWS SAM模板时,传入了现有DynamoDB表的ARN作为myTable参数,但调用API时触发权限错误:
User: arn:aws:sts::XXXXXXXXXX:assumed-role/APP_ROLE/LAMBDA_APP
is not authorized to perform: dynamodb:PutItem on resource:
arn:aws:dynamodb:eu-central-1:XXXXXXXXXX:table/TABLE_NAME because no
identity-based policy allows the dynamodb:PutItem action
核心原因
SAM模板中使用的DynamoDBCrudPolicy内置策略,其TableName参数要求传入纯表名(如TABLE_NAME),而非完整的表ARN。当你传入ARN时,IAM策略生成的资源路径会变成错误格式:arn:aws:dynamodb:region:account:table/[传入的ARN],导致权限规则无法匹配实际的DynamoDB表资源,最终触发权限拒绝。
解决方案
两种修复方式任选其一即可:
方式1:修改参数传入值
将部署时传入的myTable参数值从完整ARN改为纯表名,例如:
TABLE_NAME
方式2:自定义IAM策略替代内置策略
如果需要保留传入ARN的方式,替换模板中的DynamoDBCrudPolicy为自定义语句,直接引用ARN作为资源:
Policies: - Statement: - Effect: Allow Action: - dynamodb:PutItem - dynamodb:GetItem - dynamodb:UpdateItem - dynamodb:DeleteItem Resource: !Ref myTable
验证步骤
修改完成后重新部署SAM模板,再次调用API即可验证权限是否正常生效。
内容的提问来源于stack exchange,提问作者Rubén Aguado
相关产品推荐
相关产品推荐

