My Works

mTLS認証を採用したサーバーレス ペットモニタリングシステムの設計・開発

mTLS認証を採用したサーバーレス ペットモニタリングシステムの設計・開発

プロジェクト概要

家庭用のペット監視システムとして、Raspberry Piで撮影した動画をクラウドストレージに保存し、Webブラウザから安全に閲覧できるシステムを設計・開発しました。セキュリティを重視し、家族限定のアクセス制御とコスト最適化を両立したサーバーレスアーキテクチャを採用しています。

1. セキュアなアクセス制御の実現

課題: 家族のみがアクセスできる強固な認証システムが必要

解決策: mTLS(相互TLS認証)の採用

- API GatewayのネイティブmTLS機能を活用

- クライアント証明書による相互認証を実装

- 自己署名CA証明書の管理体制を構築

2. 運用コストの最適化

課題: 24時間稼働するサーバーのコストを削減

解決策: 完全サーバーレスアーキテクチャ

- API Gateway + S3によるプロキシ構成

- Lambda関数最小化(通知機能のみ)

- 30日自動削除によるストレージコスト制御

3. リアルタイム通知の実現

課題: 新しい動画アップロード時の即座な通知

解決策: Web Push通知システム

- S3イベント → Lambda → Web Push APIの連携

- VAPID方式による標準準拠の実装

- PWA対応でアプリライクな通知体験

アーキテクチャ・技術選定

インフラストラクチャ

- IaC: Terraform による再現可能なインフラ管理

- クラウド: AWS (API Gateway, S3, Lambda, Route 53, ACM)

- 認証: mTLS + クライアント証明書

フロントエンド

- 技術: バニラJavaScript(フレームワーク非依存)

- PWA: Progressive Web App対応

- UI: レスポンシブデザイン、日本語対応

セキュリティ設計

- 認証: mTLS相互認証

- アクセス制御: IAMロールベース最小権限

- データ保護: S3プライベートバケット + API Gatewayプロキシ

実装の工夫点

1. フレームワーク非依存設計

- 長期保守性を重視し、外部依存を最小化

- バニラJavaScriptによるシンプルな実装

- ビルドプロセス不要で軽量な構成

2. 運用自動化

- Raspberry Pi用アップロードスクリプトの自動化とcronによる定期実行

- index.jsonメタデータの自動更新

- Terraformによるインフラのコード化

3. パフォーマンス最適化

- サムネイル表示による初期ロード高速化

- 静的ファイル配信によるレスポンス向上

- クライアントサイドキャッシュ活用

4. Web標準準拠

- Web Push API(VAPID)による通知実装

- Service Workerを活用したオフライン対応

- PWAマニフェストによるアプリ体験

成果・効果

技術的成果

- セキュリティ: 証明書ベースの強固な認証システム

- 可用性: AWSマネージドサービスによる高可用性(99.99%+)

- 保守性: 依存関係最小化による長期保守性確保

運用効果

- メンテナンスフリー: サーバー管理不要

- ユーザビリティ: PWA対応によるアプリライクな体験

- 自動化: デプロイからライフサイクル管理まで完全自動化

使用技術

- インフラ: AWS (API Gateway, S3, Lambda, Route 53, ACM), Terraform

- 認証: mTLS, X.509証明書, 自己署名CA

- フロントエンド: JavaScript (ES6+), HTML5, CSS3, PWA

- 通知: Web Push API, VAPID, Service Worker

プロジェクトを通じた感想・気づき

このプロジェクトを通じて、「完璧を求めず、実用的な解決策を見つける」 ことの重要性を強く実感しました。技術的に理想的でなくても、要件を満たし運用可能なソリューションこそが価値を生み出すということを、数々の課題解決を通じて学びました。

また、個人開発におけるドキュメント化の価値も改めて認識しました。Obsidianを活用した実装履歴の記録により、後から振り返っての知見整理や、類似課題への対応が格段に効率化されました。

技術面では、クラウドネイティブ設計の奥深さを実感しました。単純にサービスを組み合わせるだけでなく、各サービスの特性を理解し、制約の中で最適解を見つけることの難しさと面白さを感じました。特にAPI Gatewayの柔軟性とS3の信頼性を組み合わせたアーキテクチャは、シンプルでありながら実用的なソリューションとなりました。

このプロジェクトで得た経験は、今後のシステム設計において、技術選定の判断力や実装における妥協点の見極めに大きく活かせると確信しています。

実装後のwebアプリケーション(鋭意アップデート実施中)

fish with born icon

トップへ

fish with born icon