本日も乙

ただの自己満足な備忘録。

AWSアクセスキーを使いやすくする AKM というツールを作った

作ったのは半年以上前だし、まだ直さなきゃいけないところがあるのですが、普段の業務でかなり重宝しているので紹介します。

何を作った

akm (Aws access Key Manager) という、AWSアクセスキーを便利に管理するコマンドラインツールを作りました。Go言語で書かれています。

github.com

何で作った

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/aswraphttps://github.com/TimothyYe/skm にインスパイアされています。

github.com

github.com

どうやって使うのか

リリースページ からバイナリを落としてもらい、パスが通るところに置いてください。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をご覧ください。

demo-akm-configure

やっていることは aws configure と同じですが、いくつか便利な機能があります。

  1. シークレットキーをマスクしているのでショルダーハックされづらい
  2. リージョン指定が選択式なので間違いづらい。aws configure だと入力間違いしやすい

他にも色々なサブコマンドがあるのでREADME を見てください。

今後やりたいこと

冒頭に書きましたが、まだまだ発展途中なツールです。GitHubのissue にメモ書き程度で投げていますが、今後は以下のことをやっていきたいです。

  • akm use でエラー出力されないバグを修正
  • Windows対応
  • Assume Role対応
  • MFA対応
  • TUIをもっとカラフルにしたい
  • サブコマンドがあまり気に入っていないので変更したい
  • Bash/Zsh 補完をしたい

最後に

個人的にかなり便利だと思っていますので、ぜひ使ってみてください。
良ければGitHubリポジトリにスターをつけてもらえるとめっちゃ嬉しいです。