簡體   English   中英

AWS SDK v3 擔任客戶端角色

[英]AWS SDK v3 Assume role for a client

我正在使用 AWS JS SDK v3 編寫一個 Node JS 應用程序。 我正確地使用 STS 承擔角色並檢索憑據。 假設呼叫響應是這樣的:

{
    "$metadata": {
        "httpStatusCode": 200,
        "requestId": "xxx",
        "attempts": 1,
        "totalRetryDelay": 0
    },
    "Credentials": {
        "AccessKeyId": "xxx",
        "SecretAccessKey": "xxx",
        "SessionToken": "xxx",
        "Expiration": "2021-02-26T15:40:17.000Z"
    },
    "AssumedRoleUser": {
        "AssumedRoleId": "xxx",
        "Arn": "arn:aws:sts::xxx"
    }
}

我正在獲取憑據並將它們傳遞給 DynamoDBClient 構造函數(連同區域)。

import { DynamoDBClient, ListTablesCommand } from '@aws-sdk/client-dynamodb';

public getTablesList(region: string) {
  const credentials = await getCredentialsFromSTS(region);
  const clientParams = Object.assign(credentials, region); // This just merges two JSONs into one
  const dbClient = new DynamoDBClient(clientParams);
  const command = new ListTablesCommand({});
  const response = await dbClient.send(command);
  console.log(response);
}

我在響應中得到的只是運行我的代碼的帳戶表的列表。 我擔任該角色的帳戶中的表不存在。 也許我錯誤地扮演了這個角色? 我試圖 package “憑據”鍵中的憑據,但這也無濟於事。

const clientParams = Object.assign({ Credentials: credentials }, region);

知道我在這里做錯了什么嗎? 也許 DDBClient 沒有像它應該的那樣假設它,但是有沒有辦法檢查 DBClient 的假設角色? 我在文檔中找到了一個名為 RoleInfo 的命名空間,但我不知道如何調用它。

請閱讀 DynamoDBClient 參數 object 的文檔: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html#constructor-property

憑證字段是小寫的,而在 STS 結果中它們是大寫的。

您的代碼中還有更多錯誤,例如Object.assign(credentials, region); 稱呼。 這里的region是一個string ,因此通過將其分配給credentials ,您將不會獲得具有該region變量值的名為“region”的屬性,但您將獲得數字屬性,每個屬性都有一個region字符串的字符。

正確的初始化應該是:

const credentials = await getCredentialsFromSTS(region);
const dbClient = new DynamoDBClient({
  region: region,
  credentials: {
    accessKeyId: credentials.AccessKeyId,
    secretAccessKey: credentials.SecretAccessKey,
    sessionToken: credentials.SessionToken,
  }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM