envchainでAWSのアクセストークン等を安全に管理する


envchainはAWSのアクセスキーのような機密情報を含む環境変数をmacOSのKeychainに保存し、コマンドを実行するときにそれを復号してくれるCLIツールだ。機密の環境変数を.bashrcなどに書いてしまうより、安全に管理することができる。

取説

❯ envchain
envchain version 1.0.1

Usage:
  Add variables
    envchain (--set|-s) [--[no-]require-passphrase|-p|-P] [--noecho|-n] NAMESPACE ENV [ENV ..]
  Execute with variables
    envchain NAMESPACE CMD [ARG ...]

Options:
  --set (-s):
    Add keychain item of environment variable +ENV+ for namespace +NAMESPACE+.

  --noecho (-n):
    Enable noecho mode when prompting values. Requires stdin to be a terminal.

  --require-passphrase (-p), --no-require-passphrase (-P):
    Replace the item's ACL list to require passphrase (or not).
    Leave as is when both options are omitted.

AWSのアクセスキー等をKeychainに登録する

envchain --set ネームスペース 環境変数名の形式でコマンドを呼び出すと、環境変数をKeychainに登録することができる。ネームスペースは好みで決める。フォルダ名のようなものだ。環境変数は複数指定することもできる。例えば、AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYを登録するには次のようにする:

❯ envchain --set aws AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY
aws.AWS_ACCESS_KEY_ID: (アクセスキーを入力)
aws.AWS_SECRET_ACCESS_KEY: (シークレットアクセスキーを入力)

コマンドを実行すると、変数の値を聞かれるので値を入力していく。

登録した環境変数を確認する

登録した環境変数を確認するには次のようなコマンドを実行する:envchain ネームスペース env

❯ envchain aws env | grep AWS
AWS_ACCESS_KEY_ID=*******************
AWS_SECRET_ACCESS_KEY=*********************************

この状態でKeychain Accessを開いて"envchain"を検索すると、2つの変数が登録されているのが確認できる。

環境変数を復号した状態でコマンドを実行する

envchainenvchain ネームスペース 実行したいコマンドの順で引数を渡すと、環境変数を復号した状態でコマンドを実行してくれる。例えば、aws iam get-userを実行させるときは次のようになる:

❯ envchain aws aws iam get-user
{
    "User": {
        "Path": "/",
        "UserName": "suin",
        "UserId": "*************",
        "Arn": "arn:aws:iam::************:user/suin",
        "CreateDate": "2014-01-29T08:12:23Z",
        "PasswordLastUsed": "2017-01-16T00:41:34Z"
    }
}

この例のaws awsは誤植ではない。左はネームスペース、右はawscliだ。