You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用本地SSO令牌通过Go SDK v2访问AWS时STS请求报错

AWS Go SDK v2使用SSO时STS请求403错误排查

问题描述

编写了如下AWS Go SDK v2程序,调用STS GetCallerIdentity接口:

package main

import (
        "context"
        "encoding/json"
        "os"

        "github.com/aws/aws-sdk-go-v2/config"
        "github.com/aws/aws-sdk-go-v2/service/sts"
)

func main() {
    ctx := context.Background()
    cfg, err := config.LoadDefaultConfig(ctx)
    if err != nil {
        panic(err)
    }
    stsCli := sts.NewFromConfig(cfg)
    resp, err := stsCli.GetCallerIdentity(ctx, &sts.GetCallerIdentityInput{})
    if err != nil {
        panic(err)
    }
    _ = json.NewEncoder(os.Stdout).Encode(resp)
}

运行后报错:

sobug % go run ./test.go
panic: operation error STS: GetCallerIdentity, https response error StatusCode: 403, RequestID: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXX, api error InvalidClientTokenId: The security token included in the request is invalid.

goroutine 1 [running]:
main.main()
    /tmp/sobug/test.go:49 +0x158
exit status 2

但执行aws sso login(默认配置文件)后,通过CLI调用aws sts get-caller-identity可正常返回结果:

sobug % aws sts get-caller-identity
{
    "UserId": "****",
    "Account": "****",
    "Arn": "arn:aws:sts::****:assumed-role/****/****"
}

~/.aws/config配置如下:

[default]
region = ****
sso_session = ****
sso_account_id = ****
sso_role_name = ****
output = ****
[sso-session ****]
sso_start_url = ****
sso_region = ****
sso_registration_scopes = ****

原因及解决方案

核心原因

AWS Go SDK v2对ssosession类型的配置支持需要依赖最新的SDK组件,且默认加载逻辑可能未优先读取SSO会话凭证,或存在旧凭证干扰。

解决步骤

  • 更新AWS Go SDK v2依赖到最新版本
    早期版本的SDK对SSO会话配置的支持不完善,执行以下命令更新:

    go get github.com/aws/aws-sdk-go-v2/config@latest
    go get github.com/aws/aws-sdk-go-v2/service/sts@latest
    go mod tidy
    
  • 显式指定加载默认配置文件
    修改代码中加载配置的逻辑,确保明确读取default配置段,避免环境变量或其他配置干扰:

    cfg, err := config.LoadDefaultConfig(ctx,
        config.WithSharedConfigProfile("default"),
    )
    
  • 检查并清理旧凭证文件
    如果~/.aws/credentials文件中存在default段的Access Key/Secret,SDK会优先加载这些静态凭证,导致SSO凭证无法生效。删除该文件中的default段即可。

  • 验证SSO令牌有效性
    SSO令牌存储在~/.aws/sso/cache目录下,若令牌过期或损坏,可删除该目录下的所有文件,重新执行aws sso login刷新令牌。


内容的提问来源于stack exchange,提问作者Matt Wlazlo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 11:09:55