AWS Secrets Manager 完全ガイド - シークレット管理とローテーション

AWS Secrets Managerは、パスワード、APIキー、データベース認証情報などのシークレット(機密情報)を安全に保存・管理・ローテーションするためのマネージドサービスです。アプリケーションコード内にハードコードされた認証情報を排除し、セキュリティを向上させながら運用効率を高めます。

シークレット管理の重要性

従来の課題

アプリケーション開発において、認証情報の管理は常に課題となってきました:

Secrets Managerによる解決

Secrets Managerの基本機能

シークレットの種類

Secrets Managerは、様々な種類のシークレットを管理できます:

シークレット種類用途例自動ローテーション対応
データベース認証情報RDS、Aurora、Redshift
APIキー外部サービス連携手動設定
OAuth トークン認証・認可システム手動設定
SSH キーサーバーアクセス手動設定
暗号化キーアプリケーション暗号化手動設定

暗号化とセキュリティ

yaml
セキュリティ機能:
  保存時の暗号化:
    - AWS KMS による暗号化
    - カスタマー管理キー対応
    - 自動鍵ローテーション
  
  転送時の暗号化:
    - TLS 1.2 による通信保護
    - HTTPS API エンドポイント
    - VPC エンドポイント対応
  
  アクセス制御:
    - IAM ポリシー統合
    - リソースベースポリシー
    - 条件付きアクセス

自動ローテーション機能

サポートされるデータベース

AWS Secrets Managerは、主要なデータベースサービスで自動ローテーションをサポートしています:

yaml
自動ローテーション対応DB:
  Amazon RDS:
    - MySQL, MariaDB
    - PostgreSQL
    - Oracle Database
    - SQL Server
  
  Amazon Aurora:
    - Aurora MySQL
    - Aurora PostgreSQL
  
  Amazon Redshift:
    - クラスター認証情報
    - ユーザー認証情報

ローテーションプロセス

カスタムローテーション

データベース以外のシークレットについても、Lambda関数を使用してカスタムローテーションを実装できます:

yaml
カスタムローテーション例:
  APIキー:
    - 外部サービスAPI呼び出し
    - 新しいキー生成
    - 古いキー無効化
  
  認証トークン:
    - OAuth リフレッシュ
    - JWTトークン更新
    - セッション管理

アプリケーション統合

SDK を使用したシークレット取得

各プログラミング言語のSDKを使用してシークレットを取得できます:

yaml
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を使用することで、パフォーマンスとコストを最適化できます:

yaml
キャッシュの利点:
  パフォーマンス:
    - レスポンス時間短縮
    - API呼び出し回数削減
    - ネットワーク負荷軽減
  
  コスト削減:
    - API呼び出し料金削減
    - データ転送料金削減
  
  設定項目:
    - TTL(Time To Live)
    - キャッシュサイズ
    - リフレッシュ間隔

障害時の対策

リージョン間レプリケーション

マルチリージョン戦略

災害復旧やコンプライアンス要件のため、シークレットを複数リージョンで複製できます:

yaml
レプリケーション機能:
  自動レプリケーション:
    - 複数リージョンへの同期
    - 暗号化キーの個別管理
    - 自動ローテーション継承
  
  レプリケーション対象:
    - シークレット値
    - メタデータ
    - バージョン履歴
    - ローテーション設定

災害復旧計画

yaml
DR戦略:
  プライマリリージョン障害時:
    1. 自動フェイルオーバー設定
    2. アプリケーション設定変更
    3. DNS切り替え(必要に応じて)
  
  復旧時の考慮事項:
    - データ整合性確認
    - ローテーション状態同期
    - 監査ログの統合

監視と運用

CloudWatchメトリクス

Secrets Managerの利用状況は、CloudWatchメトリクスで監視できます:

yaml
重要メトリクス:
  API使用状況:
    - GetSecretValue呼び出し数
    - PutSecretValue呼び出し数
    - RotateSecret呼び出し数
  
  エラー状況:
    - API エラー率
    - ローテーション失敗数
    - アクセス拒否回数
  
  パフォーマンス:
    - レスポンス時間
    - スロットリング発生回数

CloudTrail統合

全てのSecrets Manager操作はCloudTrailに記録されます:

yaml
監査対象イベント:
  シークレット操作:
    - CreateSecret(シークレット作成)
    - GetSecretValue(値取得)
    - UpdateSecret(更新)
    - DeleteSecret(削除)
  
  ローテーション操作:
    - RotateSecret(手動ローテーション)
    - UpdateSecretVersionStage(バージョン管理)
  
  設定変更:
    - PutResourcePolicy(リソースポリシー)
    - TagResource(タグ操作)

