5K Views
September 27, 23
スライド概要
パスワード管理アプリのデータバックアップを自動化し より堅固でセキュアな管理を目指している話 by kenta fujimoto
自己紹介 CROOZ SHOPLIST 株式会社 所属 福岡(7年) → 関東(2年目) 趣味:アイドルヲタク、フェス参戦など Kenta Twitter: https://twitter.com/kenta_f_2020 最近は図書館巡りに没頭
皆さんは普段、 パスワード管理アプリ 何を使用していますか?
私は Bitwarden を 使っています
BitWardenって何︖ ・暗号化された保管庫にウェブサイトの資格情報などを保存する OSS のパスワードマネージャー ・ソースは以下で公開されている。 https://github.com/bitwarden ・主要な機能は全て無料で使える。
BitWardenのデータバックアップ (自動化前)
BitWardenのデータバックアップ(⾃動化前) ・BitwardenのCLIを使用し ローカルPCへ手動でバックアップ (毎月末やっていた) ・本当はクラウドに上げるなど したかったがセキュリティ的な 懸念を持っていた
そんな中、とある悲劇が・・・
⾃宅のデータ保管⽤NASが異⾳と共に・・・ ・自宅のデータ保管用NASが 異音と共に死んでしまう ・バックアップは別にとっていたが 以降、ローカルで保存することの 恐怖に怯えてしまう
それならいっそ、バックアップファイルを クラウドに上げる所まで自動化したい...!!
さきほどのクラウドにあげる懸念の話...
クラウドに上げれない懸念とは のバックアップの自分的要件 Bitwarden ・Bitwarden CLI BitwardenのCLIでのエクスポート機能は 「 生のCSV形式およびJSON形式 」 のファイル形式でしか落とせない。
全部丸見え じゃないか
ということで・・・ バックアップの自分的要件を整理
Bitwardenのバックアップの自分的要件 ・Bitwarden CLIからエクスポートする機能は今まで通り活用 ・CSVおよびJSONでエクスポートしたデータはZipファイルに固める ・Zipに固める際はランダムパスワード(英数記号128文字)で暗号化 (暗号化方式は強度が高い”AES-256”方式を使用) ・ZipファイルはAWS S3へアップロード ・ZipファイルのパスワードはAWS DynamoDBに保管。 ・GitHub Actionsを利用し、毎月1日に定期バックアップ実行
構成イメージ
構成についての落としどころ なぜ DynamoDB? → 単純に NoSQL に触れてみたかったから。 → あとRDBでインスタンスを建てるより コストが掛からなかったから。 (今回の使用用途では、実質0円。)
構成についての落としどころ パスワード付きZIPファイルはそもそもセキュリティ的にどうなの? → これは単純に自己満足の世界、精神衛生上の施しです。 ウイルス対策ソフトの検知対象にできないなど 懸念点があることは理解しておりますが、 今回は触れないことにします。 ( PPAP (セキュリティ) - Wikipedia )
GitHub Actionsについて name: CI (.github/workflows/ci.yml) on: push: branches: ["master"] ・GitHub Actionsの CI/CD パイプライン実行ファイル ・crontabも指定できる! (毎日UTC16時 (=JST 深夜1時) に実行) (安定したら毎月1日へ変更予定) ・秘密鍵などの秘匿情報は GitHub Actions Secretsにて管理 workflow_dispatch: schedule: - cron: "0 16 * * *" jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 # BitWarden エクスポート処理 - name: BitWarden Vault Export id: bw-export run: docker compose run --rm bw sh /app/bw-export.sh env: BW_MAIL: ${{secrets.BW_MAIL}} BW_PASS_ENCRYPTED: ${{secrets.BW_PASS_ENCRYPTED}} BW_CLIENTID: ${{secrets.BW_CLIENTID}} BW_CLIENTSECRET: ${{secrets.BW_CLIENTSECRET}} AWS_ACCESS_KEY_ID: ${{secrets.AWS_ACCESS_KEY_ID}} AWS_SECRET_ACCESS_KEY: ${{secrets.AWS_SECRET_ACCESS_KEY}}
パイプライン実行ログ ・出力した実行ログが そのままActionsの画面内 で確認できるので便利だ なぁと感じました。 ・実行完了後の処理も カスタマイズできるため、 「バックアップ結果をLINEに 通知」みたいな事も出来そう。
バックアップ保存結果 AWS S3 S3には今回バックアップした ZIPファイルが保存された!!
バックアップ保存結果 AWS DynamoDB DynamoDBにはファイル名と パスワードが保存された!!
バックアップ保存結果 S3からZipファイルを落として DynamoDBに保存したパスワードで解凍する 問題なく解凍できた!
まとめ・所感 ・RDB出身者としてはNoSQLの扱い方が難しかったです。 (今回のようなごく簡単なプログラムならまだしも、業務で本格的にDB設計 しようとするとテーブル設計を考え抜かないといけないなと感じました。) 参考: DynamoDB の設計について考えてみる。 - Qiita ・Github Actionsを初めて使用してみて、トリガーの豊富さや実行内容の カスタマイズ性に驚きました。もっといろんなことが出来そうなので、 この機会にもっとCI/CDについて深く学んでいきたいなと感じました。
最後にひとつ余談・・・
(余談) このLTを作っている最中に・・・ ・実はこのLTを作っている最中の 9/11(日曜) に Bitwarden CLIのログイン機構に機能改修が入り、 ログインできずにバックアップがコケてしまうように・・・ → それに対応してバックアップシェルも急遽修正を入れながら対応。 自動化による時間効率化とは裏腹にメンテナンスにかかる手間・時間を考えると 自動化するべきかどうかの判断 は、思いの外難しいなと感じました。
以上になります。 ご清聴ありがとうございました!