概述
我們在之前的文章介紹瞭如何使用 Fluent Bit 結合 Amazon Kinesis Data Streams、Amazon Lambda 以及 Amazon OpenSearch Search 在同賬戶下構建應用日誌系統。但是在有些場景下,企業可能會存在多個賬戶,因為企業內控的需要,管理員希望能夠將各個賬戶下的應用日誌通過 Private Link 傳輸到指定賬戶下,進行集中化的日誌處理或審計。本篇文章中關於使用 Amazon Lambda 將日誌寫入 Amazon OpenSearch Service 中是基於上一篇部落格介紹的內容,如果您之前沒有閱讀過《使用 Fluent Bit 與 Amazon OpenSearch Service 構建日誌系統》,建議您先點選這裡閱讀 https://aws.amazon.com/cn/blo...。通過本文,您將瞭解到如何通過 Fluent Bit 結合 Amazon STS AssumeRole、Amazon Kinesis Data Streams 等服務,在跨賬戶的場景下進行集中化日誌處理。閱讀本文,您將會了解到:
- 如何通過 Amazon Role Trust Relationship 與 Amazon STS AssumeRole 配置跨賬戶傳輸日誌許可權
- 如何通過 Amazon for Fluent Bit 2.21.1 跨賬戶傳輸日誌
簡要說明
下面我們基於下圖的總體架構,以 us-west-2 為例,詳細講解一下整個的實現過程。
在開始之前,我們考慮這樣一種場景。我們在 Amazon Web Services 賬戶 A 的 EC2 中部署了 Nginx,用於構建我們的 Web Server,並將賬戶 A 的 Amazon EC2 的 Nginx 日誌通過 Private Link,傳送到 B 賬戶的 Amazon Kinesis Data Stream 裡。關於B賬戶的 Amazon Lambda 與 Amazon Kinesis Data Stream 以及 VPC Endpoint、 Amazon OpenSearch Service 服務的建立,可以參考我們之前文章。
1、如何通過 Amazon Role Trust Relationship 與 Amazon STS AssumeRole 配置跨賬戶傳輸日誌許可權
我們先登入 B 賬戶,這裡我們使用 us-west-2 區域,在 IAM 服務中建立一個角色,如下圖所示:選擇信任的實體型別處選擇另一個賬戶,並輸入賬戶 A 的 ID。
點選下一步,建立策略,策略文件參考如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kinesis:PutRecord",
"kinesis:PutRecords"
],
"Resource": "arn:aws:kinesis:us-west-2:<YOUR ACCOUNT ID>:stream/LogStream"
}
]
}
左滑檢視更多
注意:請將替換成您所使用的 B 賬戶 ID,建立角色名稱為 demo-writing-kds。
- 登入 A 賬戶,同樣選擇 us-west-2 區域。建立 Amazon EC2,並安裝 Fluent Bit。安裝步驟同樣可以參考我們之前文章的“安裝與配置 Amazon for Fluent Bit 2.21.1”部分,安裝過程我們可以將 /etc/fluent-bit/conf/fluent-bit.conf 檔案內容設定為空。
- 為 Amazon EC2 建立新的 IAM 角色,“use cases”我們選擇 Amazon EC2,點選 Next, 建立策略,配置 Amazon STS AssumeRole,策略文件參考如下:
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "<demo-writing-kds>"
}]
}
左滑檢視更多
注意:請將替換成您在前面步驟所建立 demo-writing-kds 角色的 ARN,該角色在 B 賬戶中。
2、配置 Amazon for Fluent Bit 2.21.1 通過 Private Link 跨賬戶傳輸日誌
我們還是在 A 賬戶下選擇 us-west-2 區域。注意,以下場景不需要在 A 賬戶下建立 Amazon Kinesis Data Stream。
- 讓 Amazon EC2 通過 Private Link 訪問 B 賬戶的 Amazon Kinesis Data Streams。建立 Amazon Kinesis Data Streams 的 VPC Endpoint,為了簡化,在選擇 VPC 時我們可以選擇 Amazon EC2 所在的 VPC。
若建立新的安全組,安全組的入站規則需新增允許來自於 Amazon EC2 的所屬安全組訪問 443 埠,入站規則參考下圖:
- 登入 Amazon EC2,編輯/etc/fluent-bit/conf/fluent-bit.conf檔案,為 Fluent Bit 的 output 外掛“kinesis_streams”配置 Arn,完整配置檔案內容參考如下:
[ SERVICE]
Flush 5
Daemon off
Log_Level info
Log_File /tmp/fluent-bit.log
Storage.path /tmp/chunks-buffer
Storage.backlog.mem_limit 5M
[INPUT]
Name tail
# log file location
Path /var/log/nginx/access.log
Tag nginx-log
Read_from_head true
#use this as checkpoint
DB /tmp/checkpoint-nginx.db
DB.Sync Normal
[OUTPUT]
Name kinesis_streams
# Match Tag
Match nginx-log
# AWS region
Region us-west-2
# Kinesis stream name
Stream LogStream
Arn <demo-writing-kds>
Retry_Limit False
Auto_retry_requests True
左滑檢視更多
同樣,我們需要將替換成 demo-writing-kds 角色的 ARN
- 啟動 Fluent Bit,檢視日誌,驗證是否成功。
- 登入 Amazon OpenSearch Service 的 dashboard,您即可看到寫入的日誌。
注意:如果想了接如何通過 Amazon Lambda 消費 Amazon Kinesis Data Stream 的日誌訊息,並將日誌寫入到 Amazon OpenSearch Service 中,可以點選這裡瞭解。關於如何通過公網方式使用 Nginx 代理方式訪問 VPC 內的 OpenSearch dashboard,大家可以參考我們的官方文件 https://docs.aws.amazon.com/o...。
總結
在本文中,我們介紹瞭如何通過開源日誌收集工具 Fluent Bit,在多賬戶的場景下結合 Amazon Role Trust Relationship 與 Amazon STS AssumeRole,並且通過使用 VPC Endpoint,我們還可以用內網訪問 Kinesis Data Streams,從而滿足企業內控的需要。在實際使用時,我們也需要注意跨賬戶使用 VPC Endpoint 連線 Kinesis Data Streams 時,兩個賬戶下對應的服務必須處於相同的 Region,企業可以結合自身實際情況來決定是否啟用 VPC Endpoint。
參考資料
- VPC endpoints 資料:
- Fluent Bit 資料:
本篇作者
馬濤
亞馬遜雲科技解決方案研發架構師
主要負責雲上解決方案的設計與研發。