LoginSignup
1
0

More than 3 years have passed since last update.

MFAとAssume IAM Roles を使って環境でAWS SDKをGoで操作する

Last updated at Posted at 2020-03-30

はじめに

マルチアカウント運用でAssumeRoleするかつ、MFA入力必須な場合、awscli等の操作も含めてややこしいですよね。awscliはともかく、AWS SDK for Goを使った上記の例が少いように見受けられたので残しておきます。

結論

MFAとAssume IAM Roles を使って環境でAWS SDKをGoで操作する方法は...

  • AssumeRoleTokenProvider を用います
  • MFAトークンを標準入力する場合は stscreds.StdinTokenProvider を利用すると良いです
    • そうすると、下記のような入力を求められるようになります

image.png

コード

例として、LambdaのCloudWatchLogsのLogStreamを検索するコードです。

AssumeRoleしつつMFAを利用する場合
func main() {
    var (
        logGroup        = "/aws/lambda/<YourAppName>"
        logStreamPrefix = "2020/04/01" // 適当な日付
    )

    svc := cloudwatchlogs.New(
        session.Must(session.NewSessionWithOptions(session.Options{
            SharedConfigState:       session.SharedConfigEnable,
            AssumeRoleTokenProvider: stscreds.StdinTokenProvider, // MFAのときは必須
        })),
        &aws.Config{
            Region: aws.String(os.Getenv("AWS_REGION")),
        },
    )

    stm, err := svc.DescribeLogStreamsWithContext(ctx, &cloudwatchlogs.DescribeLogStreamsInput{
        LogGroupName:        aws.String(logGroup),
        LogStreamNamePrefix: aws.String(logStreamPrefix),
        NextToken:           nil,
    })
    if err != nil {
        log.Fatal(err)
    }


    for _, v := range stm.LogStreams {
        fmt.Println(aws.StringValue(v.LogStreamName), aws.Int64Value(v.CreationTime))
    }
}

MFAトークンを正しく入力さえできれば、ログストリームの一覧を取得できたと思います。

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0