AWS Secrets Manager 完全ガイド - シークレット管理とローテーション
AWS Secrets Managerは、パスワード、APIキー、データベース認証情報などのシークレット(機密情報)を安全に保存・管理・ローテーションするためのマネージドサービスです。アプリケーションコード内にハードコードされた認証情報を排除し、セキュリティを向上させながら運用効率を高めます。
シークレット管理の重要性
従来の課題
アプリケーション開発において、認証情報の管理は常に課題となってきました:
Secrets Managerによる解決
Secrets Managerの基本機能
シークレットの種類
Secrets Managerは、様々な種類のシークレットを管理できます:
シークレット種類 | 用途例 | 自動ローテーション対応 |
---|---|---|
データベース認証情報 | RDS、Aurora、Redshift | ✅ |
APIキー | 外部サービス連携 | 手動設定 |
OAuth トークン | 認証・認可システム | 手動設定 |
SSH キー | サーバーアクセス | 手動設定 |
暗号化キー | アプリケーション暗号化 | 手動設定 |
暗号化とセキュリティ
セキュリティ機能:
保存時の暗号化:
- AWS KMS による暗号化
- カスタマー管理キー対応
- 自動鍵ローテーション
転送時の暗号化:
- TLS 1.2 による通信保護
- HTTPS API エンドポイント
- VPC エンドポイント対応
アクセス制御:
- IAM ポリシー統合
- リソースベースポリシー
- 条件付きアクセス
自動ローテーション機能
サポートされるデータベース
AWS Secrets Managerは、主要なデータベースサービスで自動ローテーションをサポートしています:
自動ローテーション対応DB:
Amazon RDS:
- MySQL, MariaDB
- PostgreSQL
- Oracle Database
- SQL Server
Amazon Aurora:
- Aurora MySQL
- Aurora PostgreSQL
Amazon Redshift:
- クラスター認証情報
- ユーザー認証情報
ローテーションプロセス
カスタムローテーション
データベース以外のシークレットについても、Lambda関数を使用してカスタムローテーションを実装できます:
カスタムローテーション例:
APIキー:
- 外部サービスAPI呼び出し
- 新しいキー生成
- 古いキー無効化
認証トークン:
- OAuth リフレッシュ
- JWTトークン更新
- セッション管理
アプリケーション統合
SDK を使用したシークレット取得
各プログラミング言語のSDKを使用してシークレットを取得できます:
SDKサポート:
対応言語:
- Python (boto3)
- Java (AWS SDK)
- .NET (AWS SDK)
- Node.js (AWS SDK)
- Go (AWS SDK)
- PHP (AWS SDK)
基本的な取得パターン:
1. Secrets Manager クライアント初期化
2. get_secret_value API 呼び出し
3. JSON パース(必要に応じて)
4. 認証情報の使用
キャッシュ機能
Secrets Manager Client-Side Cachingを使用することで、パフォーマンスとコストを最適化できます:
キャッシュの利点:
パフォーマンス:
- レスポンス時間短縮
- API呼び出し回数削減
- ネットワーク負荷軽減
コスト削減:
- API呼び出し料金削減
- データ転送料金削減
設定項目:
- TTL(Time To Live)
- キャッシュサイズ
- リフレッシュ間隔
障害時の対策
リージョン間レプリケーション
マルチリージョン戦略
災害復旧やコンプライアンス要件のため、シークレットを複数リージョンで複製できます:
レプリケーション機能:
自動レプリケーション:
- 複数リージョンへの同期
- 暗号化キーの個別管理
- 自動ローテーション継承
レプリケーション対象:
- シークレット値
- メタデータ
- バージョン履歴
- ローテーション設定
災害復旧計画
DR戦略:
プライマリリージョン障害時:
1. 自動フェイルオーバー設定
2. アプリケーション設定変更
3. DNS切り替え(必要に応じて)
復旧時の考慮事項:
- データ整合性確認
- ローテーション状態同期
- 監査ログの統合
監視と運用
CloudWatchメトリクス
Secrets Managerの利用状況は、CloudWatchメトリクスで監視できます:
重要メトリクス:
API使用状況:
- GetSecretValue呼び出し数
- PutSecretValue呼び出し数
- RotateSecret呼び出し数
エラー状況:
- API エラー率
- ローテーション失敗数
- アクセス拒否回数
パフォーマンス:
- レスポンス時間
- スロットリング発生回数
CloudTrail統合
全てのSecrets Manager操作はCloudTrailに記録されます:
監査対象イベント:
シークレット操作:
- CreateSecret(シークレット作成)
- GetSecretValue(値取得)
- UpdateSecret(更新)
- DeleteSecret(削除)
ローテーション操作:
- RotateSecret(手動ローテーション)
- UpdateSecretVersionStage(バージョン管理)
設定変更:
- PutResourcePolicy(リソースポリシー)
- TagResource(タグ操作)
アラートと通知
推奨アラート設定:
セキュリティアラート:
- 不正アクセス試行
- 権限エラー多発
- 予期しない地域からのアクセス
運用アラート:
- ローテーション失敗
- API エラー率上昇
- レスポンス時間悪化
セキュリティベストプラクティス
アクセス制御設計
最小権限の原則:
アプリケーション権限:
- 必要なシークレットのみアクセス許可
- 読み取り専用権限の適用
- 条件付きアクセス制御
管理者権限:
- シークレット作成・削除権限
- ローテーション設定権限
- ポリシー管理権限
監査者権限:
- 読み取り専用アクセス
- ログ参照権限
- メトリクス確認権限
ネットワークセキュリティ
ネットワーク保護:
VPCエンドポイント:
- インターネット経由を避ける
- プライベート通信路確保
- ネットワークACL制御
セキュリティグループ:
- 必要最小限のポート開放
- 送信元IP制限
- プロトコル制限
暗号化管理
暗号化戦略:
KMS鍵管理:
- カスタマー管理キー使用
- 鍵のローテーション有効化
- アクセスログ監視
エンベロープ暗号化:
- データキーの自動生成
- マスターキーでの保護
- 復号権限の細かい制御
コスト最適化
料金構造
Secrets Manager 料金:
基本料金:
- シークレット月額料金
- API呼び出し料金
- レプリケーション料金
最適化ポイント:
- 不要シークレットの削除
- API呼び出し回数の最小化
- キャッシュ活用
運用コスト削減
コスト削減戦略:
API最適化:
- クライアントサイドキャッシング
- 適切なTTL設定
- バッチ処理の活用
リソース管理:
- 使用されていないシークレット削除
- レプリケーション先の最適化
- 自動化による運用効率化
統合例とユースケース
マイクロサービスアーキテクチャ
マイクロサービス統合:
サービス間認証:
- JWTシークレット管理
- API キー管理
- 相互認証証明書
データベース接続:
- サービス別DB認証情報
- 接続プール設定
- 読み取り専用ユーザー管理
CI/CD パイプライン
DevOps統合:
デプロイメント:
- 環境別設定管理
- デプロイキー管理
- 外部サービス認証情報
テスト環境:
- テスト用DB認証情報
- モックサービス設定
- 開発者アクセス制御
IoTアプリケーション
IoT統合:
デバイス認証:
- デバイス証明書管理
- 一意識別キー
- 製造時プロビジョニング
クラウド連携:
- MQTTブローカー認証
- API Gateway認証
- バックエンドサービス接続
トラブルシューティング
一般的な問題と対処法
1. アクセス権限エラー
権限問題の診断:
確認項目:
- IAMポリシー設定
- リソースベースポリシー
- KMS キー権限
対処法:
- CloudTrail でのアクセス試行確認
- ポリシー シミュレーター使用
- 段階的な権限付与テスト
2. ローテーション失敗
ローテーション問題:
失敗要因:
- Lambdaファンクション権限不足
- データベース接続問題
- ネットワーク設定問題
対処手順:
1. CloudWatch Logsでエラー確認
2. Lambda実行ロール権限確認
3. VPC/セキュリティグループ設定確認
4. 手動テスト実行
3. パフォーマンス問題
パフォーマンス改善:
最適化手法:
- キャッシュ設定の調整
- 並行処理の最適化
- リージョン選択の見直し
- バッチ処理の実装
まとめ
AWS Secrets Managerは、現代のアプリケーション開発におけるシークレット管理の課題を包括的に解決するサービスです。自動ローテーション機能により運用負荷を軽減し、強力な暗号化とアクセス制御によりセキュリティを向上させます。
適切な設計と運用により、セキュリティリスクを大幅に削減しながら、開発・運用効率を向上させることができます。特に、コンプライアンス要件が厳しい業界や大規模なシステムにおいて、その価値を発揮するサービスといえます。
参考資料: