AWSのクラウド環境において、セキュアなアプリケーションを設計・構築するうえで避けて通れないのが、機密情報や暗号鍵の管理である。AWSはこの課題に対して、Secrets ManagerとKey Management Service(KMS)という二つの強力なマネージドサービスを提供している。本稿では、両サービスの基本概念から設定方法、そして実践的なセキュリティベストプラクティスに至るまでを網羅的に解説する。
Secrets Managerとは何か
AWS Secrets Managerは、アプリケーションで使用される認証情報やAPIキーなどの機密情報を安全に保存・取得・ローテーション可能なサービスである。これにより、コードへのハードコーディングを避け、セキュリティの脆弱性を最小限に抑えることができる。
Secrets Managerの主要機能
- 保存されるシークレットはKMSによって暗号化される
- RDSやDynamoDBの認証情報を対象に、自動ローテーションを設定可能
- AWS Lambdaと連携することで、ローテーション処理のカスタマイズが可能
- IAMポリシーによるきめ細やかなアクセス制御
- AWS CloudTrailとの統合による操作ログの取得
Secrets Managerの活用例
- RDSやDynamoDBのログイン情報の安全な管理
- 外部APIに接続するためのトークンやキーの保管
- SSHキーやWebhookトークンなどインフラ構成情報の管理
Secrets Managerの設定手順
コンソールからのシークレット作成
- Secrets Managerコンソールを開き、シークレットを作成
- 保存する情報の種類を選択(例 RDS認証情報)
- ユーザー名やパスワードを入力し、KMSキーで暗号化
- Lambda関数を指定して自動ローテーションを設定
- シークレット名を設定し、保存して完了
CLIを用いたシークレットの取得
aws secretsmanager get-secret-value --secret-id MyDatabaseSecret
Lambda関数からシークレットを取得するPythonコード
import boto3
import json
def get_secret():
client = boto3.client('secretsmanager')
response = client.get_secret_value(SecretId='MyDatabaseSecret')
return json.loads(response['SecretString'])
シークレットのローテーション実行
aws secretsmanager rotate-secret --secret-id MyDatabaseSecret
KMSとは何か
KMS(Key Management Service)は、AWS内で利用される暗号鍵を一元管理するためのサービスである。対称鍵および非対称鍵の両方に対応しており、S3、EBS、RDS、Secrets Managerなど多くのAWSサービスと統合されている。
KMSの主要機能
- カスタマー管理型キー(CMK)の作成と管理
- 暗号化と復号処理のAPI提供
- IAMと連携したアクセス制御
- CloudTrailとの統合によるキー使用履歴の追跡
KMSの活用例
- S3バケットのオブジェクト暗号化
- EBSボリュームの暗号化によるデータ保護
- RDSでの透過的暗号化
- Secrets Managerにおけるシークレットの暗号化
KMSの設定手順
コンソールからの鍵作成
- KMSコンソールにアクセスし、新しい鍵を作成
- 対称または非対称鍵のタイプを選択
- アクセスを許可するIAMユーザーまたはロールを指定
- 他サービスと統合して利用開始
CLIを用いた暗号化と復号
aws kms encrypt --key-id alias/MyKMSKey --plaintext fileb://mydata.txt --output text --query CiphertextBlob
S3でのKMSキーによる暗号化アップロード
aws s3 cp myfile.txt s3://mybucket/ --sse aws:kms --sse-kms-key-id alias/MyKMSKey
EBSボリュームの作成時に暗号化を有効にする
aws ec2 create-volume --size 10 --region ap-northeast-1 --availability-zone ap-northeast-1a --encrypted --kms-key-id alias/MyKMSKey
セキュリティベストプラクティス
Secrets Managerにおける推奨事項
- 定期的なローテーションを義務化し、情報漏洩リスクを低減
- IAMポリシーを活用し、アクセス範囲を最小限に制限
- CloudTrailで操作履歴を記録し、監査体制を強化
- KMSと併用することで保存時の暗号化を徹底
KMSにおける推奨事項
- 最小権限の原則を厳守し、キーへのアクセスを制限
- 鍵の自動ローテーションを有効化
- CloudTrailと連携して不正使用を検知
- サービス間統合を活用し、一貫した暗号化戦略を実現
結論
AWSにおけるセキュリティの中核を担うSecrets ManagerとKMSは、それぞれ異なる観点から機密情報と暗号鍵の管理を担っている。Secrets Managerは認証情報の保管とローテーション、KMSは鍵そのものの生成と利用を一元的に管理する役割を果たす。両者を組み合わせることで、より堅牢で統合されたセキュリティ対策が実現できる。