Amazon Kinesis Data Streams 實現跨賬戶應用日誌收集

亞馬遜雲開發者發表於2022-05-31

概述

我們在之前的文章介紹瞭如何使用 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 為例,詳細講解一下整個的實現過程。

image.png

在開始之前,我們考慮這樣一種場景。我們在 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。

image.png

點選下一步,建立策略,策略文件參考如下:

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

image.png

若建立新的安全組,安全組的入站規則需新增允許來自於 Amazon EC2 的所屬安全組訪問 443 埠,入站規則參考下圖:

image.png

  • 登入 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,檢視日誌,驗證是否成功。

image.png

  • 登入 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 資料:

image.png

  • Fluent Bit 資料:

image.png

本篇作者

image.png

馬濤

亞馬遜雲科技解決方案研發架構師

主要負責雲上解決方案的設計與研發。

相關文章