收集 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 bucket,然後 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)。
- 按一下 [儲存變更]。
在確認畫面中,按一下「確認」。
在現有叢集啟用 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」>「角色」>「建立角色」。
- 選取「Custom trust policy」。
貼上下列信任政策:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "firehose.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }點選「下一步」。
搜尋並選取「ECSMetricsFirehoseS3Policy」ECSMetricsFirehoseS3Policy。
點選「下一步」。
在「Role name」(角色名稱) 欄位中輸入
ECSMetricsFirehoseToS3Role。按一下「建立角色」。
建立 Amazon Data Firehose 串流
- 前往 https://console.aws.amazon.com/kinesis 開啟 Kinesis 控制台。
- 在導覽窗格中,選取「Amazon Data Firehose」。
- 按一下「Create Firehose stream」。
- 在「選擇來源和目的地」下方,提供下列設定:
- 來源:選取「直接 PUT」。
- Destination:選取「Amazon S3」。
- 在「Firehose stream name」欄位中,輸入
ecs-metrics-to-secops。 在「轉換記錄」下方的「從 Amazon CloudWatch Logs 解壓縮來源記錄」部分中:
- 選取「開啟解壓縮功能」。
- 請勿選取「開啟訊息擷取功能」。
在「目的地設定」下方:
- S3 儲存貯體:選取 S3 儲存貯體
ecs-metrics-to-secops。 - S3 bucket prefix (選填):輸入
ecs-metrics/。 - S3 儲存貯體錯誤輸出前置字串 (選用):輸入
firehose-errors/。
- S3 儲存貯體:選取 S3 儲存貯體
在「緩衝區提示」下方:
- 緩衝區空間:
5MiB (預設)。 - 緩衝間隔:
300秒 (預設)。
- 緩衝區空間:
在「進階設定」下方:
- 伺服器端加密:選用。如需加密,請啟用這項設定。
- 錯誤記錄:選取「已啟用」 (建議)。
- 權限:選取「選擇現有的 IAM 角色」,然後選取
ECSMetricsFirehoseToS3Role。
按一下「Create Firehose stream」。
等待串流「狀態」顯示為「有效」。
設定 CloudWatch Logs 的 IAM 角色
CloudWatch Logs 需要 IAM 角色,才能將記錄資料傳送至 Firehose 串流。
建立 IAM 政策
- 依序前往「IAM」>「政策」>「建立政策」。
- 選取「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」>「角色」>「建立角色」。
- 選取「Custom trust policy」。
貼上下列信任政策 (將
<region>替換成您的 AWS 區域):{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "logs.<region>.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }點選「下一步」。
搜尋並選取「ECSMetricsCWLtoFirehosePolicy」ECSMetricsCWLtoFirehosePolicy。
點選「下一步」。
在「Role name」(角色名稱) 欄位中輸入
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 使用者。
- 選取建立的「使用者」。
- 選取「安全憑證」分頁標籤。
- 在「存取金鑰」部分中,按一下「建立存取金鑰」。
- 選取「第三方服務」做為「用途」。
- 點選「下一步」。
- 選用:新增說明標記。
- 按一下「建立存取金鑰」。
- 按一下「下載 .csv 檔案」,儲存「存取金鑰」和「私密存取金鑰」,以供日後參考。
- 按一下「完成」。
- 選取「權限」分頁標籤。
- 在「權限政策」部分,按一下「新增權限」。
- 選取「新增權限」。
- 選取「直接附加政策」。
- 搜尋 AmazonS3FullAccess 政策。
- 選取政策。
- 點選「下一步」。
- 按一下「Add permissions」。
在 Google SecOps 中設定資訊提供,擷取 AWS ECS 指標記錄
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「新增動態饋給」。
- 在下一頁,點按「設定單一動態饋給」。
- 在「Feed name」(動態饋給名稱) 中輸入不重複的名稱。
- 選取「Amazon S3 V2」做為「來源類型」。
- 選取「AWS ECS Metrics」做為「記錄類型」。
- 依序點按「繼續」和「提交」。
- 為下列欄位指定值:
- S3 URI:
s3://ecs-metrics-to-secops/ecs-metrics/ - 來源刪除選項:根據偏好選取刪除選項
- 檔案存在時間上限:納入在過去天數內修改的檔案 (預設為 180 天)
- 存取金鑰 ID:具有 S3 儲存貯體存取權的使用者存取金鑰
- 私密存取金鑰:具有 S3 儲存空間存取權的使用者私密金鑰
- 資產命名空間:資產命名空間
- 擷取標籤:要套用至這個動態饋給事件的標籤
- 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 專家尋求解答。