🔑

AWSの一時クレデンシャルでコマンドを実行する aswrap - fujiwara-ware 2024 day 21

2024/12/21に公開

この記事は fujiwara-ware advent calendar 2024 の21日目です。

aswrap とは

https://github.com/fujiwara/aswrap

aswrap は、AWS の一時クレデンシャルを取得した上でコマンドを実行するためのラッパーです。

クレデンシャルの取得方法は assume role と IAM Identity Center (SSO) に対応しています。

なぜ作ったのか

比較的新しい AWS SDK を使って作られたアプリケーションでは、AWS CLIと同じように ~/.aws/config などに設定されたプロファイルを使って一時クレデンシャルを取得できます。しかし、AWS SDK を使っていなかったり、古いバージョンの SDK を組み込んでいるアプリケーションでは、環境変数(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN)から直接クレデンシャルを読むことを前提にしているものがあります。

aswrap は、このようなアプリケーションを使う場合に、一時クレデンシャルを取得してから環境変数にセットしてコマンドを実行するためのラッパーです。

また、比較的最近に作られたアプリケーションでも SDK のバージョンが古い場合、IAM Identity Center (SSO) には対応していないことがあります。このような場合にも aswrap を使うことで一時クレデンシャルを使ってコマンドを実行することができます。

インストール

aswrap は Perl で書かれたスクリプトです(Goではありません!)。標準ライブラリ以外の依存を不要にするために FatPack という手法を使っています。そのため、単一のファイルをダウンロードするだけで使えます。

$ curl -Lso path/to/aswrap https://github.com/fujiwara/aswrap/releases/download/v0.1.0/aswrap && chmod +x path/to/aswrap

Homebrew を使ってインストールすることもできます。

$ brew install fujiwara/tap/aswrap

使い方

aswrap は内部で AWS CLI を使って一時クレデンシャルを取得します。そのため、AWS CLI がインストールされている必要があります。実行方法は極めて単純で、AWS_PROFILE を指定して aswrap 経由でコマンドを実行するだけです。

$ AWS_PROFILE=foo aswrap some-command

まとめ

これを書いている2024年末時点では見かけることが少なくなってきたものの、サードパーティーのアプリケーションや少し古い SDK を使っているアプリケーションでは、クレデンシャルを環境変数に設定しないと動かないものがまだあります。このようなアプリケーションを使う場合に、aswrap が便利です。

そのような状況に遭遇した場合は、ぜひ aswrap を試してみてください。

それでは、明日もお楽しみに!

参考資料

https://sfujiwara.hatenablog.com/entry/2017/12/13/122952

Discussion