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 のドキュメントには、何かが望まれています。