跨账号访问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

