# AWS - CloudWatch Enum {{#include ../../../../banners/hacktricks-training.md}} ## CloudWatch **CloudWatch** は、ログ/メトリクス/イベントの形で監視および運用 **データ** を収集し、**AWSリソース**、アプリケーション、サービスの **統一ビュー** を提供します。\ CloudWatch Log Event には **各ログ行のサイズ制限が256KB** あります。\ 高解像度アラームを設定し、**ログ** と **メトリクス** を並べて視覚化し、自動化されたアクションを実行し、問題をトラブルシュートし、アプリケーションを最適化するための洞察を発見できます。 例えば、CloudTrail のログを監視できます。監視されるイベント: - セキュリティグループおよび NACL の変更 - EC2 インスタンスの起動、停止、再起動、および終了 - IAM および S3 内のセキュリティポリシーの変更 - AWS Management Console へのログイン試行の失敗 - 認証に失敗した API コール - CloudWatch で検索するためのフィルター: [https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html) ## Key concepts ### Namespaces Namespace は CloudWatch メトリクスのコンテナです。メトリクスを分類および分離するのに役立ち、管理および分析が容易になります。 - **例**: EC2 関連メトリクスのための AWS/EC2、RDS メトリクスのための AWS/RDS。 ### Metrics メトリクスは、AWS リソースのパフォーマンスまたは利用状況を表す時間経過に伴って収集されたデータポイントです。メトリクスは、AWS サービス、カスタムアプリケーション、またはサードパーティの統合から収集できます。 - **例**: CPUUtilization、NetworkIn、DiskReadOps。 ### Dimensions Dimensions はメトリクスの一部であるキーと値のペアです。メトリクスを一意に識別し、追加のコンテキストを提供するのに役立ち、メトリクスに関連付けられる最大の次元数は 30 です。Dimensions は、特定の属性に基づいてメトリクスをフィルタリングおよび集約することも可能です。 - **例**: EC2 インスタンスの場合、Dimensions には InstanceId、InstanceType、AvailabilityZone が含まれる場合があります。 ### Statistics Statistics は、メトリクスデータに対して行われる数学的計算で、時間経過に伴って要約します。一般的な統計には、平均、合計、最小、最大、サンプル数が含まれます。 - **例**: 1 時間の間の平均 CPU 利用率を計算する。 ### Units Units はメトリクスに関連付けられた測定タイプです。Units はメトリクスデータにコンテキストと意味を提供するのに役立ちます。一般的な単位には、パーセント、バイト、秒、カウントが含まれます。 - **例**: CPUUtilization はパーセントで測定される場合があり、NetworkIn はバイトで測定される場合があります。 ## CloudWatch Features ### Dashboard **CloudWatch Dashboards** は、あなたの AWS CloudWatch メトリクスのカスタマイズ可能な **ビュー** を提供します。データを視覚化し、リソースを単一のビューで監視するために、さまざまな AWS サービスからの異なるメトリクスを組み合わせてダッシュボードを作成および構成できます。 **主な機能**: - **ウィジェット**: グラフ、テキスト、アラームなど、ダッシュボードのビルディングブロック。 - **カスタマイズ**: レイアウトとコンテンツは、特定の監視ニーズに合わせてカスタマイズできます。 **例の使用ケース**: - EC2 インスタンス、RDS データベース、S3 バケットを含む、あなたの全 AWS 環境の主要メトリクスを表示する単一のダッシュボード。 ### Metric Stream and Metric Data **Metric Streams** は、AWS CloudWatch で CloudWatch メトリクスを選択した宛先にほぼリアルタイムで継続的にストリーミングすることを可能にします。これは、AWS の外部ツールを使用した高度な監視、分析、およびカスタムダッシュボードに特に便利です。 **Metric Data** は、Metric Streams 内でストリーミングされている実際の測定値またはデータポイントを指します。これらのデータポイントは、AWS リソースの CPU 利用率、メモリ使用量など、さまざまなメトリクスを表します。 **例の使用ケース**: - 高度な分析のために、リアルタイムメトリクスをサードパーティの監視サービスに送信する。 - 長期保存およびコンプライアンスのために、Amazon S3 バケットにメトリクスをアーカイブする。 ### Alarm **CloudWatch Alarms** は、メトリクスを監視し、事前に定義された閾値に基づいてアクションを実行します。メトリクスが閾値を超えた場合、アラームは SNS 経由で通知を送信したり、オートスケーリングポリシーをトリガーしたり、AWS Lambda 関数を実行したりするなど、1 つ以上のアクションを実行できます。 **主なコンポーネント**: - **閾値**: アラームがトリガーされる値。 - **評価期間**: データが評価される期間の数。 - **アラームのためのデータポイント**: アラームをトリガーするために必要な閾値に達した期間の数。 - **アクション**: アラーム状態がトリガーされたときに何が起こるか(例:SNS 経由で通知)。 **例の使用ケース**: - EC2 インスタンスの CPU 利用率を監視し、5 分間連続して 80% を超えた場合に SNS 経由で通知を送信する。 ### Anomaly Detectors **Anomaly Detectors** は、機械学習を使用してメトリクスの異常を自動的に検出します。異常検出を任意の CloudWatch メトリクスに適用して、問題を示す可能性のある通常のパターンからの逸脱を特定できます。 **主なコンポーネント**: - **モデルのトレーニング**: CloudWatch は、過去のデータを使用してモデルをトレーニングし、正常な動作がどのようなものかを確立します。 - **異常検出バンド**: メトリクスの期待される値の範囲を視覚的に表現したもの。 **例の使用ケース**: - セキュリティ侵害やアプリケーションの問題を示す可能性のある EC2 インスタンスの異常な CPU 利用パターンを検出する。 ### Insight Rules and Managed Insight Rules **Insight Rules** は、**強力な数学的表現** を使用してメトリクスデータ内のトレンド、スパイク、またはその他の興味深いパターンを特定することを可能にします。これらのルールは、リソースのパフォーマンスと利用状況における異常や異常な動作を特定するのに役立ちます。 **Managed Insight Rules** は、AWS によって提供される事前構成された **インサイトルール** です。特定の AWS サービスや一般的な使用ケースを監視するように設計されており、詳細な構成なしで有効にできます。 **例の使用ケース**: - RDS パフォーマンスの監視: CPU 利用率、メモリ使用量、ディスク I/O などの主要なパフォーマンス指標を監視する Amazon RDS のための管理されたインサイトルールを有効にします。これらのメトリクスのいずれかが安全な運用閾値を超えた場合、ルールはアラートまたは自動緩和アクションをトリガーできます。 ### CloudWatch Logs アプリケーションおよびシステムからの **ログを集約および監視** することを可能にし、**AWSサービス**(CloudTrail を含む)および **アプリ/システム** からのログを集約します(**CloudWatch Agent** をホストにインストールできます)。ログは **無期限に保存** でき(ロググループの設定に依存)、エクスポートできます。 **要素**: | 用語 | 定義 | | ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | | **ロググループ** | 同じ保持、監視、およびアクセス制御設定を共有する **ログストリームのコレクション** | | **ログストリーム** | **同じソース** を共有する **ログイベントのシーケンス** | | **サブスクリプションフィルター** | 特定のロググループ内のイベントに一致する **フィルターパターンを定義し**、それらを Kinesis Data Firehose ストリーム、Kinesis ストリーム、または Lambda 関数に送信します。 | ### CloudWatch Monitoring & Events CloudWatch の **基本** は、データを **5 分ごとに集約** します(**詳細** は **1 分ごとに集約** します)。集約後、アラームの閾値を **チェック** し、トリガーする必要があるかどうかを確認します。\ その場合、CloudWatch はイベントを送信し、自動アクションを実行する準備ができます(AWS Lambda 関数、SNS トピック、SQS キュー、Kinesis ストリーム)。 ### Agent Installation マシン/コンテナ内にエージェントをインストールして、ログを自動的に CloudWatch に送信できます。 - **ロールを作成** し、CloudWatch がインスタンスからデータを収集できるようにするための権限を持つ **インスタンスにアタッチ** します(CloudWatchAgentAdminPolicy & AmazonEC2RoleforSSM)。 - **エージェントをダウンロード** し、EC2 インスタンスに **インストール** します ([https://s3.amazonaws.com/amazoncloudwatch-agent/linux/amd64/latest/AmazonCloudWatchAgent.zip](https://s3.amazonaws.com/amazoncloudwatch-agent/linux/amd64/latest/AmazonCloudWatchAgent.zip))。EC2 内からダウンロードするか、AWS Systems Manager を使用して自動的にインストールできます。AWS-ConfigureAWSPackage パッケージを選択します。 - **CloudWatch Agent を構成** し、**開始** します。 ロググループには多くのストリームがあります。ストリームには多くのイベントがあります。そして、各ストリーム内のイベントは順序が保証されています。 ## Enumeration ```bash # Dashboards # ## Returns a list of the dashboards of your account aws cloudwatch list-dashboards ## Retrieves the details of the specified dashboard aws cloudwatch get-dashboard --dashboard-name # Metrics # ## Returns a list of the specified metric aws cloudwatch list-metrics [--namespace ] [--metric-name ] [--dimensions ] [--include-linked-accounts | --no-include-linked-accounts] ## Retrieves metric data (this operation can include a CloudWatch Metrics Insights query, and one or more metric math functions) aws cloudwatch get-metric-data --metric-data-queries --start-time --end-time ## Retrieves statistics for the specified metric and namespace over a range of time aws cloudwatch get-metric-statistics --namespace --metric-name [--dimensions ] --start-time --end-time --period ## Returns a list of the metric streams of your account aws cloudwatch list-metric-streams ## Retrieves information about the specified metric stream aws cloudwatch get-metric-stream --name ## Retrieve snapshots of the specified metric widgets aws cloudwatch get-metric-widget-image --metric-widget # Alarms # ## Retrieves the specified alarm aws cloudwatch describe-alarms [--alarm-names ] [--alarm-name-prefix ] [--alarm-types ] [--state-value ] ## Retrieves the alarms history, even for deleted alarms aws cloudwatch describe-alarm-history [--alarm-name ] [--alarm-types ] [--history-item-type ] [--start-date ] [--end-date ] ## Retrieves standard alarms based on the specified metric aws cloudwatch escribe-alarms-for-metric --metric-name --namespace [--dimensions ] # Anomaly Detections # ## Lists the anomaly detection models that you have created in your account aws cloudwatch describe-anomaly-detectors [--namespace ] [--metric-name ] [--dimensions ] ## Lists all the Contributor Insight rules in your account aws cloudwatch describe-insight-rules ## Retrieves the data collected over a time range for a given Contributor Insight rule aws cloudwatch get-insight-rule-report --rule-name --start-time --end-time --period ## Lists managed Contributor Insights rules in your account for a specified resource aws cloudwatch list-managed-insight-rules --resource-arn # Tags # ## Lists the tags associated with the specified CloudWatch resources aws cloudwatch list-tags-for-resource --resource-arn # CloudWatch Logs # aws logs tail "" --followaws logs get-log-events --log-group-name "" --log-stream-name "" --output text > # CloudWatch Events # aws events list-rules aws events describe-rule --name aws events list-targets-by-rule --rule aws events list-archives aws events describe-archive --archive-name aws events list-connections aws events describe-connection --name aws events list-endpoints aws events describe-endpoint --name aws events list-event-sources aws events describe-event-source --name aws events list-replays aws events list-api-destinations aws events list-event-buses ``` ## Post-Exploitation / Bypass ### **`cloudwatch:DeleteAlarms`,`cloudwatch:PutMetricAlarm` , `cloudwatch:PutCompositeAlarm`** この権限を持つ攻撃者は、組織の監視およびアラートインフラストラクチャを大きく損なう可能性があります。既存のアラームを削除することで、攻撃者は管理者に重要なパフォーマンスの問題、セキュリティ侵害、または運用の失敗を通知する重要なアラートを無効にすることができます。さらに、メトリックアラームを作成または変更することで、攻撃者は誤ったアラートで管理者を誤導したり、正当なアラームを無効にしたりすることができ、悪意のある活動を隠蔽し、実際のインシデントに対する迅速な対応を妨げることができます。 さらに、**`cloudwatch:PutCompositeAlarm`** 権限を持つ攻撃者は、合成アラームAが合成アラームBに依存し、合成アラームBも合成アラームAに依存する合成アラームのループまたはサイクルを作成することができます。このシナリオでは、サイクルの一部である合成アラームを削除することは不可能です。なぜなら、削除したいアラームに依存する合成アラームが常に存在するからです。 ```bash aws cloudwatch put-metric-alarm --cli-input-json | --alarm-name --comparison-operator --evaluation-periods [--datapoints-to-alarm ] [--threshold ] [--alarm-description ] [--alarm-actions ] [--metric-name ] [--namespace ] [--statistic ] [--dimensions ] [--period ] aws cloudwatch delete-alarms --alarm-names aws cloudwatch put-composite-alarm --alarm-name --alarm-rule [--no-actions-enabled | --actions-enabled [--alarm-actions ] [--insufficient-data-actions ] [--ok-actions ] ] ``` 以下の例は、メトリックアラームを無効にする方法を示しています: - このメトリックアラームは、特定のEC2インスタンスの平均CPU使用率を監視し、300秒ごとにメトリックを評価し、6つの評価期間(合計30分)を必要とします。平均CPU使用率がこれらの期間のうち少なくとも4つで60%を超えると、アラームがトリガーされ、指定されたSNSトピックに通知が送信されます。 - 閾値を99%を超えるように変更し、期間を10秒に設定し、評価期間を8640に設定すると(8640期間の10秒は1日になります)、アラームをトリガーするには、CPU使用率が24時間全体で10秒ごとに99%を超える必要があります。 {{#tabs }} {{#tab name="Original Metric Alarm" }} ```json { "Namespace": "AWS/EC2", "MetricName": "CPUUtilization", "Dimensions": [ { "Name": "InstanceId", "Value": "i-01234567890123456" } ], "AlarmActions": ["arn:aws:sns:us-east-1:123456789012:example_sns"], "ComparisonOperator": "GreaterThanThreshold", "DatapointsToAlarm": 4, "EvaluationPeriods": 6, "Period": 300, "Statistic": "Average", "Threshold": 60, "AlarmDescription": "CPU Utilization of i-01234567890123456 over 60%", "AlarmName": "EC2 instance i-01234567890123456 CPU Utilization" } ``` {{#endtab }} {{#tab name="Modified Metric Alarm" }} ```json { "Namespace": "AWS/EC2", "MetricName": "CPUUtilization", "Dimensions": [ { "Name": "InstanceId", "Value": "i-0645d6d414dadf9f8" } ], "AlarmActions": [], "ComparisonOperator": "GreaterThanThreshold", "DatapointsToAlarm": 8640, "EvaluationPeriods": 8640, "Period": 10, "Statistic": "Average", "Threshold": 99, "AlarmDescription": "CPU Utilization of i-01234567890123456 with 60% as threshold", "AlarmName": "Instance i-0645d6d414dadf9f8 CPU Utilization" } ``` {{#endtab }} {{#endtabs }} **潜在的な影響**: 重要なイベントに対する通知の欠如、潜在的な未検出の問題、誤警報、正当な警報の抑制、そして実際のインシデントの検出を見逃す可能性。 ### **`cloudwatch:DeleteAlarmActions`, `cloudwatch:EnableAlarmActions` , `cloudwatch:SetAlarmState`** アラームアクションを削除することで、攻撃者はアラーム状態に達したときに管理者への通知や自動スケーリング活動のトリガーなど、重要な警告や自動応答が発動するのを防ぐことができます。不適切にアラームアクションを有効化または再有効化することも、以前に無効化されたアクションを再活性化したり、どのアクションがトリガーされるかを変更したりすることで、予期しない動作を引き起こし、インシデント対応において混乱や誤方向を招く可能性があります。 さらに、権限を持つ攻撃者はアラーム状態を操作し、管理者を混乱させるために偽のアラームを作成したり、進行中の悪意のある活動や重大なシステム障害を隠すために正当なアラームを無効にしたりすることができます。 - **`SetAlarmState`** をコンポジットアラームで使用すると、コンポジットアラームが実際の状態に戻ることは保証されません。子アラームのいずれかが状態を変更したときにのみ、実際の状態に戻ります。また、設定を更新すると再評価されます。 ```bash aws cloudwatch disable-alarm-actions --alarm-names aws cloudwatch enable-alarm-actions --alarm-names aws cloudwatch set-alarm-state --alarm-name --state-value --state-reason [--state-reason-data ] ``` **潜在的な影響**: 重要なイベントに対する通知の欠如、潜在的な未検出の問題、偽のアラート、正当なアラートの抑制、実際のインシデントの検出の見逃しの可能性。 ### **`cloudwatch:DeleteAnomalyDetector`, `cloudwatch:PutAnomalyDetector`** 攻撃者は、メトリックデータの異常パターンや異常を検出し、対応する能力を妨害することができます。既存の異常検出器を削除することで、攻撃者は重要なアラート機構を無効にし、作成または変更することで、監視を混乱させたり圧倒させたりするために、誤設定や偽のポジティブを作成することができます。 ```bash aws cloudwatch delete-anomaly-detector [--cli-input-json | --namespace --metric-name --dimensions --stat ] aws cloudwatch put-anomaly-detector [--cli-input-json | --namespace --metric-name --dimensions --stat --configuration --metric-characteristics ] ``` 次の例は、メトリック異常検出器を無効にする方法を示しています。このメトリック異常検出器は、特定のEC2インスタンスの平均CPU使用率を監視しており、単に「ExcludedTimeRanges」パラメータを希望の時間範囲で追加するだけで、その期間中に異常検出器が関連データを分析または警告しないことを保証するのに十分です。 {{#tabs }} {{#tab name="Original Metric Anomaly Detector" }} ```json { "SingleMetricAnomalyDetector": { "Namespace": "AWS/EC2", "MetricName": "CPUUtilization", "Stat": "Average", "Dimensions": [ { "Name": "InstanceId", "Value": "i-0123456789abcdefg" } ] } } ``` {{#endtab }} {{#tab name="Modified Metric Anomaly Detector" }} ```json { "SingleMetricAnomalyDetector": { "Namespace": "AWS/EC2", "MetricName": "CPUUtilization", "Stat": "Average", "Dimensions": [ { "Name": "InstanceId", "Value": "i-0123456789abcdefg" } ] }, "Configuration": { "ExcludedTimeRanges": [ { "StartTime": "2023-01-01T00:00:00Z", "EndTime": "2053-01-01T23:59:59Z" } ], "Timezone": "Europe/Madrid" } } ``` {{#endtab }} {{#endtabs }} **潜在的な影響**: 異常なパターンやセキュリティ脅威の検出に直接的な影響があります。 ### **`cloudwatch:DeleteDashboards`, `cloudwatch:PutDashboard`** 攻撃者は、ダッシュボードを作成、変更、または削除することで、組織の監視および視覚化機能を妨害することができます。この権限は、システムのパフォーマンスと健康に関する重要な可視性を削除したり、ダッシュボードを変更して不正確なデータを表示させたり、悪意のある活動を隠すために利用される可能性があります。 ```bash aws cloudwatch delete-dashboards --dashboard-names aws cloudwatch put-dashboard --dashboard-name --dashboard-body ``` **潜在的な影響**: 監視の可視性の喪失と誤解を招く情報。 ### **`cloudwatch:DeleteInsightRules`, `cloudwatch:PutInsightRule` ,`cloudwatch:PutManagedInsightRule`** インサイトルールは、異常を検出し、パフォーマンスを最適化し、リソースを効果的に管理するために使用されます。既存のインサイトルールを削除することで、攻撃者は重要な監視機能を取り除き、システムをパフォーマンスの問題やセキュリティの脅威に対して盲目にする可能性があります。さらに、攻撃者はインサイトルールを作成または変更して誤解を招くデータを生成したり、悪意のある活動を隠したりすることができ、診断の誤りや運用チームからの不適切な対応を引き起こす可能性があります。 ```bash aws cloudwatch delete-insight-rules --rule-names aws cloudwatch put-insight-rule --rule-name --rule-definition [--rule-state ] aws cloudwatch put-managed-insight-rules --managed-rules ``` **潜在的影響**: パフォーマンスの問題や異常を検出し対応するのが難しくなり、誤った意思決定を引き起こし、悪意のある活動やシステムの障害を隠す可能性があります。 ### **`cloudwatch:DisableInsightRules`, `cloudwatch:EnableInsightRules`** 重要なインサイトルールを無効にすることで、攻撃者は組織を主要なパフォーマンスおよびセキュリティメトリクスから効果的に盲目にすることができます。逆に、誤解を招くルールを有効にしたり構成したりすることで、偽のデータを生成したり、ノイズを作成したり、悪意のある活動を隠すことが可能になるかもしれません。 ```bash aws cloudwatch disable-insight-rules --rule-names aws cloudwatch enable-insight-rules --rule-names ``` **潜在的影響**: オペレーションチームの混乱を招き、実際の問題への対応が遅れ、誤ったアラートに基づく不必要な行動を引き起こす。 ### **`cloudwatch:DeleteMetricStream` , `cloudwatch:PutMetricStream` , `cloudwatch:PutMetricData`** **`cloudwatch:DeleteMetricStream`** 、**`cloudwatch:PutMetricStream`** の権限を持つ攻撃者は、メトリックデータストリームを作成および削除でき、セキュリティ、監視、データの整合性が損なわれる可能性があります: - **悪意のあるストリームの作成**: メトリックストリームを作成して、機密データを不正な宛先に送信する。 - **リソース操作**: 過剰なデータを持つ新しいメトリックストリームの作成は、多くのノイズを生み出し、誤ったアラートを引き起こし、真の問題を隠す可能性があります。 - **監視の中断**: メトリックストリームを削除することで、攻撃者は監視データの継続的な流れを妨害します。このようにして、彼らの悪意のある活動は効果的に隠されます。 同様に、**`cloudwatch:PutMetricData`** の権限を持つことで、メトリックストリームにデータを追加することが可能になります。これにより、不適切なデータの量が原因でDoSが発生し、完全に無用になる可能性があります。 ```bash aws cloudwatch delete-metric-stream --name aws cloudwatch put-metric-stream --name [--include-filters ] [--exclude-filters ] --firehose-arn --role-arn --output-format aws cloudwatch put-metric-data --namespace [--metric-data ] [--metric-name ] [--timestamp ] [--unit ] [--value ] [--dimensions ] ``` EC2インスタンスのCPU使用率が70%に相当するデータを追加する例: ```bash aws cloudwatch put-metric-data --namespace "AWS/EC2" --metric-name "CPUUtilization" --value 70 --unit "Percent" --dimensions "InstanceId=i-0123456789abcdefg" ``` **潜在的影響**: 監視データの流れの中断、異常やインシデントの検出への影響、リソースの操作および過剰なメトリックストリームの作成によるコストの増加。 ### **`cloudwatch:StopMetricStreams`, `cloudwatch:StartMetricStreams`** 攻撃者は、影響を受けたメトリックデータストリームの流れを制御します(リソース制限がない場合はすべてのデータストリーム)。権限 **`cloudwatch:StopMetricStreams`** を使用することで、攻撃者は重要なメトリックストリームを停止させることにより、自らの悪意のある活動を隠すことができます。 ```bash aws cloudwatch stop-metric-streams --names aws cloudwatch start-metric-streams --names ``` **潜在的な影響**: 監視データの流れが中断され、異常やインシデントの検出に影響を与える。 ### **`cloudwatch:TagResource`, `cloudwatch:UntagResource`** 攻撃者はCloudWatchリソース(現在はアラームとContributor Insightsルールのみ)からタグを追加、変更、または削除することができます。これにより、タグに基づく組織のアクセス制御ポリシーが中断される可能性があります。 ```bash aws cloudwatch tag-resource --resource-arn --tags aws cloudwatch untag-resource --resource-arn --tag-keys ``` **潜在的影響**: タグベースのアクセス制御ポリシーの中断。 ## 参考文献 - [https://cloudsecdocs.com/aws/services/logging/cloudwatch/](https://cloudsecdocs.com/aws/services/logging/cloudwatch/#general-info) - [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncloudwatch.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncloudwatch.html) - [https://docs.aws.amazon.com/es_es/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Metric](https://docs.aws.amazon.com/es_es/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Metric) {{#include ../../../../banners/hacktricks-training.md}}