AWS - CloudWatch Enum

HackTricksのサポート

CloudWatch

CloudWatchは、ログ/メトリクス/イベントの形式で監視および運用データを収集し、AWSリソース、アプリケーション、サービスの統合ビューを提供します。 CloudWatchログイベントは、各ログ行ごとに256KBのサイズ制限があります。 高解像度のアラームを設定したり、ログとメトリクスを並べて可視化したり、自動アクションを実行したり、問題をトラブルシューティングしたり、アプリケーションを最適化するための洞察を見つけたりできます。

例えば、CloudTrailからのログを監視できます。監視されるイベント:

キーコンセプト

名前空間

名前空間はCloudWatchメトリクスのコンテナです。メトリクスをカテゴリ別に分類し、分析しやすくするのに役立ちます。

  • : EC2関連のメトリクスの場合はAWS/EC2、RDSメトリクスの場合はAWS/RDSなど。

メトリクス

メトリクスは時間の経過とともに収集されるデータポイントで、AWSリソースのパフォーマンスや利用状況を表します。メトリクスはAWSサービス、カスタムアプリケーション、サードパーティの統合から収集できます。

  • : CPUUtilization、NetworkIn、DiskReadOps。

寸法

寸法はメトリクスの一部であるキーと値のペアです。メトリクスを一意に識別し、追加のコンテキストを提供し、メトリクスを特定の属性に基づいてフィルタリングおよび集計するのに役立ちます。メトリクスに関連付けられる寸法の最大数は30であり、統計も可能です。

  • : EC2インスタンスの場合、寸法にはInstanceId、InstanceType、AvailabilityZoneなどが含まれる場合があります。

統計

統計は、メトリクスデータに対して行われる数学的な計算で、時間の経過とともにデータを要約します。一般的な統計には、平均、合計、最小値、最大値、サンプル数などがあります。

  • : 1時間の間の平均CPU使用率を計算する。

単位

単位はメトリクスに関連付けられた計測タイプです。単位は、メトリクスデータにコンテキストと意味を提供するのに役立ちます。一般的な単位には、パーセント、バイト、秒、カウントなどがあります。

  • : CPUUtilizationはパーセントで測定される場合がありますが、NetworkInはバイトで測定される場合があります。

CloudWatchの機能

ダッシュボード

CloudWatchダッシュボードは、AWS CloudWatchメトリクスのカスタマイズ可能なビューを提供します。さまざまなAWSサービスからの異なるメトリクスを組み合わせて、データを視覚化し、リソースを監視するためのダッシュボードを作成および構成できます。

主な機能:

  • ウィジェット: グラフ、テキスト、アラームなどのダッシュボードの構成要素。

  • カスタマイズ: レイアウトとコンテンツをカスタマイズして特定の監視ニーズに合わせることができます。

例のユースケース:

  • EC2インスタンス、RDSデータベース、S3バケットなど、AWS環境全体の主要メトリクスを表示する単一のダッシュボード。

メトリクストリームとメトリクデータ

AWS CloudWatchのメトリクストリームを使用すると、CloudWatchメトリクスを選択した宛先にリアルタイムに連続してストリーミングできます。これは、AWS外のツールを使用して高度な監視、分析、カスタムダッシュボードに特に役立ちます。

メトリクストリーム内のメトリクデータは、ストリーミングされている実際の測定値またはデータポイントを指します。これらのデータポイントは、AWSリソースのCPU使用率、メモリ使用量などのさまざまなメトリクスを表します。

例のユースケース:

  • サードパーティの監視サービスにリアルタイムメトリクスを送信して高度な分析を行う。

  • 長期保存とコンプライアンスのためにAmazon S3バケットにメトリクスをアーカイブする。

アラーム

CloudWatchアラームは、事前に定義された閾値に基づいてメトリクスを監視し、アクションを実行します。メトリクスが閾値を超えると、アラームはSNS経由で通知を送信したり、自動スケーリングポリシーをトリガーしたり、AWS Lambda関数を実行したりすることができます。

主なコンポーネント:

  • 閾値: アラームがトリガーされる値。

  • 評価期間: データが評価される期間の数。

  • アラームに必要なデータポイント: アラームをトリガーするために必要な閾値に達した期間の数

  • アクション: アラーム状態がトリガーされたときの動作(SNS経由で通知など)。

