为什么接口不认永久 AK/SK:一次 STS 临时凭证的落地记录

举报
yd_293143657 发表于 2026/10/22 22:47:50 2026/10/22
【摘要】 开放接口返回「缺少最小权限 STS 临时凭证」,换成临时凭证后一次通过。记录 AssumeAgency 的四个参数、委托缺失时的报错 STS5.1106,以及临时凭证只在内存与临时目录存在的落地习惯。

一、报错先读清楚

把永久 AK/SK 塞进请求头,接口回 400,message 是「缺少最小权限 STS 临时凭证」。这句话有两层含义:一是必须用临时凭证,二是临时凭证本身要带权限收敛策略。永久密钥直接被拒,不是签名算错。

所以正确的路径不是换密钥,而是换凭证类型:用永久凭证去换一个有期限、有策略的临时凭证,再用它调业务接口。

二、AssumeAgency 的四个参数

调用形如 STS AssumeAgency,关键参数四个:region(如 cn-north-4)、agency_urn(形如 iam::<账号ID>:agency:<委托名>)、agency_session_name(会话名,建议带时间戳便于审计)、duration_seconds(最小 900)、policy(可选,进一步收窄权限)。

policy 是一个内联 JSON,只允许真正需要的那几个 action。比如自检场景只需要 sts::GetCallerIdentity 和 iam::listAuthDomains,就不要给通配。这一层和委托本身的权限是取交集,写错了会直接拿不到凭证。

三、委托不存在怎么办

第一次跑最常见的报错是 STS5.1106,意思是 agency:SELF_VERIFY 找不到。IAM 里没有这条委托,任何 AssumeAgency 都会失败,跟 AK/SK 是否有效无关。

解决办法是先在 IAM 建委托:agency.domain_id 填账号 ID,agency.name 填代码里写死的名字,agency.duration 可以设 ONEDAY 让它在一天后自然过期,信任关系指向自己账号。这样既不长期留权限,也保证流水线第二天还能跑。

四、凭证怎么存

临时凭证只在内存里构造,需要落盘时写到一个临时目录、权限收紧、用完立刻删。绝不写进仓库、绝不写进日志、绝不进配置文件的明文段落。

另一个习惯:把刷新所需的元数据(账号、委托 URN、region)和凭证本身分开,只存元数据,凭证过期就重新换。这样即使某次进程崩了,也不会留下可用的长期凭证。

五、验证顺序

先 GetCallerIdentity 确认身份,再调一个只读业务接口确认权限够用,最后才发真实请求。顺序反了会很难判断是凭证问题还是业务参数问题——这次就是先撞了业务校验,白排查了半小时。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。