🤫
予算0円×SaaSは封印×所用時間5分!機密情報(パスワードやシークレットなど)を安全にgitで管理する!
機密情報、どうやって管理してますか?
本記事では、タイトルの通り予算0円でSaaSを封印し、所用時間5分でできる方法を紹介します。
※CLIを使う方法の紹介なので、ちょっとエンジニア向けな内容にはなります。
イントロダクション
- データベースのパスワード
- クレジットカードの番号
- 2段階認証のリカバリーコード
- APIキー(ChatGPTとかSendGridとか)
- ついつい使い回したくなっちゃうトークン(GitHubのPATなど)
私は上記の情報を良く参照するので、いつでも何の端末でもすぐに見れるようにしたいと思ってます。
しかし、テキストファイルへの保存は流石に避けたいし、発行後にマスキングされたりして2度と見れないような情報もあり、扱いに困っていました。
レギュレーション
- 予算0円で頑張る。
- 例え無料でもSaaSは使わない。
- 有料化した時に辛いから。
- なるべくPCを汚さない。
- CLIで使える。
大まかな流れ
-
pass
コマンド,gpg
コマンドをインストールする(1分) -
gpgキー
を作成する(1分) -
pass
の初期設定を行う(1分) -
pass
に機密情報を追加したり取得したりする(2分)
手順の詳細
コマンドのインストール
※Macユーザーなのでbrew
コマンドを使ってますが、apt
コマンドなどでも置き換えられます。
-
pass
コマンドを使えるようにします。- 実行コマンド:
brew install pass
- Pass: The Standard Unix Password Manager
- passコマンドの中身は只のbashスクリプトで、gpgでの暗号化/復号化とgitのラッパーになってるようです。
- 実行コマンド:
-
gpg
コマンドを使えるようにします。標準でインストールされている可能性もあります。- 実行コマンド:
brew install gnupg
- 実行コマンド:
セットアップ
-
gpgキー
を作成します。- 実行コマンド:
gpg --expert --full-gen-key
実行例$ gpg --expert --full-gen-key gpg (GnuPG) 2.2.27; Copyright (C) 2021 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Please select what kind of key you want: (1) RSA and RSA (default) (2) DSA and Elgamal (3) DSA (sign only) (4) RSA (sign only) (7) DSA (set your own capabilities) (8) RSA (set your own capabilities) (9) ECC and ECC (10) ECC (sign only) (11) ECC (set your own capabilities) (13) Existing key (14) Existing key from card Your selection? 9 # ✨ 楕円曲線暗号にしてみた。今回は主鍵と複鍵が必要。 Please select which elliptic curve you want: (1) Curve 25519 (3) NIST P-256 (4) NIST P-384 (5) NIST P-521 (6) Brainpool P-256 (7) Brainpool P-384 (8) Brainpool P-512 (9) secp256k1 Your selection? 1 # ✨ Curve25519にしてみた。 Please specify how long the key should be valid. 0 = key does not expire <n> = key expires in n days <n>w = key expires in n weeks <n>m = key expires in n months <n>y = key expires in n years Key is valid for? (0) 0 # ✨ とりあえず無期限 Key does not expire at all Is this correct? (y/N) y GnuPG needs to construct a user ID to identify your key. Real name: yosuke.shinoda Email address: yosuke.shinoda@example.com Comment: You selected this USER-ID: "yosuke.shinoda <yosuke.shinoda@example.com>" Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O gpg: key 8ED8BAA57418A02C marked as ultimately trusted gpg: revocation certificate stored as '/root/.gnupg/openpgp-revocs.d/9DDC010357CB553F316C84FC8ED8BAA57418A02C.rev' public and secret key created and signed. pub ed25519 2024-04-24 [SC] 9DDC010357CB553F316C84FC8ED8BAA57418A02C uid yosuke.shinoda <yosuke.shinoda@example.com> sub cv25519 2024-04-24 [E]
- 実行コマンド:
-
pass
にgpgキーを設定します。- 実行コマンド:
pass init 鍵ID
実行例$ pass init 7418A02C
- 鍵IDはgpgキーを作成した際に出力された最後の8桁(上記の実行例だと
7418A02C
)。
- 鍵IDはgpgキーを作成した際に出力された最後の8桁(上記の実行例だと
- 実行コマンド:
-
pass
をgit管理下にします。- 実行コマンド:
pass git init
- 実行コマンド:
- (オプション)
pass
にgitのremoteを設定します。- 実行コマンド:
pass git remote set-url origin https://github.com/octocat/repo.git
- 実行コマンド:
機密情報の追加や確認をしてみる
-
pass insert 好きな階層+名前
で追加する。追加例$ pass insert aws/rds/test-cluster/root Enter password for aws/rds/test-cluster/root: test Retype password for aws/rds/test-cluster/root: test
-
pass
で追加済みデータの一覧が表示される。一覧$ pass Password Store └── aws └── rds └── test-cluster └── root
-
pass 好きな階層+名前
で機密情報が出力される。確認例$ pass aws/rds/test-cluster/root test
他の端末で使う
-
~/.password-store
にgit cloneして、gpgキーをexport/importすれば使えるようになります。 - ちなみに
pass
はiOS/Android用のアプリやChromeの拡張機能、GUIなども提供されているので、gpgキーさえ生成できれば、OSには依存しないで使えます。- Compatible Clientsに色々載ってます。
参考: SaaSや類似ツール
- 1Password(14日無料)
- LastPass
- Bitwarden
- KeePass(無料)
Discussion