如何承担跨账户角色?

时间:2017-10-30 19:22:21

标签: go aws-sdk aws-sdk-go

AWS' Golang SDK说我应该使用stscreds.AssumeRoleProvider来承担跨帐户角色(在这种情况下,用于从Web服务器查询另一个帐户的DynamoDb表)。此代码有效:

var sess *session.Session

func init() {

  sess = session.Must(session.NewSession(&aws.Config{
    Region: aws.String("us-west-2"),
  }))

}

func getDynamoDbClient() *dynamodb.DynamoDB {

  crossAccountRoleArn := "arn:...:my-cross-account-role-ARN"

  creds := stscreds.NewCredentials(sess, crossAccountRoleArn, func(arp *stscreds.AssumeRoleProvider) {
    arp.RoleSessionName = "my-role-session-name"
    arp.Duration = 60 * time.Minute
    arp.ExpiryWindow = 30 * time.Second
  })

  dynamoDbClient := dynamodb.New(sess, aws.NewConfig().WithCredentials(creds))

  return dynamoDbClient
}

根据文档,返回的客户端是线程安全的:

  

DynamoDB方法可以安全地同时使用。

问题是,由于凭证是通过stscreds.AssumeRoleProvider自动续订的,我是否

  • 需要在每个请求中新建一个新客户端(以确保我有未过期的凭据)或

  • 我可以在Web服务器启动时新建一个DynamoDb客户端,并在Web服务器的生命周期内重复使用它吗?

编辑注:

我深入研究了Golang AWS SDK的源代码,看起来stscreds.NewCredentials()返回的凭据只不过是对stscreds.AssumeRoleProvider的引用的包装。因此,我觉得客户端可能会神奇地获得自动续订的凭据。

AWS'文档留下了一些需要的东西。

0 个答案:

没有答案