🤫

予算0円×SaaSは封印×所用時間5分!機密情報(パスワードやシークレットなど)を安全にgitで管理する!

2024/04/25に公開

機密情報、どうやって管理してますか?
本記事では、タイトルの通り予算0円でSaaSを封印し、所用時間5分でできる方法を紹介します。

※CLIを使う方法の紹介なので、ちょっとエンジニア向けな内容にはなります。

イントロダクション

  • データベースのパスワード
  • クレジットカードの番号
  • 2段階認証のリカバリーコード
  • APIキー(ChatGPTとかSendGridとか)
  • ついつい使い回したくなっちゃうトークン(GitHubのPATなど)

私は上記の情報を良く参照するので、いつでも何の端末でもすぐに見れるようにしたいと思ってます。
しかし、テキストファイルへの保存は流石に避けたいし、発行後にマスキングされたりして2度と見れないような情報もあり、扱いに困っていました。

レギュレーション

  • 予算0円で頑張る。
  • 例え無料でもSaaSは使わない。
    • 有料化した時に辛いから。
  • なるべくPCを汚さない。
  • CLIで使える。

大まかな流れ

  1. passコマンド, gpgコマンドをインストールする(1分)
  2. gpgキーを作成する(1分)
  3. passの初期設定を行う(1分)
  4. passに機密情報を追加したり取得したりする(2分)

手順の詳細

コマンドのインストール

※Macユーザーなのでbrewコマンドを使ってますが、aptコマンドなどでも置き換えられます。

  1. passコマンドを使えるようにします。
    • 実行コマンド: brew install pass
  2. gpgコマンドを使えるようにします。標準でインストールされている可能性もあります。
    • 実行コマンド: brew install gnupg

セットアップ

  1. 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]
      
  2. passにgpgキーを設定します。
    • 実行コマンド: pass init 鍵ID
      実行例
      $ pass init 7418A02C
      
      • 鍵IDはgpgキーを作成した際に出力された最後の8桁(上記の実行例だと7418A02C)。
  3. passをgit管理下にします。
    • 実行コマンド: pass git init
  4. (オプション)passにgitのremoteを設定します。
    • 実行コマンド: pass git remote set-url origin https://github.com/octocat/repo.git

機密情報の追加や確認をしてみる

  1. 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
    
  2. passで追加済みデータの一覧が表示される。
    一覧
    $ pass
    Password Store
    └── aws
        └── rds
            └── test-cluster
                └── root
    
  3. pass 好きな階層+名前で機密情報が出力される。
    確認例
    $ pass  aws/rds/test-cluster/root
    test
    

他の端末で使う

  • ~/.password-storeにgit cloneして、gpgキーをexport/importすれば使えるようになります。
  • ちなみにpassはiOS/Android用のアプリやChromeの拡張機能、GUIなども提供されているので、gpgキーさえ生成できれば、OSには依存しないで使えます。

参考: SaaSや類似ツール

  • 1Password(14日無料)
  • LastPass
  • Bitwarden
  • KeePass(無料)
レバテック開発部

Discussion