アラートと通知

yaml
推奨アラート設定:
  セキュリティアラート:
    - 不正アクセス試行
    - 権限エラー多発
    - 予期しない地域からのアクセス
  
  運用アラート:
    - ローテーション失敗
    - API エラー率上昇
    - レスポンス時間悪化

セキュリティベストプラクティス

アクセス制御設計

yaml
最小権限の原則:
  アプリケーション権限:
    - 必要なシークレットのみアクセス許可
    - 読み取り専用権限の適用
    - 条件付きアクセス制御
  
  管理者権限:
    - シークレット作成・削除権限
    - ローテーション設定権限
    - ポリシー管理権限
  
  監査者権限:
    - 読み取り専用アクセス
    - ログ参照権限
    - メトリクス確認権限

ネットワークセキュリティ

yaml
ネットワーク保護:
  VPCエンドポイント:
    - インターネット経由を避ける
    - プライベート通信路確保
    - ネットワークACL制御
  
  セキュリティグループ:
    - 必要最小限のポート開放
    - 送信元IP制限
    - プロトコル制限

暗号化管理

yaml
暗号化戦略:
  KMS鍵管理:
    - カスタマー管理キー使用
    - 鍵のローテーション有効化
    - アクセスログ監視
  
  エンベロープ暗号化:
    - データキーの自動生成
    - マスターキーでの保護
    - 復号権限の細かい制御

コスト最適化

料金構造

yaml
Secrets Manager 料金:
  基本料金:
    - シークレット月額料金
    - API呼び出し料金
    - レプリケーション料金
  
  最適化ポイント:
    - 不要シークレットの削除
    - API呼び出し回数の最小化
    - キャッシュ活用

運用コスト削減

yaml
コスト削減戦略:
  API最適化:
    - クライアントサイドキャッシング
    - 適切なTTL設定
    - バッチ処理の活用
  
  リソース管理:
    - 使用されていないシークレット削除
    - レプリケーション先の最適化
    - 自動化による運用効率化

統合例とユースケース

マイクロサービスアーキテクチャ

yaml
マイクロサービス統合:
  サービス間認証:
    - JWTシークレット管理
    - API キー管理
    - 相互認証証明書
  
  データベース接続:
    - サービス別DB認証情報
    - 接続プール設定
    - 読み取り専用ユーザー管理

CI/CD パイプライン

yaml
DevOps統合:
  デプロイメント:
    - 環境別設定管理
    - デプロイキー管理
    - 外部サービス認証情報
  
  テスト環境:
    - テスト用DB認証情報
    - モックサービス設定
    - 開発者アクセス制御

IoTアプリケーション

yaml
IoT統合:
  デバイス認証:
    - デバイス証明書管理
    - 一意識別キー
    - 製造時プロビジョニング
  
  クラウド連携:
    - MQTTブローカー認証
    - API Gateway認証
    - バックエンドサービス接続

トラブルシューティング

一般的な問題と対処法

1. アクセス権限エラー

yaml
権限問題の診断:
  確認項目:
    - IAMポリシー設定
    - リソースベースポリシー
    - KMS キー権限
  
  対処法:
    - CloudTrail でのアクセス試行確認
    - ポリシー シミュレーター使用
    - 段階的な権限付与テスト

2. ローテーション失敗

yaml
ローテーション問題:
  失敗要因:
    - Lambdaファンクション権限不足
    - データベース接続問題
    - ネットワーク設定問題
  
  対処手順:
    1. CloudWatch Logsでエラー確認
    2. Lambda実行ロール権限確認
    3. VPC/セキュリティグループ設定確認
    4. 手動テスト実行

3. パフォーマンス問題

yaml
パフォーマンス改善:
  最適化手法:
    - キャッシュ設定の調整
    - 並行処理の最適化
    - リージョン選択の見直し
    - バッチ処理の実装

まとめ

AWS Secrets Managerは、現代のアプリケーション開発におけるシークレット管理の課題を包括的に解決するサービスです。自動ローテーション機能により運用負荷を軽減し、強力な暗号化とアクセス制御によりセキュリティを向上させます。

適切な設計と運用により、セキュリティリスクを大幅に削減しながら、開発・運用効率を向上させることができます。特に、コンプライアンス要件が厳しい業界や大規模なシステムにおいて、その価値を発揮するサービスといえます。


参考資料: