Go调用AWS Secrets Manager遇GetSecretValue凭证刷新失败问题求助
问题排查:AWS Secrets Manager凭证刷新失败
错误原因分析
报错信息显示AWS SDK尝试从EC2实例元数据服务(IMDS)获取IAM角色凭证,但请求超时。这说明当前运行环境并非EC2实例,且SDK在默认凭证链中找不到其他有效凭证来源(如环境变量、本地凭证文件),才会 fallback 到IMDS并触发超时错误。
解决方案
1. 通过环境变量指定凭证
运行代码前,设置以下环境变量:
export AWS_ACCESS_KEY_ID="你的Access Key ID" export AWS_SECRET_ACCESS_KEY="你的Secret Access Key" export AWS_REGION="eu-central-1"
2. 使用本地AWS凭证文件
在用户主目录下创建~/.aws/credentials文件,内容格式如下:
[default] aws_access_key_id = 你的Access Key ID aws_secret_access_key = 你的Secret Access Key
同时确保~/.aws/config文件包含区域配置:
[default] region = eu-central-1
3. 代码中显式指定凭证(仅本地开发测试用,生产环境不推荐)
修改config.LoadDefaultConfig部分,添加静态凭证提供者:
import "github.com/aws/aws-sdk-go-v2/credentials" // ... config, err := config.LoadDefaultConfig(context.TODO(), config.WithRegion(region), config.WithCredentialsProvider(credentials.NewStaticCredentialsProvider( "你的Access Key ID", "你的Secret Access Key", "", // 会话Token,非必要留空 )), )
4. 检查IAM权限
确保你的凭证对应的IAM用户/角色拥有secretsmanager:GetSecretValue权限,以及关联KMS密钥的kms:Decrypt权限(如果Secret使用自定义KMS密钥加密)。
内容的提问来源于stack exchange,提问作者Yusuf Gören
相关产品推荐
相关产品推荐

