パスワード管理アプリのデータバックアップを自動化し、より堅固でセキュアな管理を目指している話

4.8K Views

September 27, 23

スライド概要

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

パスワード管理アプリのデータバックアップを自動化し より堅固でセキュアな管理を目指している話 by kenta fujimoto

2.

自己紹介 CROOZ SHOPLIST 株式会社 所属 福岡(7年) → 関東(2年目) 趣味:アイドルヲタク、フェス参戦など Kenta Twitter: https://twitter.com/kenta_f_2020 最近は図書館巡りに没頭

3.

皆さんは普段、 パスワード管理アプリ 何を使用していますか?

5.

私は Bitwarden を 使っています

6.

BitWardenって何︖ ・暗号化された保管庫にウェブサイトの資格情報などを保存する OSS のパスワードマネージャー ・ソースは以下で公開されている。 https://github.com/bitwarden ・主要な機能は全て無料で使える。

7.

BitWardenのデータバックアップ (自動化前)

8.

BitWardenのデータバックアップ(⾃動化前) ・BitwardenのCLIを使用し ローカルPCへ手動でバックアップ (毎月末やっていた) ・本当はクラウドに上げるなど したかったがセキュリティ的な 懸念を持っていた

9.

そんな中、とある悲劇が・・・

10.

⾃宅のデータ保管⽤NASが異⾳と共に・・・ ・自宅のデータ保管用NASが 異音と共に死んでしまう ・バックアップは別にとっていたが 以降、ローカルで保存することの 恐怖に怯えてしまう

11.

それならいっそ、バックアップファイルを クラウドに上げる所まで自動化したい...!!

12.

さきほどのクラウドにあげる懸念の話...

13.

クラウドに上げれない懸念とは のバックアップの自分的要件 Bitwarden ・Bitwarden CLI BitwardenのCLIでのエクスポート機能は 「 生のCSV形式およびJSON形式 」 のファイル形式でしか落とせない。

15.

全部丸見え じゃないか

16.

ということで・・・ バックアップの自分的要件を整理

17.

Bitwardenのバックアップの自分的要件 ・Bitwarden CLIからエクスポートする機能は今まで通り活用 ・CSVおよびJSONでエクスポートしたデータはZipファイルに固める ・Zipに固める際はランダムパスワード(英数記号128文字)で暗号化 (暗号化方式は強度が高い”AES-256”方式を使用) ・ZipファイルはAWS S3へアップロード ・ZipファイルのパスワードはAWS DynamoDBに保管。 ・GitHub Actionsを利用し、毎月1日に定期バックアップ実行

18.

構成イメージ

19.

構成についての落としどころ なぜ DynamoDB? → 単純に NoSQL に触れてみたかったから。 → あとRDBでインスタンスを建てるより コストが掛からなかったから。 (今回の使用用途では、実質0円。)

20.

構成についての落としどころ パスワード付きZIPファイルはそもそもセキュリティ的にどうなの? → これは単純に自己満足の世界、精神衛生上の施しです。 ウイルス対策ソフトの検知対象にできないなど 懸念点があることは理解しておりますが、 今回は触れないことにします。 ( PPAP (セキュリティ) - Wikipedia )

23.

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}}

24.

パイプライン実行ログ ・出力した実行ログが そのままActionsの画面内 で確認できるので便利だ なぁと感じました。 ・実行完了後の処理も カスタマイズできるため、 「バックアップ結果をLINEに 通知」みたいな事も出来そう。

25.

バックアップ保存結果 AWS S3 S3には今回バックアップした ZIPファイルが保存された!!

26.

バックアップ保存結果 AWS DynamoDB DynamoDBにはファイル名と パスワードが保存された!!

27.

バックアップ保存結果 S3からZipファイルを落として DynamoDBに保存したパスワードで解凍する 問題なく解凍できた!

28.

まとめ・所感 ・RDB出身者としてはNoSQLの扱い方が難しかったです。 (今回のようなごく簡単なプログラムならまだしも、業務で本格的にDB設計 しようとするとテーブル設計を考え抜かないといけないなと感じました。) 参考: DynamoDB の設計について考えてみる。 - Qiita ・Github Actionsを初めて使用してみて、トリガーの豊富さや実行内容の カスタマイズ性に驚きました。もっといろんなことが出来そうなので、 この機会にもっとCI/CDについて深く学んでいきたいなと感じました。

29.

最後にひとつ余談・・・

30.

(余談) このLTを作っている最中に・・・ ・実はこのLTを作っている最中の 9/11(日曜) に Bitwarden CLIのログイン機構に機能改修が入り、 ログインできずにバックアップがコケてしまうように・・・ → それに対応してバックアップシェルも急遽修正を入れながら対応。 自動化による時間効率化とは裏腹にメンテナンスにかかる手間・時間を考えると 自動化するべきかどうかの判断 は、思いの外難しいなと感じました。

31.

以上になります。 ご清聴ありがとうございました!