1. きっかけ • セキュリティ監査やトラブルシュートのため、Session Manager の操作ログを CloudWatch Logs に記録したい。 • さらに、KMS 暗号化を有効化してセキュアに保管する方針に。
  2. 最初の壁:IAM ロール • aws iam create-service-linked-role --aws-service-name ssm.amazonaws.com 実行時にエラー → 既に存在していた。 • ssm-user から見ると「ロールが無い」ように見えて混乱。 • 結論:サービスリンクロールは既に存在、管理者権限で確認すべきものと判明。
  3. CloudWatch Logs 出力設定 • Session Manager → 設定 → CloudWatch Logs にログ出力先を指定。 • ロググループ:/aws/ssm/Style-Log を作成。 • ここまではスムーズ。
  4. 苦戦ポイント① KMS のエラー • CloudWatch Logs 側で KMS を指定すると、以下のエラーが発生:
The specified KMS key does not exist or is not allowed to be used with Arn 'arn:aws:logs:ap-northeast-1:xxxx:log-group:StyleLog'

•	原因:
•	KMS キーのポリシーに CloudWatch Logs サービスの利用許可が無かった。
•	Key policy に logs.ap-northeast-1.amazonaws.com を Principal として追加する必要があった。
•	修正例(KMS キーポリシー抜粋):

{
  "Sid": "Allow CloudWatch Logs",
  "Effect": "Allow",
  "Principal": {
    "Service": "logs.ap-northeast-1.amazonaws.com"
  },
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:ReEncrypt*",
    "kms:GenerateDataKey*",
    "kms:DescribeKey"
  ],
  "Resource": "*"
}

•	この設定を入れることで、CloudWatch が KMS を利用できるようになり解決。

  1. 苦戦ポイント② 反映されないログ • Session Manager で接続し echo "Hello CloudWatch" を実行してもすぐには出ない。 • 数分遅延がある+ログストリームは自動生成されることに気づくまで迷った。 • 結果:ログストリーム Style-Log-xxxxxxxx に • whoami → ssm-user • 実行コマンドと出力 が記録されていることを確認。
  2. 成果 • SSM のセッション操作ログが CloudWatch に送信されるようになった。 • KMS 暗号化も有効化し、安全に監査ログを保管可能になった。 • IAM と KMS の権限まわりを理解できたのも収穫。

✅ 振り返ると、今回の一番の難所は KMS ポリシー でした。 Session Manager 自体は簡単に CloudWatch に送れるけど、「暗号化する」一歩で権限地獄にハマる、という典型例でしたね 🔑