跨账号访问AWS SSM Parameter Store遇IndexError,求排查指导
跨账号SSM Parameter Store访问报错IndexError排查方案
问题概述
源账号通过RAM共享SSM参数给目标账号,已配置目标账号执行角色权限,但执行代码时触发IndexError: list index out of range,核心原因是get_parameters返回的Parameters列表为空,说明参数未被成功获取。执行的代码如下:
def fetch_parameters(key): ssm_client = build_client(service="ssm", region=get_aws_region()) result = ssm_client.get_parameters(Names=[ARN], WithDecryption=True)) return result["Parameters"][0]["Value"]
逐一排查以下配置/操作:
1. 确认RAM共享已被目标账号接受
- 登录目标账号RAM控制台,进入共享资源页面,查看源账号共享的SSM参数是否存在且状态为「已接受」。若状态是「待接受」,需手动完成接受操作。
2. 检查参数ARN的正确性
- 跨账号访问必须使用源账号参数的完整ARN,格式为:
arn:aws:ssm:<区域>:<源账号ID>:parameter/<参数名称> - 禁止使用仅参数名称或相对路径,否则SSM无法定位到跨账号的参数。
3. 验证目标账号执行角色的权限
- 检查角色的IAM策略,确保包含:
- 针对目标参数ARN的
ssm:GetParameters(或ssm:GetParameter)权限 - 若参数是加密状态,需额外添加对应KMS密钥的
kms:Decrypt权限(如果使用自定义KMS密钥,源账号的KMS密钥策略也必须允许目标账号角色访问)
- 针对目标参数ARN的
- 示例权限策略片段:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ssm:GetParameters", "Resource": "arn:aws:ssm:us-east-1:123456789012:parameter/my-shared-param" }, { "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "arn:aws:kms:us-east-1:123456789012:key/abc123" } ] }
4. 修正代码语法错误
- 代码中
get_parameters调用末尾多了一个冗余的右括号:result = ssm_client.get_parameters(Names=[ARN], WithDecryption=True)),这会直接导致语法错误,先修正该问题后重新测试。
5. 通过CloudTrail定位具体错误
- 在目标账号开启CloudTrail日志,搜索
GetParametersAPI调用记录,查看返回的errorCode和errorMessage,这能直接获取权限不足、参数不存在等具体失败原因。
6. 确认源账号参数状态正常
- 登录源账号SSM控制台,检查共享的参数是否存在、状态正常,未被删除或禁用。
内容的提问来源于stack exchange,提问作者sa_
相关产品推荐
相关产品推荐

