收集 AWS ECS 指標記錄
剖析器版本:1.0
本文說明如何使用 Amazon S3,將 AWS ECS 指標記錄擷取至 Google Security Operations。
Amazon Elastic Container Service (Amazon ECS) 是全代管的容器自動化調度管理服務,可協助您部署、管理及擴充容器化應用程式。CloudWatch Container Insights 會從 ECS 叢集、服務、工作和容器收集、匯總及摘要指標和記錄,包括 CPU 使用率、記憶體用量、網路流量和儲存空間 I/O。這項整合功能會使用 Amazon Data Firehose,將 Container Insights 效能記錄事件從 CloudWatch Logs 串流至 S3 值區,然後 Google SecOps 會使用 Amazon S3 V2 資訊提供擷取這些事件。
事前準備
請確認您已完成下列事前準備事項:
- Google SecOps 執行個體
- 具備管理下列項目的權限,可存取 AWS 管理主控台:
- Amazon ECS (叢集、帳戶設定)
- Amazon CloudWatch Logs (記錄群組、訂閱篩選器)
- Amazon Data Firehose (傳送串流)
- Amazon S3 (儲存桶)
- AWS IAM (角色、政策、使用者)
在 Amazon ECS 上啟用容器深入分析
如要在 ECS 叢集的 CloudWatch Logs 中產生效能記錄事件,必須啟用 Container Insights。
在帳戶層級啟用 Container Insights
- 前往 https://console.aws.amazon.com/ecs/v2,登入 Amazon ECS 控制台。
- 在導覽窗格中,選取「帳戶設定」。
- 按一下「Update」。
- 選取「Container Insights with enhanced observability」(具備強化觀測功能的容器洞察)。
- 按一下 [儲存變更]。
在確認畫面上,按一下「確認」。
在現有叢集上啟用 Container Insights
如要更新現有 ECS 叢集,請執行下列 AWS CLI 指令 (將
your-cluster-name替換成叢集名稱):aws ecs update-cluster-settings --cluster your-cluster-name --settings name=containerInsights,value=enhanced
驗證 CloudWatch 記錄群組
啟用容器深入分析後,Amazon ECS 會自動建立 CloudWatch Logs 記錄群組,命名慣例如下:
/aws/ecs/containerinsights/your-cluster-name/performance
驗證方法:
- 在 AWS 控制台中,依序前往「CloudWatch」>「Logs」>「Log groups」。
- 搜尋
/aws/ecs/containerinsights/。 - 確認每個已啟用 Container Insights 的 ECS 叢集都有記錄群組。
設定 AWS S3 儲存空間
- 按照這份使用者指南建立 Amazon S3 bucket:建立 bucket。
- 請儲存 bucket 的「名稱」和「區域」,以供日後參考 (例如
ecs-metrics-to-secops)。
設定 Amazon Data Firehose 的 IAM 角色
Amazon Data Firehose 需要 IAM 角色,才能將記錄寫入 S3 bucket。
建立 IAM 政策
- 在 AWS 控制台中,依序前往「IAM」>「Policies」>「Create policy」。
- 選取「JSON」分頁標籤。
貼上下列政策 (將
ecs-metrics-to-secops替換為實際值區名稱):{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3Delivery", "Effect": "Allow", "Action": [ "s3:AbortMultipartUpload", "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::ecs-metrics-to-secops", "arn:aws:s3:::ecs-metrics-to-secops/*" ] }, { "Sid": "CloudWatchLogging", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:log-group:/aws/kinesisfirehose/ecs-metrics-to-secops:log-stream:*" } ] }點選「下一步」。
在「Policy name」(政策名稱) 欄位中輸入
ECSMetricsFirehoseS3Policy。點選「建立政策」。
建立 IAM 角色
- 依序前往「IAM」>「角色」>「建立角色」。
- 選取「自訂信任政策」。
貼上下列信任政策:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "firehose.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }點選「下一步」。
搜尋並選取「ECSMetricsFirehoseS3Policy」ECSMetricsFirehoseS3Policy。
點選「下一步」。
在「角色名稱」欄位中輸入
ECSMetricsFirehoseToS3Role。按一下「建立角色」。
建立 Amazon Data Firehose 串流
- 前往 https://console.aws.amazon.com/kinesis 開啟 Kinesis 控制台。
- 在導覽窗格中,選取「Amazon Data Firehose」。
- 按一下「建立 Firehose 串流」。
- 在「選擇來源和目的地」下方,提供下列設定:
- 來源:選取「直接 PUT」。
- 目的地:選取「Amazon S3」。
- 在「Firehose stream name」(Firehose 串流名稱) 欄位中輸入
ecs-metrics-to-secops。 在「轉換記錄」下方的「從 Amazon CloudWatch Logs 解壓縮來源記錄」部分中:
- 選取「開啟解壓縮功能」。
- 請勿選取「開啟訊息擷取功能」。
在「目的地設定」下方:
- S3 bucket:選取 S3 bucket
ecs-metrics-to-secops。 - S3 bucket prefix (選用):輸入
ecs-metrics/。 - S3 值區錯誤輸出前置字串 (選用):輸入
firehose-errors/。
- S3 bucket:選取 S3 bucket
在「緩衝區提示」下方:
- 緩衝區大小:
5MiB (預設)。 - 緩衝區間隔:
300秒 (預設)。
- 緩衝區大小:
在「進階設定」下方,完成下列操作:
- 伺服器端加密:選用。如需加密,請啟用這項設定。
- 錯誤記錄:選取「已啟用」 (建議)。
- 權限:選取「選擇現有的 IAM 角色」,然後選取
ECSMetricsFirehoseToS3Role。
按一下「建立 Firehose 串流」。
等待串流「狀態」顯示為「有效」。
設定 CloudWatch Logs 的 IAM 角色
CloudWatch Logs 需要 IAM 角色,才能將記錄資料傳送至 Firehose 串流。
建立 IAM 政策
- 依序前往「IAM」>「Policies」>「Create policy」。
- 選取「JSON」分頁標籤。
貼上下列政策 (將
<region>和<account-id>替換為您的 AWS 區域和帳戶 ID):{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "firehose:PutRecord", "firehose:PutRecordBatch" ], "Resource": "arn:aws:firehose:<region>:<account-id>:deliverystream/ecs-metrics-to-secops" } ] }點選「下一步」。
在「Policy name」(政策名稱) 欄位中輸入
ECSMetricsCWLtoFirehosePolicy。點選「建立政策」。
建立 IAM 角色
- 依序前往「IAM」>「角色」>「建立角色」。
- 選取「自訂信任政策」。
貼上下列信任政策 (將
<region>替換成您的 AWS 區域):{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "logs.<region>.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }點選「下一步」。
搜尋並選取「ECSMetricsCWLtoFirehosePolicy」ECSMetricsCWLtoFirehosePolicy。
點選「下一步」。
在「角色名稱」欄位中輸入
ECSMetricsCWLtoFirehoseRole。按一下「建立角色」。
建立 CloudWatch Logs 訂閱篩選器
- 在 AWS 控制台中,依序前往「CloudWatch」>「Logs」>「Log groups」。
- 選取記錄群組
/aws/ecs/containerinsights/your-cluster-name/performance。 - 選取「訂閱篩選條件」分頁標籤。
- 依序點選「建立」> 建立 Amazon Data Firehose 訂閱篩選器。
- 提供下列設定詳細資料:
- 目的地:選取 Firehose 串流
ecs-metrics-to-secops。 - 授予權限:選取
ECSMetricsCWLtoFirehoseRole角色。 - 訂閱篩選器名稱:輸入描述性名稱 (例如
ecs-metrics-to-secops-filter)。 - 記錄格式:選取「其他」。
- 訂閱篩選器模式:如要傳送所有 Container Insights 成效事件,請將此欄位留空。
- 目的地:選取 Firehose 串流
按一下「開始串流播放」。
為 Google SecOps 設定 IAM 使用者
Google SecOps 需要有權存取 S3 值區的 IAM 使用者,才能擷取傳送的記錄。
- 請按照這份使用者指南建立使用者:建立 IAM 使用者。
- 選取建立的「使用者」。
- 選取「安全憑證」分頁標籤。
- 在「Access Keys」部分中,按一下「Create Access Key」。
- 選取「第三方服務」做為「用途」。
- 按一下「下一步」。
- 選用:新增說明標記。
- 按一下「建立存取金鑰」。
- 按一下「Download .csv file」(下載 .csv 檔案),儲存「Access Key」(存取金鑰) 和「Secret Access Key」(私密存取金鑰),以供日後參考。
- 按一下 [完成]。
- 選取「權限」分頁標籤。
- 在「Permissions policies」(權限政策) 區段中,按一下「Add permissions」(新增權限)。
- 選取「新增權限」。
- 選取「直接附加政策」。
- 搜尋「AmazonS3FullAccess」AmazonS3FullAccess政策。
- 選取政策。
- 點選「下一步」。
- 按一下「Add permissions」。
在 Google SecOps 中設定資訊提供,擷取 AWS ECS 指標記錄
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「新增動態消息」。
- 在下一個頁面中,按一下「設定單一動態饋給」。
- 輸入動態饋給名稱的專屬名稱。
- 選取「Amazon S3 V2」做為「來源類型」。
- 選取「AWS ECS Metrics」(AWS ECS 指標) 做為「Log type」(記錄類型)。
- 依序點按「繼續」和「提交」。
- 為下列欄位指定值:
- S3 URI:
s3://ecs-metrics-to-secops/ecs-metrics/ - 來源刪除選項:根據偏好設定選取刪除選項
- 檔案存在時間上限:包含在過去天數內修改的檔案 (預設為 180 天)
- 存取金鑰 ID:具有 S3 值區存取權的使用者存取金鑰
- 存取密鑰:具有 S3 bucket 存取權的使用者私密金鑰
- 資產命名空間:資產命名空間
- 擷取標籤:要套用至這個動態饋給事件的標籤
- S3 URI:
- 依序點按「繼續」和「提交」。
UDM 對應表
| 記錄欄位 | UDM 對應 | 邏輯 |
|---|---|---|
cluster_rtt_ClusterId_label |
additional.fields |
已合併 |
cluster_rtt_description_label |
additional.fields |
已合併 |
compressed_label |
additional.fields |
已合併 |
connectionID_localvalue_label |
additional.fields |
已合併 |
connectionID_serverValue_label |
additional.fields |
已合併 |
request_id_label |
additional.fields |
已合併 |
source_label |
additional.fields |
已合併 |
Time |
metadata.event_timestamp |
已剖析為 RFC 3339 |
has_principal |
metadata.event_type |
已對應:true → STATUS_UPDATE、true → NETWORK_CONNECTION |
connection |
metadata.product_event_type |
直接對應 |
sent_bytes |
network.sent_bytes |
直接對應 |
hostname |
principal.asset.hostname |
直接對應 |
principal_ip |
principal.asset.ip |
已合併 |
hostname |
principal.hostname |
直接對應 |
principal_ip |
principal.ip |
已合併 |
principal_port |
principal.port |
直接對應 |
action |
security_result.action |
已合併 |
severity |
security_result.severity |
對應:"ALERT", "EMERGENCY" → HIGH、"INFO", "NOTICE" → INFORMATIONAL、DEBUG → `LO... |
target_port |
target.port |
直接對應 |
url |
target.url |
直接對應 |
| 不適用 | metadata.event_type |
常數:STATUS_UPDATE |
| 不適用 | security_result.severity |
常數:CRITICAL |
變更記錄
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求解答。