作ったのは半年以上前だし、まだ直さなきゃいけないところがあるのですが、普段の業務でかなり重宝しているので紹介します。
何を作った
akm (Aws access Key Manager) という、AWSアクセスキーを便利に管理するコマンドラインツールを作りました。Go言語で書かれています。
何で作った
AWSアクセスキーの管理やAWS CLI・AWSアクセスキーを使ってのアプリ開発を楽にするためです。
はじめに断っておくと、本来、AWSアクセスキーを発行すべきではありません。キーが漏洩するとリソースが使われてしまうだけではなく、DynamoDBなどデフォルトではアクセス制限かけていない場合にデータが外部に漏洩するリスクがあるからです。出来るだけIAMロールを使用することを推奨します。
しかしながら、AWS以外の環境(オンプレミス、PC)で開発する場合にはアクセスキーが必要になることもあるかと思います。また複数のAWSアカウントを管理していると、以下のようにクレデンシャルファイルにプロファイルとして登録するかと思います。
# For example [default] aws_access_key_id = AKIAIOSFODNN7EXAMPLE aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY [account1] aws_access_key_id = AKIAI44QH8DHBEXAMPLE aws_secret_access_key = je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY region = us-east-1 # optional [account2] aws_access_key_id = AKIAI44QH7DHBEXAMPLE aws_secret_access_key = je7MtGbClwBF/3Zp9Utk/h4yCo8nvbEXAMPLEKEY region = us-east-2 # optional
AWS CLIであれば --profile
オプションでプロファイルを切り替えて実行すればよいのですが、プロファイルに対応していないツール(Terraformなど)では対応できません。
また、EC2インスタンス(=IAMロール)で動くことを想定しているアプリケーションで、環境ごとにプロファイルを指定するようにプログラムを書き直すのは開発者にとって面倒です。
複数環境で実行を試す場合はクレデンシャルファイルの default
プロファイルのキーを都度書き換えなければなりません。
このような手間を解消したいために AKM を作りました。
https://github.com/fujiwara/aswrap と https://github.com/TimothyYe/skm にインスパイアされています。
どうやって使うのか
リリースページ からバイナリを落としてもらい、パスが通るところに置いてください。Windowsは現在未対応です。
まずは akm init
で初期化(設定ファイルの生成)を行ってください。
$ akm init .akm.toml is created in ~/.akm.toml
akm ls
でクレデンシャルファイルに登録されているプロファイル一覧が表示されます。
$ akm ls default account1 account2
キーを取得しつつコマンドを実行するには akm use
を使います。
$ akm use account1 aws s3 cp foo.png s3://bar/
上のコマンド例の場合、account1
のキーを使いつつ、引数となる外部コマンド(aws s3 cp foo.png s3://bar/
) を実行します。
毎回 akm use
を打つのが面倒な場合は eval を使うとアクセスキーを環境変数にセットされます。
$ eval $(akm use account1) $ aws s3 cp foo.png s3://bar/
一つ上のコマンドと同じですが、環境変数にセットされることで、シェルスクリプトの中で akm use
を書きたくない場合や、アプリケーションを実行したい場合に便利です。
使い終わったら akm clear
を使うことでアンセットされます。
$ eval $(akm clear)
プロファイルを登録するときは akm cofigure
を使います。デモGIFをご覧ください。
やっていることは aws configure
と同じですが、いくつか便利な機能があります。
- シークレットキーをマスクしているのでショルダーハックされづらい
- リージョン指定が選択式なので間違いづらい。
aws configure
だと入力間違いしやすい
他にも色々なサブコマンドがあるのでREADME を見てください。
今後やりたいこと
冒頭に書きましたが、まだまだ発展途中なツールです。GitHubのissue にメモ書き程度で投げていますが、今後は以下のことをやっていきたいです。
akm use
でエラー出力されないバグを修正- Windows対応
- Assume Role対応
- MFA対応
- TUIをもっとカラフルにしたい
- サブコマンドがあまり気に入っていないので変更したい
- Bash/Zsh 補完をしたい
最後に
個人的にかなり便利だと思っていますので、ぜひ使ってみてください。
良ければGitHubリポジトリにスターをつけてもらえるとめっちゃ嬉しいです。