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

AWS SDK for Go v2:如何为DynamoDB/S3/KMS客户端设置会话令牌

解决AWS SDK for Go v2中会话令牌的客户端配置问题

核心说明

你不需要手动单独传递aws_session_token给客户端——通过config.LoadDefaultConfig加载的配置已经自动包含了指定profile(devadm)下的所有凭证信息,包括会话令牌。直接用这个配置初始化各种服务客户端即可,SDK会自动处理凭证验证逻辑。

直接使用加载的配置创建客户端示例

DynamoDB客户端

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

func main() {
    cfg, err := config.LoadDefaultConfig(context.TODO(), 
        config.WithRegion("us-west-2"), 
        config.WithSharedConfigProfile("devadm"))
    if err != nil {
        panic(err)
    }

    // 用加载好的配置创建DynamoDB客户端,自动使用会话令牌
    dynamoClient := dynamodb.NewFromConfig(cfg)
    // 后续调用客户端API,例如ListTables
    _, err = dynamoClient.ListTables(context.TODO(), &dynamodb.ListTablesInput{})
    if err != nil {
        panic(err)
    }
}

S3客户端

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

func main() {
    cfg, err := config.LoadDefaultConfig(context.TODO(), 
        config.WithRegion("us-west-2"), 
        config.WithSharedConfigProfile("devadm"))
    if err != nil {
        panic(err)
    }

    // 创建S3客户端,自动使用会话令牌
    s3Client := s3.NewFromConfig(cfg)
    // 示例调用:列出存储桶
    _, err = s3Client.ListBuckets(context.TODO(), &s3.ListBucketsInput{})
    if err != nil {
        panic(err)
    }
}

KMS客户端

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

func main() {
    cfg, err := config.LoadDefaultConfig(context.TODO(), 
        config.WithRegion("us-west-2"), 
        config.WithSharedConfigProfile("devadm"))
    if err != nil {
        panic(err)
    }

    // 创建KMS客户端,自动使用会话令牌
    kmsClient := kms.NewFromConfig(cfg)
    // 示例调用:列出密钥
    _, err = kmsClient.ListKeys(context.TODO(), &kms.ListKeysInput{})
    if err != nil {
        panic(err)
    }
}

手动指定凭证(含会话令牌)的场景

如果你的会话令牌是从其他渠道获取(而非直接从共享配置读取),可以通过静态凭证提供者手动构造配置:

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

func main() {
    // 假设从外部获取的凭证信息
    accessKeyID := "AKIAXXXXXX"
    secretAccessKey := "YYYYYYYY"
    sessionToken := "ZZZZZZZZ"

    // 创建静态凭证提供者
    creds := credentials.NewStaticCredentialsProvider(accessKeyID, secretAccessKey, sessionToken)

    // 加载配置时指定凭证提供者
    cfg, err := config.LoadDefaultConfig(context.TODO(),
        config.WithRegion("us-west-2"),
        config.WithCredentialsProvider(creds))
    if err != nil {
        panic(err)
    }

    // 用该配置创建任意服务客户端即可
    dynamoClient := dynamodb.NewFromConfig(cfg)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 10:22:49