使用aws configure sso配置Amazon SES时Go代码报无凭据错误
解决方案
你的需求完全可行,问题出在Go代码初始化AWS会话的方式未正确加载SSO凭证链,以下是具体修复步骤:
针对AWS SDK for Go v1(你当前使用的版本)
修改会话初始化逻辑,开启共享配置支持,让SDK自动读取SSO登录后的凭证:
enable := true // 方式1:直接指定SSO配置文件名称 session, err := session.NewSessionWithOptions(session.Options{ Config: aws.Config{ Region: aws.String("ap-southeast-2"), CredentialsChainVerboseErrors: &enable, }, Profile: "profile_name", // 替换为你的SSO配置文件名称 }) // 方式2:依赖环境变量AWS_DEFAULT_PROFILE,自动读取默认配置 session, err := session.NewSessionWithOptions(session.Options{ SharedConfigState: session.SharedConfigEnable, // 关键:开启共享配置加载 Config: aws.Config{ Region: aws.String("ap-southeast-2"), CredentialsChainVerboseErrors: &enable, }, })
推荐升级到AWS SDK for Go v2(更优方案)
v1已进入维护模式,v2对SSO凭证的支持更完善,无需复杂配置即可自动识别已登录的SSO会话:
package main import ( "context" "log" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/service/ses" ) func main() { // 加载默认配置,自动读取已登录的SSO凭证 cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithRegion("ap-southeast-2"), // 可选:指定配置文件,不填则读取AWS_DEFAULT_PROFILE环境变量的值 config.WithSharedConfigProfile("profile_name"), ) if err != nil { log.Fatalf("加载SDK配置失败: %v", err) } sesClient := ses.NewFromConfig(cfg) // 后续调用SendEmail逻辑... }
额外检查项
- 确保已执行
aws sso login --profile profile_name完成登录,且代码运行环境与终端登录的是同一用户(避免权限或路径问题) - 确认
~/.aws/config中对应profile包含正确的SSO配置字段(sso_start_url、sso_region、sso_account_id、sso_role_name)
内容的提问来源于stack exchange,提问作者tmp dev
相关产品推荐
相关产品推荐

