CloudWatch の 36 個あるアクションのうち CloudTrail で記録されるのは 15 個だけだと知った

CloudWatch に限らず、CloudTrail イベントの記録対象外のアクションを持つ AWS サービスがあります。

コンバンハ、千葉(幸)です。

この API を実行したの誰だ?と思ったらひとまず CloudTrail を確認しますよね。あるいは「このユーザーが過去に実行した API を知りたい」という切り口で確認することもあるでしょう。

ここで、CloudTrail はすべての AWS サービスのイベント記録をサポートしているわけではありません。そしてややこしいことに、サポートされているサービスであってもすべてのアクションが記録されるわけではありません。

CloudWatch のいくつかのアクションを挙げてみました。これらのうち、CloudTrail イベントの記録対象になるものが何個あるか分かるでしょうか。

  • GetInsightRuleReport
  • GetMetricData
  • GetMetricStatistics
  • GetMetricStream
  • GetMetricWidgetImage

すぐ正解を言ってしまうと答えは 0 です。上記のアクションはすべて CloudTrail イベントに記録されません。そんな仕様どこに書いてあるの〜?と思った方に向けて調べ方を書いておきます。

まとめ

CloudWatch のアクション一覧

CloudWatch で定義されているアクション一覧は以下から確認できます。2021年12月現在では 36 個のアクションがありますが、すぐ増える気がするので細かい数字にはあまり意味はありません。

アクションだけでなくリソースタイプや条件キーも確認できるため、IAM ポリシーと仲良くなるためには必読のリファレンスです。

一階層上の、各種 AWS サービスのリファレンスへのリンクが記載されているのは以下ページです。もちろん皆さんのブックマークに入っているかと思います。

CloudTrail による記録対象の CloudWatch アクション

CloudWatch のアクション全てが CloudTrail の記録対象になるわけではありません。記録対象となっているアクション一覧は以下から確認できます。

上記のページは、CloudWatch の AWS ドキュメントの「セキュリティ」の章に位置します。

CloudWatch_CloudTrail

他の AWS サービスにおいても概ね同様の構成ですが、「モニタリング」など他の章に位置する場合もあります。

各 AWS サービスのドキュメントにおける CloudTrail との連携が記載されているページには、以下から遷移できます。

CloudTrailAWSServiceTopic

このページに限らず、最新の情報を確認したい場合は英語版に切り替えてから参照してください。

CloudWatch のアクション一覧と記録対象有無の紐付け

ここまで見た CloudWatch アクションの一覧、CloudTrail 記録対象有無の情報を統合した表が以下です。

アクション Trail 記録対象
DeleteAlarms
DeleteAnomalyDetector
DeleteDashboards
DeleteInsightRules
DeleteMetricStream
DescribeAlarmHistory
DescribeAlarms
DescribeAlarmsForMetric
DescribeAnomalyDetectors
DescribeInsightRules
DisableAlarmActions
DisableInsightRules
EnableAlarmActions
EnableInsightRules
GetDashboard
GetInsightRuleReport
GetMetricData
GetMetricStatistics
GetMetricStream
GetMetricWidgetImage
ListDashboards
ListMetricStreams
ListMetrics
ListTagsForResource
PutAnomalyDetector
PutCompositeAlarm
PutDashboard
PutInsightRule
PutMetricAlarm
PutMetricData
PutMetricStream
SetAlarmState
StartMetricStreams
StopMetricStreams
TagResource
UntagResource

2021年12月時点で、CloudWatch の 36 個のアクションのうち CloudTrail の記録対象となっているのは 15 個のみでした。Metric Streams や Insights Rules、Metric Data あたりは軒並み記録対象外になっていますね。

CloudTrail に記録されない?本当に〜?

AWS ドキュメントに書いてあるのでわざわざ疑うまでもないのですが、実際に API コールを実行し、記録されないことを確認してみます。今回はGetMetricDataで試してみます。

AWS CLI のaws cloudwatch get-metric-dataを実行します。

# クエリする内容を環境変数に格納
% QUERY=$(cat <<EOM
[
    {
        "Id": "m1",
        "MetricStat": {
            "Metric": {
                "Namespace": "AWS/EC2",
                "MetricName": "StatusCheckFailed",
                "Dimensions": [
                    {
                        "Name": "InstanceId",
                        "Value": "i-0986014d98308ac67"
                    }
                ]
            },
            "Period": 3600,
            "Stat": "Sum",
            "Unit": "Count"
        },
        "ReturnData": true
    }
]
EOM
)

# オプションの引数に環境変数を指定してコマンド実行
% aws cloudwatch get-metric-data\
  --metric-data-queries "$QUERY"\
  --start-time 2021-12-14\
  --end-time 2021-12-15
{
    "MetricDataResults": [
        {
            "Id": "m1",
            "Label": "StatusCheckFailed",
            "Timestamps": [
                "2021-12-14T10:00:00+00:00",
                "2021-12-14T09:00:00+00:00"
            ],
            "Values": [
                0.0,
                0.0
            ],
            "StatusCode": "Complete"
        }
    ],
    "Messages": []
}

20 分程度の十分な時間を置いてから CloudTrail を確認しましたが、上記のコマンド実行に該当するイベントは確認できませんでした。

GetMetricData

イベント名でGetMetricDataを指定したフィルタリングはできるのに記録には対応していない、というのが落とし穴ポイントだなと感じます。(将来的に記録に対応するのでしょうか。)

すべてのアクションが CloudTrail に記録されるわけではない

CloudTrail にすべてのアクションが記録されるわけではない、ということを確認しました。

今回気づいたきっかけは CloudWatch のアクションでしたが、他の AWS サービスでも同様のものがあります。

「よくある質問」の一部を切り取って読むと「サポートされているサービスのアクションであればすべて記録されるのでは」と捉えたくなる節がありますが、そんなことはないので注意しましょう。

Q: CloudTrail ではどのようなサービスがサポートされていますか?

AWS CloudTrail では、ほとんどの AWS のサービスにおけるアカウントアクティビティイベントとサービスイベントが記録されます。サポートされているサービスのリストについては、CloudTrail ユーザーガイドCloudTrail Supported Services を参照してください。

Q: AWS マネジメントコンソールから行われた API コールは記録されますか?

はい。CloudTrail はあらゆるクライアントからのAPI コールを記録します。 AWS マネジメントコンソール、AWS ソフトウェア開発キット (SDK)、コマンドラインツール、および高レベルの AWS のサービスから AWS API が呼び出されるので、これらの呼び出しは記録されます。

そして、そもそもサービス単位で記録がサポートされていないサービスは以下から確認できます。

API が呼び出されているはずなのに CloudTrail に記録されていないな……?という時には、そのアクションが記録対象かどうかを調べてみてください。

以上、 チバユキ (@batchicchi) がお送りしました。