【技術備忘録⑧】パスワードやトークンなどの重要秘匿情報を「envchain」を利用して安全に管理。

- 現在利用している言語や技術の記法や不明点等を記録していく記事第八弾。
- 「得体の知れない賢人ミステリアス開発者」という響きに、異常に魅力を感じて変身方法を調査する、年齢通りのこじらせ者。
- 今回は、今までファイル等で管理していた認証・秘匿情報を「envchain」を利用して管理する方法を記録することにしよう。

## 概要
- 認証情報等で利用する環境変数を安全に管理することができるツール。
- Macの情報管理ツール「キーチェーンアクセス」を利用して、保存・参照をするため、平文管理に比べて安全。
- [公式Github](https://github.com/sorah/envchain)

## 特徴

### 暗号管理
- 通常平文・テキストで管理される「トークンや環境変数」を、暗号化して各環境(Mac,Linux)の管理ツールで保管してくれる。
- また、呼び出し・参照時に復号化してくれるため、より強固で安全に重要情報を利用できる。

### 汎用性
- 特定の情報ではなく、様々な環境変数を「保存・参照・利用」できるため、汎用的に重要情報を管理することができる。

## 結果
- 下記のように、認証情報を参照するツールを利用する際に、ファイルやプロファイルに設定せずに、安全に利用することができる。

<img width="751" alt="test.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336499/5465500a-65ec-73a2-9461-262718dffdda.png">

<img width="630" alt="test7.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336499/88ee8174-a7a0-66d7-c7b4-7b8c6d58f944.png">

- また下記のように、ファイルへ参照情報を渡しての実行も可能なため、`.env`等の認証情報ファイルを用意する必要がなく、様々な場面で利用可能。
    - **※下記は、MySQLのユーザーやパスを設定して、Dockerでデータベースを起動・接続**
    - **※ファイル中身表示コマンドとして、[bat](https://qiita.com/t_o_d/items/d3799294a6a935f78f8f)というツールを利用。**

<img width="882" alt="fhdjksh.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336499/a32283ef-88a4-54ab-c306-9c7acfd26402.png">

## 環境
- Mac OS X 10.13.4
- Homebrew 2.1.4

## インストール

### Mac
- Macの場合、下記のコマンドを入力して、envchainをインストールする。
    - **※※Homebrew未導入の場合、[こちら](https://brew.sh/index_ja)を参考にインストールする。**

```bash
# envchainのインストール
$ brew install envchain
```

### その他
- その他(Linux)環境の場合、[こちら](https://github.com/sorah/envchain#installation)を参考にインストールする。
    - **※現時点でWindowsでの利用は確認できていない。**

## 基本操作一覧
- envchainの設定・参照等の基本操作コマンドとしては下記。

|コマンド|内容|
|:---:|:---:|
|`envchain --set 管理名 環境変数名 環境変数名2`|環境変数の設定。任意の管理名(グループ名)で環境変数名を設定する。<br>例: `envchain --set aws_test_user AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY`<br>**※コマンド実行後、変数名順に入力を求められるため、認証情報を入力する。**|
|`envchain 管理名 env`|設定した環境変数の確認。<br>全情報が表示されるため、grepコマンドでの抽出可能。<br>例: `envchain dbinfo env`|
|`envchain --set --noecho 管理名 環境変数名`|ユーザー入力の非表示。変数名の入力の際に入力している情報を表示しない。<br>例: `envchain --set --noecho aws_test_user AWS_ACCESS_KEY_ID`|
|`envchain --set --require-passphrase 管理名`|管理ツール(キーチェーン)のパスワード要求設定。|
|`envchain --set --no-require-passphrase 管理名`|管理ツール(キーチェーン)のパスワード非要求設定。|
|`envchain 管理名 実行コマンド`|管理している環境変数の実行コマンドでの参照。<br>例: `envchain aws_user aws s3 ls`<br>例: `envchain dbinfo docker-compose up -d`<br>**※dockerやnode等のファイル実行の際、ファイルの中身の参照箇所で`$環境変数名`のように変数として定義することで、参照される。**|

## 画面での確認
- 前述の通り、Mac利用の際には環境変数は「キーチェーンアクセス」という認証情報管理ツールに保管される。
- キーチェーンアクセスの画面で直接確認する方法は下記。
    - 1. ファイルパス`/Applications/Utilities/`の中にある「キーチェーンアクセス.app」をクリック
    - 2. 起動後、管理画面が表示されるため、右上の検索ボックスで「envchain」と入力して設定情報を確認する
    - 3. 完了。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336499/9863145f-4bd0-df01-4e65-df907ac1af44.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336499/91d12625-5053-a867-5dbe-c2460d57b40d.png)

## まとめ
- 今回は秘匿情報の管理ということで、あらゆる感覚の中で、きらめき度最上位の「強固感」を味わいながら記事を書く。
- 「管理技術の矛先を人類に向けて、私の口滑らせを一目散に消滅してほしい」という思考が、数日間の中で九割。
- 今回の利用ツールの「汎用さ」の部分に惹かれたため、この言葉を深く胸に刻みながら、次回の調査をすることにしよう。

## 参考
- https://github.com/sorah/envchain  
→公式Githubです。大変お世話になりました。
- https://qiita.com/suin/items/099bd41bcb57e8fd413b  
→こちらの記事を参考にしました。大変お世話になりました。
- https://github.com/cookpad/cookpad-internship-2018-summer/blob/master/infra/05_hako_tutorial.md  
→こちらの利用方法を参考にしました。大変お世話になりました。