Как использовать учетные данные предполагаемой роли в DynamodB (Javascript aws-SDK)?
У меня уже есть aws, предполагается, что учетные данные роли находятся в файле.aws / credetials. Как использовать его для создания STS или DynamodB, как:
const { DynamoDB } = require('aws-sdk');
const { DocumentClient } = DynamoDB;
const dynamo = new DynamoDB({
endpoint: process.env.AWS_ENDPOINT,
region: process.env.AWS_REGION,
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
secretToken: process.env.aws_security_token
});
Я имею в виду, я получил ошибку как:
root@myubuntu:~/work/contacts_api# node ./seed/runner.js
`` `
Проверка наличия таблицы контактов { UnrecognizedClientException: маркер безопасности, включенный в запрос, недействителен. в Request.extractError (/root/work/contacts_api/node_modules/aws-sdk/lib/protocol/json.js:51:27) в Request.callListeners (/root/work/contacts_api/node_modules/aws-sdk/lib/sequential_executor.js:106:20) в Request.emit (/root/work/contacts_api/node_modules/aws-sdk/lib/sequential_executor.js:78:10) в Request.emit (/root/work/contacts_api/node_modules/aws-sdk/lib/request.js:683:14) в Request.transition (/root/work/contacts_api/node_modules/aws-sdk/lib/request.js:22:10) в AcceptorStateMachine.runTo (/root/work/contacts_api/node_modules/aws-sdk/lib/state_machine.js:14:12) по адресу /root/work/contacts_api/node_modules/aws-sdk/lib/state_machine.js:26:10 по запросу. (/root/work/contacts_api/node_modules/aws-sdk/lib/request.js:38:9) по запросу. (/root/work/contacts_api/node_modules/aws-sdk/lib/request.js:685:12) в Request.callListeners (/root/work/contacts_api/node_modules/aws-sdk/lib/sequential_executor.js:116:18) сообщение: "Маркер безопасности, включенный в запрос, является недействительным.", Код: "UnrecognizedClientException", время: 2019-01-07T05:39:54.907Z, идентификатор запроса: "A5CFV62P0TGHJH7VDIBSL0JRC3VV4KQNSO5AEMVJF66Q9 40000, статус: ложный: код возврата: ложный: retryDelay: 5.013458338738063}
`` `
Я хочу знать правильный путь к начальным учетным данным, если я хочу использовать учетные данные mfa.
2 ответа
Я предполагаю, что ошибка здесь должна дать вам подсказку:
"Маркер безопасности, включенный в запрос, недействителен"
Вы пытались распечатать значение среды
env | grep aws_security_token
Если он пуст, вам придется установить значение до запуска вашего кода.
Кроме того, я заметил, что все остальные ключи aws имеют заглавные буквы, а aws_security_token - строчные.
Я подозреваю
secretToken
не вещь. Вот два примера того, как это можно сделать (как я делал это раньше).
Тем не менее, я бы поощрял создание и использование
Credentials
везде, где это возможно (второй пример), но если вы хотите сделать это встроенным, это тоже должно сработать.
/** assume a role and build a DocumentClient object to make a single scan **/
;(async () => {
const sts = new AWS.STS()
const assumeRole = await sts
.assumeRole({
RoleArn: process.env.ROLE_ARN,
RoleSessionName: process.env.ROLE_SESSION_NAME,
})
.promise()
const dynamodb = new AWS.DynamoDB.DocumentClient({
region: process.env.REGION,
credentials: {
accessKeyId: assumeRole.Credentials?.AccessKeyId,
secretAccessKey: assumeRole.Credentials?.SecretAccessKey,
sessionToken: assumeRole.Credentials?.SessionToken,
},
})
const scan = await dynamodb
.scan({
TableName: process.env.TABLE_NAME,
})
.promise()
console.log(scan)
})()
/**
* assume a role and build a Credentials object and use it
* to build a DocumentClient object to make a single scan
**/
;(async () => {
const sts = new AWS.STS()
const assumeRole = await sts
.assumeRole({
RoleArn: process.env.ROLE_ARN,
RoleSessionName: process.env.ROLE_SESSION_NAME,
})
.promise()
const credentials = new AWS.Credentials({
accessKeyId: assumeRole.Credentials?.AccessKeyId,
secretAccessKey: assumeRole.Credentials?.SecretAccessKey,
sessionToken: assumeRole.Credentials?.SessionToken,
})
const dynamodb = new AWS.DynamoDB.DocumentClient({
region: process.env.REGION,
credentials: credentials,
})
const scan = await dynamodb
.scan({
TableName: process.env.TABLE_NAME,
})
.promise()
console.log(scan)
})()