ssowrapというaws2-wrapのGolang製シングルバイナリ版を作った。
Golang版のaws2-wrapは頑張って探せばありそうだったけれど
- ぱっとみ、見つけられなかった
- 以前作ったSSOクレデンシャル出力ツールの再設計がしたかった
- ssowrapを含むDockerイメージが欲しかった
ということで、自作した。
使い方はaws2-wrapとほぼ同じでAWS_PROFILE
を設定してからssowrapでラップしてコマンドを実行する。
export AWS_PROFILE=my-profile ssowrap terraform plan
ただ、これを作ったのはどちらかといえば、自分のSSOクレデンシャルを使ってDockerコンテナを動かしたかったのが大きい。
以下のようにDockerコンテナを実行すると、自分のSSOクレデンシャルをコンテナ内のサーバに渡すことができる。
docker run \ -e AWS_PROFILE=my-profile \ -v "${HOME}/.ssh":/root/.ssh:ro \ -v "${HOME}/.aws":/root/.aws:ro \ ghcr.io/winebarrel/ssowrap:v0.1.2 \ ssowrap -- my-server-cmd
…と思っていたら、そもそも最近のAWS CLIにはexport-credentialsというコマンドがあるので、わざわさ自作する必要はなかった。
aws configure export-credentials --format env-no-export
を実行すると AWS_ACCESS_KEY_ID=... \n AWS_SECRET_ACCESS_KEY=... \n
という形式で出力されるので
env $(aws configure export-credentials --format env-no-export) my-server-cmd
と実行するとssowrapと同様のことができる。
まあ、awscliとsession-manager-pluginを含むシンプルな(信頼できる)Dockerイメージはなかったので、わざわざイメージをビルドしたくない場合にはよいかも。 (aws-cliのイメージに対してIssueは投げられている模様)
おまけ
Atlantisで使われているのを見てghcr.ioを使ってみたが、GitHubリポジトリとDockerリポジトリの管理を一体化できるのがなかなかよかった。 x86_64ランナーだとarm64のビルドがめちゃくちゃ遅かったが、ubuntu-24.04-armをつかったら普通に速くなった。
x86_64とarm64で別々にpushしても大丈夫だろうか、と思ったが特に問題なくマルチプラットフォームで使うことができている。