Вот что я пытаюсь сделать. У меня есть две учетные записи AWS A и B. Используя AWS SDK для Go v2, я хочу использовать профиль CLI с учетными данными для Acct A и взять на себя роль в учетной записи B, для которой требуется MFA.
Я прочитал документацию по пакету для конфигурации и stscreds https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/aws/stscreds. Это настолько запутанное множество проблем (ошибки компиляции). Я попробовал https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/[email protected]/stscreds так же, как вы видите в коде, но в строке ниже ошибки.
cfg.Credentials = &aws.CredentialsCache{Provider: creds}
ОШИБКА: неизвестное поле «Поставщик» в структурном литерале типа aws.CredentialsCache
Вот что у меня есть до сих пор.
package main
import (
"context"
"log"
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/credentials/stscreds"
"github.com/aws/aws-sdk-go-v2/service/sts"
)
func main() {
region := "us-west-2"
profile := "acctacliprofile"
roleToAssume := "arn:aws:iam::accountB:role/TestRole"
externalID := "TestingOnly"
mfaSerial := "arn:aws:iam::acctA:mfa/user"
ctx := context.TODO()
cfg, err := config.LoadDefaultConfig(ctx, config.WithRegion(region),
config.WithSharedConfigProfile(profile))
if err != nil {
log.Fatal(err)
}
creds := stscreds.NewAssumeRoleProvider(sts.NewFromConfig(cfg), roleToAssume, func(o
*stscreds.AssumeRoleOptions) {
o.SerialNumber = aws.String(mfaSerial)
o.ExternalID = aws.String(externalID)
o.TokenProvider = stscreds.StdinTokenProvider
})
c, err := creds.Retrieve(ctx)
if err != nil {
log.Fatal(err)
}
log.Printf("%T\n", c)
log.Printf("%v\n", c.AccessKeyID)
log.Printf("%v\n", c.SecretAccessKey)
log.Printf("%v\n", c.SessionToken)
}
Это в основном работает, просит предоставить токен MFA и предположить, что роль выполнена успешно, но как мне использовать эти учетные данные для создания клиентов службы и т. Д., Поскольку cfg был создан с локальным профилем cli, и я хочу использовать временные учетные данные для выполнения вызовов службы.
Поскольку приведенный ниже код из документации не работает, как мне обновить cfg с новыми учетными данными и выполнить вызовы s3 или других служб с помощью учетных данных.
cfg.Credentials = &aws.CredentialsCache{Provider: creds}
// Create service client value configured for credentials
// from assumed role.
svc := s3.NewFromConfig(cfg)
Хотелось бы, чтобы документы для нового AWS Go SDK v2 не оставляли желать лучшего.
Спасибо за любую помощь.