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

如何排查AWS SDK中MissingAuthenticationTokenException异常

问题:本地Go代码调用AWS Secrets Manager DescribeSecret接口报MissingAuthenticationTokenException

问题详情

本地运行用于AWS Secrets Manager密钥轮换的Lambda函数代码时,调用DescribeSecret接口出现如下错误:

operation error Secrets Manager: DescribeSecret, 
https response error StatusCode: 400, 
RequestID: b4023b03-6455-41e6-be63-639bff8ec56c, 
api error MissingAuthenticationTokenException: Missing Authentication Token

使用AWS CLI执行aws secretsmanager describe-secret --secret-id <你的密钥名>命令可正常返回结果,IAM权限配置无误,且本地代码与CLI使用相同的AWS凭证。目前搜索到的排查方案仅针对API Gateway场景,特此求助。

用到的Go代码

import (
    "context"
    "fmt"
    "github.com/aws/aws-sdk-go-v2/aws"
    "github.com/aws/aws-sdk-go-v2/service/secretsmanager"
)

func checkSecret(ctx context.Context, secretName string) error {
    awsConfig := aws.NewConfig()
    awsConfig.Region = "us-east-1"
    client := secretsmanager.NewFromConfig(*awsConfig)

    resp, err := client.DescribeSecret(ctx, &secretsmanager.DescribeSecretInput{SecretId: &secretName})
    if err != nil {
        fmt.Println("ERR Describing Secret: ", err)
        return err
    }
    return nil
}

解决方案

代码的核心问题是未加载AWS凭证到配置中:aws.NewConfig()仅创建空的基础配置,不会自动读取本地凭证(如~/.aws/credentials、环境变量、IAM角色等),而AWS CLI会自动完成这一步。

修改后的代码如下:

import (
    "context"
    "fmt"
    "github.com/aws/aws-sdk-go-v2/aws"
    "github.com/aws/aws-sdk-go-v2/config"
    "github.com/aws/aws-sdk-go-v2/service/secretsmanager"
)

func checkSecret(ctx context.Context, secretName string) error {
    // 加载默认配置,自动读取本地凭证、区域等信息
    awsConfig, err := config.LoadDefaultConfig(ctx, config.WithRegion("us-east-1"))
    if err != nil {
        fmt.Println("ERR Loading AWS Config: ", err)
        return err
    }
    client := secretsmanager.NewFromConfig(awsConfig)

    resp, err := client.DescribeSecret(ctx, &secretsmanager.DescribeSecretInput{SecretId: &secretName})
    if err != nil {
        fmt.Println("ERR Describing Secret: ", err)
        return err
    }
    return nil
}

关键说明

  • config.LoadDefaultConfig会按照以下优先级自动加载凭证:
    • 环境变量(AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY等)
    • ~/.aws/credentials文件中的配置
    • 本地IAM角色(如EC2、EKS等环境下的实例角色)
    • 其他AWS支持的凭证源
  • 若需指定特定凭证源,可通过config.WithCredentialsProvider参数自定义,例如加载指定路径的凭证文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:01:08