AWS 流程日誌發佈至CloudWatch with Console小記
今天要來寫 AWS 啟用流程日誌
建立方式使用 Console 方式
發佈至 CloudWatch
原始需求想法:
想要知道 AWS 上面連線服務的資訊, 例如針對特定 IP 的服務或是特定的 port, 是誰過來進行連線?
然後並不是所有的服務提供都是放在 LB 後面, 也是會有單一 EC2 提供服務的狀況, 所以這個時候會先想到使用 AWS Flow log 的方式
現實面的考量:
VPC Flow Log 可以發佈到 CloudWatch 與 S3, 兩個部份都會實作
目前想法上應該是用 VPC Flow Log + S3, 因為價格差很多
每月日誌擷取費用
CloudWatch - 0 到 10 TB 每 GB @0.50 USD
S3 - 0 到 10 TB 每 GB @0.25 USD
每月日誌存檔費用
CloudWatch - 每 GB @0.03 USD
S3 - 每 GB @0.023 USD
做法上還是要看應用的情景是啥, CloudWatch 可以馬上查詢, S3 的部分應該是要透過 Aethna 來結合查詢
首先第一彈就是來實作使用 Console 的方式, 啟用 AWS Flow log, 發佈到 CloudWatch
首先登入到 AWS Console
點選 AWS Console 搜尋 CloudWatch 到 CloudWatch 服務首頁
點選 左方的 Log groups
點選 Create log group
輸入群組資訊
點選 Create
確認 Log group 有被建立
接下來建立 IAM Role (讓 VPC 有權限寫入 ColudWatch Log Group)
登入到 IAM 服務首頁
點選左方的 Roles
點選 Create role
點選 EC2 作為使用案例
點選 Next: Permissions
Permission 的部分先跳過, 因為等等會進行編輯(也可以在這個頁面用 Create policy 建立, 不過會新增一個分頁, 所以等等回來處理)
點選 Next: Tags
視需求看看要不要加入 Tag
點選 Next: Review
輸入 Role Name 與相關資訊
點選 Create role
點選剛建立的 IAM Role
點選 Permissions
點選 Attach policies
點選 Create policy
點選 JSON 分頁
修改內容如下
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:DescribeLogGroups",
"logs:DescribeLogStreams"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
點選 Review policy
輸入名稱
點選 Create policy
回到 VPC-Flow-Log 的頁面
建議重新整理 policy
輸入關鍵字 VPC-Flow
勾選剛剛建立的 Policy "VPC-Flow-Log-Policy"
點選 Attach policy
觀察相關資訊
接下來點選 Trust relationships
點選 Edit trust relationship
設定以下權限讓 VPC Flow Log Service 能 Assume the Role
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "vpc-flow-logs.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
點選 Update Trust Policy
確認相關資訊
接下來建立 VPC Flow Log
登入到 VPC 的服務頁面
然後切換到要啟用 VPC Flow Log 的 Region
勾選要啟用的 VPC
點選 Actions
點選 Create flow log
輸入名稱
選取要擷取的類型
選取 aggregation 時間區間
點選 Send to CloudWatch Logs
Destination log group: 選取剛剛建立的 Log group
IAM role: 選取剛剛建立的 Role
Log record format: 使用預設格式
點選 Create flow log
觀察相關資訊
點選剛剛勾選的 VPC
點選 Flow logs 標籤
可以觀察到相關資訊
==== 驗證相關資訊 ====
登入 CloudWatch 服務頁面
點選左方 Log groups
點選 剛剛建立的 log group “flow-log-group”
因為剛剛設定的 aggregation 時間是 10 分鐘, 所以至少要 10 分鐘後才會有 Log stream
可以觀察到相關資訊
這個邊可以觀察到 eni- 開頭的 log stream, 會對應到服務或是資源的網卡 ID
接下來要搜尋相關資訊
點選 Search all
之前建立 VPC Flow log 是使用預設的格式
Log 欄位說明參考:
VPC 流程日誌- Amazon Virtual Private Cloud
欄位列表
<version> <account-id> <interface-id> <srcaddr> <dstaddr> <srcport> <dstport> <protocol> <packets> <bytes> <start> <end> <action> <log-status>
Protocol 只會列出協定號碼
最常用的應該就是 6 - TCP, 其他可以參考 http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml
最常用的應該是來源或是目的地的 IP / PORT, 要注意的是因為是網卡的資訊, 所以 log 上面會是資源的 Private IPv4 addresses 不是 Public IPv4 address
查詢的方式
如果不精確的方式, 也許可以直接輸入 IP
另外也可以用比較精準的方式來搜尋
例如 要找 dstport 22 的 log
[version, accountid, interfaceid, srcaddr, dstaddr, srcport, dstport = 22, protocol, packets, bytes, start, end, action, logstatus]
當然也可以結合多條件
[version, accountid, interfaceid, srcaddr = 210.85.244.94, dstaddr, srcport, dstport = 22, protocol, packets, bytes, start, end, action, logstatus]
輸出參考
這樣算是又向 AWS 前進一步
~ enjoy it
Reference:
英明的同事筆記
https://docs.aws.amazon.com/zh_tw/vpc/latest/userguide/flow-logs.html
http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml
沒有留言:
張貼留言