ssowrapというツールを作ったが特に必要なかった

ssowrapというaws2-wrapGolang製シングルバイナリ版を作った。

github.com

Golang版のaws2-wrapは頑張って探せばありそうだったけれど

ということで、自作した。


使い方は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というコマンドがあるので、わざわさ自作する必要はなかった。

awscli.amazonaws.com

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しても大丈夫だろうか、と思ったが特に問題なくマルチプラットフォームで使うことができている。