【发布时间】:2021-07-26 20:15:45
【问题描述】:
假设我们有两个 aws 帐户,帐户名称是 devo 和 prod。所以在 prod 我有一个 dynamoDB 表,我想使用 devo 中存在的 lambda 函数来访问它。
现在我所做的是在 prod 中创建一个策略,该策略提供对 dynamoDB 的完全访问权限,并将该策略附加到 prod 帐户中的 role 中,这使得 devo 为受信任的帐户。
在 devo 中,我创建了一个具有 lambda 完全访问权限的角色,并附加了一个内联策略,该策略允许承担 prod 的 role >。
此外,我可以通过在 devo 帐户中担任角色,使用 aws 控制台从 dynamoDB 获取数据。
下面是lambda函数:
const AWS = require('aws-sdk');
var cred = new AWS.CredentialProviderChain();
var sts = new AWS.STS({credentials: cred, region: 'us-east-1'});
var crd2 ;
var params = {
RoleArn: "arn:aws:iam::123456789012:role/crossAccount",
RoleSessionName: "atul"
};
sts.assumeRole(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else {
crd2 = data; // successful response
console.log("Role assured");
}
});
const dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10', credentials: crd2, region: 'eu-west-1', endpoint: 'https://dynamodb.eu-west-1.amazonaws.com'});
exports.handler = (event, context, callback) => {
console.log(crd2);
console.log("**** " + JSON.stringify(dynamodb));
dynamodb.getItem({
TableName: "Testing",
Key: {
"Id": {
S: "1121091591"
}
}
}, function(err, data) {
if (err) {
console.log(err, err.stack);
callback(null, {
statusCode: '500',
body: err
});
} else {
console.log(data);
callback(null, {
statusCode: '200',
body: 'Hello '
});
}
})
};
这是我得到的错误:
{
"message": "Requested resource not found",
"code": "ResourceNotFoundException",
"time": "2019-03-05T17:54:35.920Z",
"requestId": "LAN0EI8B2I6I4CVI4OUH01MI3JVV4KQNSO5AEMVJF66Q9ASUAAJG",
"statusCode": 400,
"retryable": false,
"retryDelay": 11.869537309323096
}
谢谢
【问题讨论】:
-
你是如何解决这个问题的?我也面临着类似的问题
-
@TheDominus 这是由于异步调用,我在 STS 返回凭据之前调用 ddb
标签: node.js amazon-web-services aws-lambda amazon-dynamodb amazon-iam