AWS跨账号KMS密钥无法访问问题排查求助
解决AWS跨账号KMS DescribeKey NotFoundException问题
首先看你遇到的错误:Key 'arn:aws:kms:us-west-2:999:key/abc-def' does not exist,这里的核心问题是AWS CLI自动给你补充了当前会话的账号ID(999),但你的密钥实际归属账号111,所以才会出现找不到密钥的情况。下面是具体的排查和解决步骤:
1. 立即修正DescribeKey命令参数
当你只传入密钥ID abc-def 时,AWS CLI会默认使用当前账号(999)和区域来构造ARN,导致查找错误的密钥资源。你需要明确指定密钥所属的账号:
- 方法一:使用完整的密钥ARN
aws kms describe-key --key-id=arn:aws:kms:us-west-2:111:key/abc-def --region us-west-2 - 方法二:使用
账号ID/密钥ID的格式aws kms describe-key --key-id=111/abc-def --region us-west-2
记得加上--region us-west-2确保和密钥所在区域一致,避免因区域不匹配导致的查找失败。
2. 验证权限配置的完整性
虽然你的策略看起来逻辑正确,但可以做以下细节检查:
- 确认KMS密钥策略的Principal范围:你授权了账号999的根用户,这意味着账号999下的所有IAM实体(包括你切换的角色)只要有对应的IAM权限就能访问,但要确保账号999的角色策略里的
Resource确实指向账号111的密钥ARN(你当前的配置是正确的)。 - 排查隐性拒绝规则:使用AWS IAM Access Analyzer分析账号111的KMS密钥策略和账号999的角色策略,查看是否存在冲突的拒绝语句,或者权限覆盖是否完整。
- 确认密钥状态:登录账号111的KMS控制台,检查目标密钥是否处于启用状态,没有被禁用或标记为计划删除。
3. 验证角色切换是否生效
在执行DescribeKey命令前,先确认当前会话的身份是否正确:
aws sts get-caller-identity
输出的Account字段应该是999,Arn字段应该是你切换的目标角色ARN,确保没有使用错误的身份执行命令。
4. 检查CLI默认区域配置
如果你的AWS CLI默认区域不是us-west-2,即使命令里没指定区域,也会导致查找失败。可以通过以下命令查看默认区域:
aws configure get region
如果不是us-west-2,要么修改默认配置,要么在每次命令里加上--region us-west-2参数。
按照以上步骤操作,应该就能解决DescribeKey的NotFound问题了。
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

