DynamoDB «Запрошенный ресурс не найден» для доступа к перекрестной учетной записи AWS - PullRequest
1 голос
/ 05 марта 2019

Допустим, у нас есть две учетные записи aws, имена учетных записей devo и prod . Итак, на prod у меня есть таблица dynamoDB, к которой я хочу получить доступ, используя функцию lambda, присутствующую в devo . Теперь я создал политику в prod , которая дает полный доступ к dynamoDB, и прикрепил эту политику к учетной записи role в prod, которая делает devo доверенной учетной записью. , В devo я создал роль с полным доступом lambda , а также со встроенной политикой, которая позволяет принимать role из prod . Кроме того, я могу получить данные из dynamoDB с помощью консоли aws через роль предположения в devo учетной записи.

Ниже 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
  }

Спасибо

1 Ответ

0 голосов
/ 15 марта 2019

Я думаю, что ваш код собирает клиент Dynamodb до завершения вызова sts, поскольку AWS SDK для JavaScript является асинхронным. Я думаю, что вы можете проверить это, добавив длинную команду сна, чтобы посмотреть, заставит ли это начать работать. Как только вы определите, является ли это проблемой, эта страница из AWS поможет вам изменить код для правильной работы

https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/calling-services-asynchronously.html

...