繁体   English   中英

如何在 dynamodb (aws-sdk javascript) 中使用代入角色凭证?

[英]How to use assume role credential in dynamodb (aws-sdk javascript)?

我已经让 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/ sequence_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,requestId:'A5CFV62P0TGHJH7VDIBSL0JRC3VV4KQNSO6QAEMV4KQNSO6QAEMV4KQNSO6QAEMV4KQNSO6QAEmv4KQNSO6QAEmvable,false重试延迟:5.013458338738063 }

``

如果我想使用 mfa 凭证,我想知道初始凭证的正确方法。

我猜这里的错误应该给你一个线索:

"The security token included in the request is invalid"

您是否尝试打印出环境价值

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)
})()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM