設定ファイルに依存したツールをコンテナ化したり、ローカルのクレデンシャルをローテしたりできる超絶便利ツール作った！！

# イシュー的な
みんなはこんな課題無いっすか？

- **設定ファイルに依存するツール**なのでEC2運用から脱却できない。コンテナ使いたいなぁ・・
- 設定情報を管理するのにTerraformとAnsibleの**2重コード管理**になってて面倒だから一本化したい
- ローカルのMac開発が浸透しちゃってて**強力なクレデンシャルがローテするのが出来なくなってる**

現行運用って側面の重力でクラウドネィティブ化出来なかったり、セキュアに出来なかったり・・・
折角AWS使ってるのにデータセンターな運用とあんま変わらないし、昨今のクレデンシャル漏洩も気になる。

### このツール使って一気に解決だーーーー！

# これです、これ

LinuxでもWindowsでもMacでも動くぞ

[![yasutakatou/secretloader - GitHub](https://gh-card.dev/repos/yasutakatou/secretloader.svg)](https://github.com/yasutakatou/secretloader)

# なんスか、これ？

- **テンプレートファイルにAWS Secrets Managerのプレーンテキスト情報を取得してファイルを生成します**
- **ループモードではSecrets Managerの内容に差分があったらファイルを再生成します**

こんだけ

# こんなこと出来るよ！
## 秘匿情報アリな設定ファイルの一部をマスクしたり、設定情報をAWSで管理させたり

例えばこんなmyPasswordなんてパスワードべた書きな設定ファイルがあったとして、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189193/48fda088-6552-8d2e-5b73-4de16ccb85de.png)

こんなかんじに一部をSecret Managerの名前に書き換えたテンプレを作っておく

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189193/6c0dfbfa-6487-ae39-0d44-a7d31976efb1.png)

Secret Managerにプレーンテキストで設定情報を書いておく

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189193/5b011a58-d051-435c-3e67-56d633c00867.png)

ツールを動かすと復元できるってワケ

```
$ secretloader -outputFile=slabot.ini
config file update!: slabot.ini
```

## ループモードで設定を自動反映させる

ループモードはSecret Managerの情報を**チェックサムで見続け、差分があったらファイルを生成する**動作をします。
つまり、**設定ファイルのホットロード機能をもってるツールだとSecret Managerの情報を書き換えると設定が反映される！**

## ローカルのクレデンシャルをローテートさせる

ローカルのプロファイルに**ローテーション用の定義を２つ**入れておく

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189193/86bbb573-d5c1-e665-8d2b-9bfab4e29244.png)

AWSのSecret Managerにも同じ定義を入れておく

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189193/44e2ce84-c81d-750a-3421-65231cc40622.png)

**PC起動時に以下のようなプロファイル生成スクリプト**を仕込みます

```
#!/bin/bash

export AWS_PROFILE=ProfileA
secretloader -outputFile=${HOME}/.aws/credentials
if [ $? -ne 0 ]; then
   export AWS_PROFILE=ProfileB
   secretloader -outputFile=${HOME}/.aws/credentials
fi
```

普段は最初のプロファイルでクレデンシャルが読み込まれます

```
$ bash -x update.sh
+ export AWS_PROFILE=ProfileA
+ AWS_PROFILE=ProfileA
+ ./secretloader -outputFile=/home/ady/.aws/credentials
config file update!: credentials
+ '[' 0 -ne 0 ']'
```

最初のクレデンシャルを更新しても、次のクレデンシャルで生成されます！**時間を空けて2個目も更新すればローテできる！！**

```
$ bash -x update.sh
+ export AWS_PROFILE=ProfileA
+ AWS_PROFILE=ProfileA
+ ./secretloader -outputFile=/home/ady/.aws/credentials
secret not found! :SECRET1
+ '[' 1 -ne 0 ']'
+ export AWS_PROFILE=ProfileB
+ AWS_PROFILE=ProfileB
+ ./secretloader -outputFile=/home/ady/.aws/credentials
config file update!: /home/ady/.aws/credentials
```

# と、いうわけで

- 設定ファイルに依存するツールなのでEC2運用から脱却できない。コンテナ使いたいなぁ・・

コンテナ起動時にこのツールを動かせば設定情報を反映したものをデプロイ出来るようになるので、
**レガシーなツールもコンテナ**に持ってくことが出来るようになりました！
また、**ホットロード対応のツールなら設定変更も動的に出来るように！！**

- 設定情報を管理するのにTerraformとAnsibleの2重コード管理になってて面倒だから一本化したい

Terraformで**Secret Managerを更新すれば設定が反映される**のでAnsibleとの2重管理要らなくなります

- ローカルのMac開発が浸透しちゃってて強力なクレデンシャルがローテするのが出来なくなってる

ちょっとギミックありですが、上記の通りローテーション出来るようになります。
**もし漏洩が発生しても漏れたクレデンシャルをローテしちゃえば良いのでセキュリティ的にもめっちゃ向上しますね！**

# 久々過ぎる・・・
Qiitaに投稿するのも、ツール書くのも一年ぶりくらいｗ　おひさー！
忙しいのもあったし、仕事では書いてたりしてたけど、個人開発で書きたいのが思い浮かばなかったのもあって。
でも久々にこれ欲しい！ってのがムクムク湧いてきたのでやってみましたー

### こういうモヤを仕事しながらみつけて解消できる！やっぱSREっておもしれぇジョブなんだよなって改めて思う