如何通过STS角色在Python脚本中提取AWS Parameter Store参数?
问题分析与修复方案
你的核心问题是用STS客户端调用了SSM Parameter Store的API,get_parameter是AWS Systems Manager(SSM)的接口,并非STS的接口。以下是修复后的完整代码及注意事项:
修复后的完整代码
import boto3 # 初始化STS客户端,获取角色临时凭证 sts = boto3.client('sts', region_name='us-east-1') assumed_role = sts.assume_role( RoleArn='arn:aws:iam::xxxxxxxxxx:role/IAMRole', RoleSessionName='MyScript' ) # 用临时凭证创建新的AWS会话 session = boto3.session.Session( aws_access_key_id=assumed_role['Credentials']['AccessKeyId'], aws_secret_access_key=assumed_role['Credentials']['SecretAccessKey'], aws_session_token=assumed_role['Credentials']['SessionToken'] ) # 关键:通过新会话创建SSM客户端,而非继续使用STS客户端 ssm_client = session.client('ssm', region_name='us-east-1') # 提取目标参数值 param_path = "/abc/xyz/ServerIP" response = ssm_client.get_parameter(Name=param_path) ip_address = response["Parameter"]["Value"] print(ip_address)
额外注意事项
- 若目标参数是KMS加密的,需在
get_parameter中添加WithDecryption=True参数,否则会返回加密密文 - 确保
IAMRole角色拥有ssm:GetParameter权限,否则会触发权限错误 - 保持区域一致性:STS和SSM客户端的region需与参数存储的区域匹配
内容的提问来源于stack exchange,提问作者Jimmy
相关产品推荐
相关产品推荐

