簡體   English   中英

使用角色調用在不同賬戶上設置的 Dynamo DB

[英]Making a call to a Dynamo DB set up on a different account with AWS Java SDK using Roles

我在 AWS_ACCOUNT_A 上的 EC2 實例上設置了 Java 應用程序,並嘗試調用已在 AWS_ACCOUNT_B 上設置的 Dynamo_DB 表。

我通過在 EC2 上假設一個已配置的實例角色來做到這一點,以便它可以訪問相關的 Dynamo DB。 該角色附加了一個策略,其中包括以下內容:

{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"dynamodb:BatchGetItem",
"dynamodb:ConditionCheckItem",
"dynamodb:DescribeContributorInsights",
"dynamodb:Scan",
"dynamodb:ListTagsOfResource",
"dynamodb:Query",
"dynamodb:DescribeStream",
"dynamodb:DescribeTimeToLive",
"dynamodb:DescribeGlobalTableSettings",
"dynamodb:PartiQLSelect",
"dynamodb:DescribeTable",
"dynamodb:GetShardIterator",
"dynamodb:DescribeGlobalTable",
"dynamodb:GetItem",
"dynamodb:DescribeContinuousBackups",
"dynamodb:DescribeExport",
"dynamodb:DescribeKinesisStreamingDestination",
"dynamodb:DescribeBackup",
"dynamodb:GetRecords",
"dynamodb:DescribeTableReplicaAutoScaling"
],
"Resource": "ARN_OF_AWS_ACCOUNT_B:CORRECT_TABLE_PATH"
},

用於進行調用的代碼如下:

AmazonDynamoDBClientBuilder.standard()
                .withCredentials(new InstanceProfileCredentialsProvider(false))
                .withRegion(awsRegion)
                .build(); 

執行此操作時,Java 應用程序會承擔正確的角色,但調用本身會失敗,因為它正在尋找不存在的 Dynamo DB 表。 這是我收到的錯誤消息:

用戶 CORRECT_INSTANCE_ROLE 無權對資源arn:ARN_OF_AWS_ACCOUNT_A /CORRECT_TABLE_PATH 執行查詢

顯然,問題在於它試圖查詢錯誤 AWS 賬戶上的資源。 但是,我一直無法弄清楚如何指示我的代碼查詢正確的 Dynamo 路徑。

任何幫助將不勝感激。

要在另一個賬戶上調用 DynamoDB 資源,您需要執行以下操作:

  1. 在賬戶 A(DynamoDB 資源所有者)上創建角色
  2. 在帳戶 B(您的應用程序運行的位置)上創建策略,並有權承擔在步驟 1 中創建的角色
  3. 在賬戶 B 上創建角色並附加在步驟 2 中創建的策略
  4. 最后,在您的代碼中,您首先調用 STS:AssumeRole API 以生成具有賬戶 A 角色權限的臨時憑證(步驟 1)。 要進行第一次調用(對 STS),您不需要明確提供任何憑證,AWS SDK 客戶端將檢測來自環境變量、配置文件或附加到實例的 IAM 角色的配置。 但在使用 STS 生成臨時憑證后,您需要在新客戶端上設置它們。

所需內容的簡單圖表是: 解決方案圖

對於 Java V2,有一個完整的示例,其中包含使用 AWS SDK 的進一步分步說明和 GitHub 代碼。 請參考這篇文章和這個repo

暫無
暫無

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

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