如何解决用户无权执行:dynamodb:从本地lambda函数访问数据库时查询资源错误
我正在尝试使用带有运行时node.js的SAM模板在本地运行新创建的lambda函数。 我有以下内容:
a)具有区域,accessKeyId和secretAccessKey的AWS帐户 b)aws-cli,aws-sam,docker
使用sam本地调用在本地运行lambda函数很好,但是问题是当我以前在函数中连接到dynamodb时,出现以下错误。
{"message":"User: arn:aws:iam::*********:user/test.user is not authorized to perform: dynamodb:Query on resource: arn:aws:dynamodb:us-west-2:********:table/my_table with an explicit deny","code":"AccessDeniedException","time":"2020-08-30T07:45:51.678Z","requestId":"7SIBTHTKDSSDJNSTLNUSSBHDNDHBSMVJF66Q9ASUAAJG","statusCode":400,"retryable":false,"retryDelay":40.84164538820391}
我有权访问aws帐户,并且具有accessKeyId和secretAccessKey,并且可以在从aws控制台尝试时进行查询。在vscode编辑器中,安装了aws-toolkit并添加了凭据,但是仍然在本地遇到相同的错误。
有人在寻找解决方案时遇到困难,可以帮助我解决这个问题。 这是我的代码段。
let response;
const AWS = require('aws-sdk');
AWS.config.update({
region: "us-west-2",accessKeyId: '************',secretAccessKey: '********************'
});
const dbClient = new AWS.DynamoDB.DocumentClient();
exports.lambdaHandler = async (event,context) => {
try {
let myTable = await getData(event.myId);
response = {
'statusCode': 200,'body': JSON.stringify({
message: myTable
})
}
} catch (err) {
console.log(err);
return err;
}
return response
};
const MY_TABLE_NAME = "my_table";
const getData = async (myId) => {
const params = {
TableName: MY_TABLE_NAME,KeyConditionExpression: "#uid = :id",ExpressionAttributeValues: {
':id': myId
},ExpressionAttributeNames: {
'#uid': 'userID'
}
};
let { Count,Items } = await dbClient.query(params).promise();
if (Items.length == 0) {
return false;
} else {
var obj = {
Name: (Count > 0) ? Items[0].name : null,MY_TABLE: MY_TABLE
};
return obj;
}
};
template.yaml
Resources:
HelloWorldFunction:
Type: AWS::Serverless::Function # More info
Properties:
CodeUri: hello-world/
Handler: app.lambdaHandler
Runtime: nodejs12.x
Policies: AmazonDynamoDBFullAccess
Events:
HelloWorld:
Type: Api # More info
Properties:
Path: /hello
Method: get
任何帮助将不胜感激。预先感谢。
解决方法
我得到用户未授权错误的原因是因为我没有编程访问权限,而仅被授权访问AWS控制台访问权限。
谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。