awsのassume roleに対応していなさそうなコマンドはaws stsを使わずともAWS_SDK_LOAD_CONFIG=1を付けて実行すれば良いかも?

以前の記事の続編ということになりそう。

ほとんど内容はタイトル通りで、assume roleに対応していないようなコマンドがある。それを使うにはどうすれば良いかという話。

以前の記事では aws sts assume-role で頑張って一時的なsession tokenを作成して実行ということをしていたのだけれど、これをライブラリ側に任せてしまえる環境変数があることを知った。具体的には AWS_SDK_LOAD_CONFIG=1 をつけて実行すれば良い。

詳細

ドキュメントの Sessions with a Shared Configuration File の部分を見れば良い。

Sessions with a Shared Configuration File

Using the previous method, you can create sessions that load the additional configuration file only if the AWS_SDK_LOAD_CONFIG environment variable is set. Alternatively you can explicitly create a session with a shared configuration enabled. To do this, you can use NewSessionWithOptions to configure how the session is created. Using the NewSessionWithOptions with SharedConfigState set to SharedConfigEnable will create the session as if the AWS_SDK_LOAD_CONFIG environment variable was set.

assume roleに対応するには、shared configurationを有効にしなければいけないのだけれど。AWS_SDK_LOAD_CONFIG=1 などとしておくと、これを環境変数経由で有効にできるという話。

例えば、aws-s3-proxyなどで実行するときに以下のようにしてあげれば良い。

pottava/aws-s3-proxy: Reverse proxy for AWS S3 with basic authentication.

$ MY_BUCKET=<s3 bucket name>
$ AWS_SDK_LOAD_CONFIG=1 AWS_S3_BUCKET=$MY_BUCKET DIRECTORY_LISTINGS=1 DIRECTORY_LISTINGS_FORMAT=html APP_PORT=8080 DISABLE_COMPRESSION=0 ACCESS_LOG=true HEALTHCHECK_PATH=/_health aws-s3-proxy

memo: aws-sdk-go でassume roleを有効にするコード

これはメモ程度のもの。goでコードを書いている時などに、先ほどの環境変数の指定なしにassume roleに対応するにはCreate Sessions with Option Overridesに書いてある通り以下のような形でsessionを作ってあげれば良い。

// Force enable Shared Config support
sess, err := session.NewSessionWithOptions(session.Options{
    SharedConfigState: SharedConfigEnable,
})

参考