例のユースケース:

  • EC2インスタンスのCPU使用率を監視し、連続して5分間80%を超える場合はSNS経由で通知を送信する。

異常検出器

異常検出器は、機械学習を使用してメトリクスの異常を自動的に検出します。異常検出を任意のCloudWatchメトリクスに適用して、通常のパターンからの逸脱を特定することができます。

主なコンポーネント:

  • モデルトレーニング: CloudWatchは、履歴データを使用してモデルをトレーニングし、正常な動作の見え方を確立します。

  • 異常検出バンド: メトリクスの値の予想範囲の視覚的表現。

例のユースケース:

  • セキュリティ侵害やアプリケーションの問題を示す可能性があるEC2インスタンスの異常なCPU使用率パターンを検出する。

インサイトルールと管理されたインサイトルール

インサイトルールを使用すると、強力な数学的表現を使用して、メトリクデータ内のトレンド、スパイク、またはその他の興味深いパターンを特定し、アクションを実行すべき条件を定義できます。これらのルールを使用すると、リソースのパフォーマンスと利用状況における異常や異常な動作を特定できます。

管理されたインサイトルールは、AWSによって提供される事前構成のインサイトルールです。特定のAWSサービスや一般的なユースケースを監視するように設計されており、詳細な構成を必要とせずに有効にできます。

例のユースケース:

  • RDSパフォーマンスの監視: Amazon RDSのキーのパフォーマンスインジケーター(CPU使用率、メモリ使用量、ディスクI/Oなど)を監視するために管理されたインサイトルールを有効にします。これらのメトリクスのいずれかが安全な運用のしきい値を超える場合、ルールはアラートをトリガーするか、自動的な緩和アクションを起動できます。

CloudWatchログ

AWSサービス(CloudTrailを含む)およびアプリケーション/システムからのログを集約および監視することができます(ホストにCloudWatchエージェントをインストールすることも可能)。ログは無期限に保存され(ロググループの設定による)、エクスポートすることもできます。

要素:

ロググループ

同じ保持、監視、アクセス制御設定を共有するログストリームのコレクション

ログストリーム

同じソースを共有するログイベントのシーケンス

サブスクリプションフィルタ

特定のロググループ内のイベントに一致するフィルタパターンを定義し、それらをKinesis Data Firehoseストリーム、Kinesisストリーム、またはLambda関数に送信します

### CloudWatchモニタリング&イベント

CloudWatch 基本 はデータを 5分ごと に集計します(詳細 なものは 1分ごと に行います)。集計後、アラームの閾値をチェックし、トリガーする必要があるかどうかを確認します。 その場合、CloudWatchはイベントを送信し、自動的なアクションを実行する準備ができています(AWS Lambda関数、SNSトピック、SQSキュー、Kinesis Streams)

エージェントのインストール

