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
相关产品推荐
相关产品推荐

