You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跨账号访问DynamoDB问题求助:AccountB无法获取AccountA表列表

问题根源与解决方案

你遇到的问题核心有两个关键误区,导致AccountB的CLI调用返回空表列表:

1. 未让AccountB的Profile实际使用跨账号角色

你给AccountB的用户配置了允许扮演AccountA角色的权限,但你的Krunal2 Profile并没有配置成自动使用这个角色。直接用AccountB的用户身份调用list-tables时,该用户本身没有任何访问AccountA DynamoDB资源的权限,所以返回空列表是预期结果。

修正方法:修改AccountB的AWS CLI配置

打开~/.aws/config文件,更新Krunal2 Profile的配置,让它自动通过AssumeRole获取AccountA角色的临时凭证:

[profile Krunal2]
role_arn = arn:aws:iam::AccountAID:role/DynamodbCrossAccountAccessRole
source_profile = Krunal2  # 这里填写AccountB用户对应的profile名称,用于发起AssumeRole请求
region = ap-south-1

配置完成后,CLI会自动用AccountB的用户身份去申请AccountA角色的临时权限,之后所有通过Krunal2 Profile发起的请求都会使用这个角色的凭证。

2. 角色策略对ListTables操作的权限限制

即使你修正了Profile配置,当前AccountA的角色策略也会导致list-tables调用失败或返回空结果——因为dynamodb:ListTables是全局账号级操作,它的资源范围不是单个表的ARN,而是整个区域下的账号资源。你的角色策略中仅授权了单个表的Resource,无法覆盖ListTables的权限要求。

修正方法:调整AccountA的角色策略

如果你需要跨账号角色能执行list-tables并看到employee表,需要在角色策略中添加针对ListTables的单独授权:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "dynamodb:*",
      "Resource": "arn:aws:dynamodb:ap-south-1:AccountAID:table/employee"
    },
    {
      "Effect": "Allow",
      "Action": "dynamodb:ListTables",
      "Resource": "arn:aws:dynamodb:ap-south-1:AccountAID:*"
    }
  ]
}

这个新增的语句专门授权了ListTables操作,对应的Resource是AccountA在ap-south-1区域下的所有DynamoDB资源,确保该操作能正常执行并返回表列表。

验证操作

完成上述两步配置后,重新执行命令:

aws dynamodb list-tables --profile Krunal2

此时应该能成功返回employee表的名称。

内容的提问来源于stack exchange,提问作者Krunal Thakar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 11:42:41