【要約】LINE Botの秘密情報をLambda環境変数からSSMへ移した [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者がLINE Botの初期実装において、セキュリティと依存関係の管理に課題を感じた。具体的には、機密情報の露出リスクと、ライブラリの競合によるデプロイの失敗に直面した。
- ・機密情報がLambda環境変数やCloudFormationに残留するリスク。
- ・
boto3とline-bot-sdkの依存関係が衝突し、ビルドが失敗する問題。 - ・Gemini SDKの導入による依存関係の肥大化。
- ・Webhook失敗時に500を返すと、LINE側がリトライしGeminiが二重実行される問題。
// Approach
開発者は、セキュリティ強化とデプロイの安定化を目指し、以下の手法を採用した。
- ・機密情報をSSMのSecureStringへ集約し、環境変数は非機密情報のみに限定した。
- ・
deploy.shで.envをSSMへ同期し、Lambda側でSSMを参照するロジックを実装した。 - ・Lambda標準の
boto3を活用し、requirements.txtから削除して衝突を回避した。 - ・Gemini APIの呼び出しを
urllibによるREST通信に切り替え、SDK依存を排除した。 - ・署名検証にはraw bodyを使用し、処理失敗時も200を返す設計とした。
// Result
これらの改善により、Botの運用基盤がより堅牢かつ軽量なものへと進化した。
- ・機密情報がSSMに一元化され、設定ファイルへの漏洩リスクが低減した。
- ・依存関係の競合が解消され、
sam buildが正常に動作するようになった。 - ・SDKを排除したことで、デプロイパッケージの軽量化を実現した。
- ・Webhookのリトライ制御により、意図しないAPIの二重呼び出しを防止した。
Senior Engineer Insight
> 個人開発でも、機密情報をSSMに切り出す判断は極めて妥当である。CloudFormationや環境変数に鍵が残るリスクは、本番環境では致命的だ。また、Lambdaの
boto3プリインストール特性を理解し、依存関係を削ぎ落とす判断は、デプロイ速度と安定性の観点から高く評価できる。ただし、SSM取得時のレイテンシがシビアな環境で許容できるかは、別途検証が必要だ。