マシン/コンテナ内にエージェントをインストールして、ログを自動的にCloudWatchに送信できます。

  • ロール を作成し、CloudWatchがインスタンスからデータを収集する権限とAWSシステムマネージャSSMとのやり取りを許可する権限を持つ インスタンスアタッチ します(CloudWatchAgentAdminPolicy&AmazonEC2RoleforSSM)

  • EC2インスタンスに エージェントダウンロード して インストール します(https://s3.amazonaws.com/amazoncloudwatch-agent/linux/amd64/latest/AmazonCloudWatchAgent.zip)。EC2内からダウンロードするか、AWSシステムマネージャを使用してパッケージAWS-ConfigureAWSPackageを選択して自動的にインストールできます

  • CloudWatchエージェントを 構成 して 起動 します

ロググループには多くのストリームがあります。ストリームには多くのイベントがあります。そして、各ストリーム内では、イベントが順番に保証されています。

列挙

# 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 <value>

# Metrics #

## Returns a list of the specified metric
aws cloudwatch list-metrics [--namespace <value>] [--metric-name <value>] [--dimensions <value>] [--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 <value> --start-time <value> --end-time <value>

## Retrieves statistics for the specified metric and namespace over a range of time
aws cloudwatch get-metric-statistics --namespace <value> --metric-name <value> [--dimensions <value>] --start-time <value> --end-time <value> --period <value>

## 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 <value>

## Retrieve snapshots of the specified metric widgets
aws cloudwatch get-metric-widget-image --metric-widget <value>

# Alarms #

## Retrieves the specified alarm
aws cloudwatch describe-alarms [--alarm-names <value>] [--alarm-name-prefix <value>] [--alarm-types <value>] [--state-value <value>]

## Retrieves the alarms history, even for deleted alarms
aws cloudwatch describe-alarm-history [--alarm-name <value>] [--alarm-types <value>] [--history-item-type <ConfigurationUpdate | StateUpdate | Action>] [--start-date <value>] [--end-date <value>]

## Retrieves standard alarms based on the specified metric
aws cloudwatch escribe-alarms-for-metric --metric-name <value> --namespace <value> [--dimensions <value>]

# Anomaly Detections #

## Lists the anomaly detection models that you have created in your account
aws cloudwatch describe-anomaly-detectors [--namespace <value>] [--metric-name <value>] [--dimensions <value>]

## 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 <value> --start-time <value> --end-time <value> --period <value>

## Lists managed Contributor Insights rules in your account for a specified resource
aws cloudwatch list-managed-insight-rules --resource-arn <value>

# Tags #

## Lists the tags associated with the specified CloudWatch resources
aws cloudwatch list-tags-for-resource --resource-arn <value>

# CloudWatch Logs #
aws logs tail "<log_group_name>" --followaws logs get-log-events --log-group-name "<log_group_name>" --log-stream-name "<log_stream_name>" --output text > <output_file>

# CloudWatch Events #
aws events list-rules
aws events describe-rule --name <name>aws events list-targets-by-rule --rule <name>aws events list-archives
aws events describe-archive --archive-name <name>aws events list-connections
aws events describe-connection --name <name>aws events list-endpoints
aws events describe-endpoint --name <name>aws events list-event-sources
aws events describe-event-source --name <name>aws events list-replays
aws events list-api-destinations
aws events list-event-buses

ポストエクスプロイテーション / バイパス

cloudwatch:DeleteAlarms,cloudwatch:PutMetricAlarm , cloudwatch:PutCompositeAlarm

これらの権限を持つ攻撃者は、組織のモニタリングおよびアラートインフラを著しく損なう可能性があります。既存のアラームを削除することで、攻撃者は重要なアラートを無効にし、管理者に重要なパフォーマンスの問題、セキュリティ侵害、または運用上の障害を通知するアラートを無効にすることができます。さらに、メトリックアラームを作成または変更することで、攻撃者は管理者を誤解させることもでき、偽のアラートを出したり正当なアラートを無効にしたりして、悪意のある活動を隠し、実際のインシデントへの迅速な対応を妨げることができます。

さらに、cloudwatch:PutCompositeAlarm 権限を持つ攻撃者は、コンポジットアラームAがコンポジットアラームBに依存し、コンポジットアラームBもコンポジットアラームAに依存するコンポジットアラームのループやサイクルを作成できます。このシナリオでは、サイクルの一部であるコンポジットアラームを削除することはできません。なぜなら、削除したいアラームに依存するコンポジットアラームが常に存在するからです。

aws cloudwatch put-metric-alarm --cli-input-json <value> | --alarm-name <value> --comparison-operator <value> --evaluation-periods <value> [--datapoints-to-alarm <value>] [--threshold <value>] [--alarm-description <value>] [--alarm-actions <value>] [--metric-name <value>] [--namespace <value>] [--statistic <value>] [--dimensions <value>] [--period <value>]
aws cloudwatch delete-alarms --alarm-names <value>
aws cloudwatch put-composite-alarm --alarm-name <value> --alarm-rule <value> [--no-actions-enabled | --actions-enabled [--alarm-actions <value>] [--insufficient-data-actions <value>] [--ok-actions <value>] ]

以下の例は、メトリックアラームを無効にする方法を示しています:

  • このメトリックアラームは特定のEC2インスタンスの平均CPU利用率を監視し、メトリックを300秒ごとに評価し、評価期間を6回(合計30分)必要とします。平均CPU利用率がこれらの期間のうち少なくとも4回で60%を超えると、アラームがトリガーされ、指定されたSNSトピックに通知が送信されます。

  • 閾値を99%以上に設定し、期間を10秒に設定し、評価期間を8640に設定(10秒の8640期間が1日に相当するため)、データポイントをアラームにも8640に設定することで、CPU利用率が24時間中のすべての10秒ごとに99%を超える必要があり、アラームをトリガーするためには、このような設定が必要です。

{
"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"
}

潜在的影響: 重要なイベントの通知が欠如し、未検出の問題が発生する可能性があり、誤ったアラートが抑制され、実際のインシデントの検出が見逃される可能性があります。

cloudwatch:DeleteAlarmActions, cloudwatch:EnableAlarmActions , cloudwatch:SetAlarmState

アラームアクションを削除することで、攻撃者はアラーム状態が到達した際に重要なアラートや自動応答がトリガーされるのを防ぐことができます。これにより、管理者への通知や自動スケーリングのアクティビティのトリガーが阻害される可能性があります。不適切にアラームアクションを有効にしたり再度有効にしたりすることは、以前に無効になっていたアクションを再度有効にするか、トリガーされるアクションを変更することによって予期しない動作を引き起こす可能性があり、インシデント対応に混乱や誤誘導を引き起こす可能性があります。

さらに、権限を持つ攻撃者はアラームの状態を操作でき、管理者を混乱させるために偽のアラームを作成したり、悪意のある活動や重要なシステムの障害を隠すために本物のアラームを無効にすることができます。

  • SetAlarmState をコンポジットアラームで使用する場合、コンポジットアラームが実際の状態に戻ることは保証されません。そのコンポジットアラームは、その子アラームのいずれかが状態を変更するときにのみ実際の状態に戻ります。また、構成を更新すると再評価されます。

aws cloudwatch disable-alarm-actions --alarm-names <value>
aws cloudwatch enable-alarm-actions --alarm-names <value>
aws cloudwatch set-alarm-state --alarm-name <value> --state-value <OK | ALARM | INSUFFICIENT_DATA> --state-reason <value> [--state-reason-data <value>]

潜在的影響: 重要なイベントの通知の不足、潜在的な未検出の問題、誤ったアラート、本物のインシデントの検出を逃す可能性があります。

cloudwatch:DeleteAnomalyDetector, cloudwatch:PutAnomalyDetector

攻撃者は、メトリックデータの異常なパターンや異常に対応する能力を妨害することができます。既存の異常検出器を削除することで、攻撃者は重要なアラートメカニズムを無効にすることができます。また、それらを作成または変更することで、誤った設定を行うか、誤った陽性を作成して監視を乱し、圧倒することができます。

aws cloudwatch delete-anomaly-detector [--cli-input-json <value> | --namespace <value> --metric-name <value> --dimensions <value> --stat <value>]
aws cloudwatch put-anomaly-detector [--cli-input-json <value> | --namespace <value> --metric-name <value> --dimensions <value> --stat <value> --configuration <value> --metric-characteristics <value>]

以下の例は、メトリック異常検出器を無効にする方法を示しています。このメトリック異常検出器は特定のEC2インスタンスの平均CPU利用率を監視しており、所望の時間範囲を持つ「ExcludedTimeRanges」パラメータを追加するだけで、その期間中に関連データを分析したり警告したりしないようにすることができます。

{
"SingleMetricAnomalyDetector": {
"Namespace": "AWS/EC2",
"MetricName": "CPUUtilization",
"Stat": "Average",
"Dimensions": [
{
"Name": "InstanceId",
"Value": "i-0123456789abcdefg"
}
]
}
}

{
"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"
}
}

潜在的影響: 異常なパターンやセキュリティ脅威の検出に直接影響を与える。

cloudwatch:DeleteDashboards, cloudwatch:PutDashboard

攻撃者は、ダッシュボードを作成、変更、または削除することで、組織の監視および可視化機能を妨害することができます。これらの権限は、システムのパフォーマンスや健康状態に対する重要な可視性を削除したり、ダッシュボードを不正確なデータで表示したり、悪意のある活動を隠すために悪用される可能性があります。

aws cloudwatch delete-dashboards --dashboard-names <value>
aws cloudwatch put-dashboard --dashboard-name <value> --dashboard-body <value>

潜在的影響: モニタリングの可視性の喪失と誤った情報。

cloudwatch:DeleteInsightRules, cloudwatch:PutInsightRule ,cloudwatch:PutManagedInsightRule

Insight ルールは異常を検出し、パフォーマンスを最適化し、リソースを効果的に管理するために使用されます。既存の Insight ルールを削除することで、攻撃者は重要なモニタリング機能を削除し、システムをパフォーマンスの問題やセキュリティの脅威から盲目にさせる可能性があります。さらに、攻撃者は Insight ルールを作成または変更して、誤ったデータを生成したり、悪意のある活動を隠したりして、誤った診断や運用チームからの不適切な応答を引き起こす可能性があります。

aws cloudwatch delete-insight-rules --rule-names <value>
aws cloudwatch put-insight-rule --rule-name <value> --rule-definition <value> [--rule-state <value>]
aws cloudwatch put-managed-insight-rules --managed-rules <value>

潜在的影響: パフォーマンスの問題や異常を検出して対応する難しさ、誤った意思決定、および悪意のある活動やシステムの障害を隠す可能性があります。

cloudwatch:DisableInsightRules, cloudwatch:EnableInsightRules

重要なインサイトルールを無効にすることで、攻撃者は組織を重要なパフォーマンスおよびセキュリティメトリクスから盲目にすることができます。逆に、誤ったルールを有効にしたり構成したりすることで、偽のデータを生成したり、ノイズを作成したり、悪意のある活動を隠すことができるかもしれません。

aws cloudwatch disable-insight-rules --rule-names <value>
aws cloudwatch enable-insight-rules --rule-names <value>

潜在的影響: 運用チームの混乱、実際の問題への遅れた対応や誤ったアラートに基づく不必要な行動が引き起こされる可能性がある。

cloudwatch:DeleteMetricStream , cloudwatch:PutMetricStream , cloudwatch:PutMetricData

cloudwatch:DeleteMetricStreamcloudwatch:PutMetricStream 権限を持つ攻撃者は、メトリックデータストリームを作成および削除することができ、セキュリティ、モニタリング、データの整合性が危険にさらされる可能性がある:

  • 悪意のあるストリームの作成: 機密データを不正な宛先に送信するためのメトリックストリームを作成する。

  • リソースの操作: 過剰なデータを持つ新しいメトリックストリームの作成は、多くのノイズを生み出し、誤ったアラートを引き起こし、真の問題を隠す可能性がある。

  • モニタリングの中断: メトリックストリームを削除することで、攻撃者はモニタリングデータの連続的な流れを中断する。これにより、彼らの悪意のある活動が効果的に隠される。

同様に、cloudwatch:PutMetricData 権限を持つ場合、メトリックストリームにデータを追加することが可能となる。これにより、不適切なデータの追加量によってDoSが発生し、完全に無効化される可能性がある。

aws cloudwatch delete-metric-stream --name <value>
aws cloudwatch put-metric-stream --name <value> [--include-filters <value>] [--exclude-filters <value>] --firehose-arn <value> --role-arn <value> --output-format <value>
aws cloudwatch put-metric-data --namespace <value> [--metric-data <value>] [--metric-name <value>] [--timestamp <value>] [--unit <value>] [--value <value>] [--dimensions <value>]

以下は、指定されたEC2インスタンスでCPU使用率が70%に対応するデータを追加する例です:

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 権限を持つ攻撃者は、重要なメトリックストリームを停止することで、悪意のある活動を隠すことができます。

aws cloudwatch stop-metric-streams --names <value>
aws cloudwatch start-metric-streams --names <value>

潜在的影響: モニタリングデータの流れに混乱が生じ、異常およびインシデントの検出に影響を与える可能性があります。

cloudwatch:TagResource, cloudwatch:UntagResource

攻撃者は、CloudWatchリソース(現在はアラームとContributor Insightsルールのみ)からタグを追加、変更、または削除することができます。これにより、タグに基づく組織のアクセス制御ポリシーが混乱する可能性があります。

aws cloudwatch tag-resource --resource-arn <value> --tags <value>
aws cloudwatch untag-resource --resource-arn <value> --tag-keys <value>

潜在的影響: タグベースのアクセス制御ポリシーの混乱。

参考文献

HackTricksのサポート

Last updated