使用 AWS CloudTrail 記錄 Amazon RDS 資料 API 呼叫 - Amazon Aurora

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 AWS CloudTrail 記錄 Amazon RDS 資料 API 呼叫

RDS 資料 API (資料 API) 整合了 AWS CloudTrail,後者是一項服務,可提供由使用者、角色或 AWS 服務在資料 API 中所採取動作的記錄。CloudTrail 將資料 API 的所有 API 呼叫擷取為事件,包括來自 Amazon RDS 主控台的呼叫以及來自對資料 API 操作發出的程式碼呼叫。如果您建立線索,就可以持續將 CloudTrail 事件交付至 Amazon S3 儲存貯體,包括資料 API 的事件。使用 CloudTrail 收集的資訊,您可以判斷眾多資訊。此資訊包括對資料 API 提出的請求、提出請求的 IP 地址、何人提出請求、何時提出請求,以及其他詳細資訊。

若要進一步了解 CloudTrail,請參閱「AWS CloudTrail 使用者指南」

使用 CloudTrail 中的資料 API 資訊

當您建立帳戶時,系統即會在 AWS 帳戶中啟用 CloudTrail。當資料 API 中發生支援活動 (管理事件) 時,該活動會記錄在 CloudTrail 事件中,其他 AWS 服務事件則記錄於事件歷史記錄中。您可以檢視、搜尋和下載 AWS 帳戶中的最新管理事件。如需詳細資訊,請參閱「AWS CloudTrail 使用者指南」中的使用 CloudTrail 事件歷史記錄

如需您 AWS 帳戶中正在進行事件的記錄 (包含資料 API 的事件),請建立追蹤記錄。線索能讓 CloudTrail 將日誌檔案交付至 Amazon S3 儲存貯體。根據預設,當您在主控台建立線索時,線索會套用到所有 AWS 區域。權杖會記錄來自 AWS 分割區中所有 AWS 區域的事件,然後將記錄檔案交付到您指定的 Amazon S3 儲存貯體。此外,您可以設定其他 AWS 服務,以進一步分析和處理 CloudTrail 日誌中所收集的事件資料。如需詳細資訊,請參閱 AWS CloudTrail 使用者指南中的以下主題:

所有資料 API 操作均由 CloudTrail 記錄,並記載於 Amazon RDS 資料服務 API 參考中。例如,對 BatchExecuteStatementBeginTransactionCommitTransactionExecuteStatement 操作的呼叫都會在 CloudTrail 日誌檔案中產生項目。

每一筆事件或日誌項目都會包含產生請求者的資訊。身分資訊可協助您判斷下列事項:

  • 該請求是否使用根或使用者憑證提出。

  • 提出該請求時,是否使用了特定角色或聯合身分使用者的暫時安全憑證。

  • 該請求是否由另一項 AWS 服務提出。

如需詳細資訊,請參閱 CloudTrail userIdentity 元素

包含 AWS CloudTrail 線索中的資料 API 事件或將資料 API 事件從中排除

大多數資料 API 使用者都依賴 AWS CloudTrail 權杖中的事件,來提供資料 API 操作的記錄。事件資料不會在資料 API 的請求中顯示資料庫名稱、結構描述名稱或 SQL 陳述式。不過,知道哪個使用者在特定時間對特定資料庫叢集進行某種呼叫,有助於偵測異常存取模式。

在 AWS CloudTrail 線索中包含資料 API 事件

對於 Aurora PostgreSQL Serverless v2 和佈建資料庫,下列資料 API 操作會將 AWS CloudTrail 記錄為資料事件資料事件是 CloudTrail 預設不會記錄的大容量資料平面 API 操作。資料事件需支付額外的費用。如需有關 CloudTrail 定價的資訊,請參閱 AWS CloudTrail 定價

您可以使用 CloudTrail 主控台、AWS CLI 或 CloudTrail API 操作,來記錄這些資料 API 操作。在 CloudTrail 主控台中,為資料事件類型選擇 RDS 資料 API:資料庫叢集。如需詳細資訊,請參閱《AWS CloudTrail 使用者指南》中的使用 AWS Management Console 記錄資料事件

使用 AWS CLI,執行 aws cloudtrail put-event-selectors 命令來記錄線索的這些資料 API 操作。若要記錄資料庫叢集上所有資料 API 事件,請為資源類型指定 AWS::RDS::DBCluster。下列範例會記錄資料庫叢集上的所有資料 API 事件。如需詳細資訊,請參閱《AWS CloudTrail 使用者指南》中的使用 AWS Command Line Interface 記錄資料事件

aws cloudtrail put-event-selectors --trail-name trail_name --advanced-event-selectors \ '{ "Name": "RDS Data API Selector", "FieldSelectors": [ { "Field": "eventCategory", "Equals": [ "Data" ] }, { "Field": "resources.type", "Equals": [ "AWS::RDS::DBCluster" ] } ] }'

您可以設定進階事件選擇器,以額外篩選 readOnlyeventName,resources.ARN 欄位。如需這些欄位的詳細資訊,請參閱 AdvancedFieldSelector

將資料 API 事件從 AWS CloudTrail 線索 (僅 Aurora Serverless v1) 中排除

對於 Aurora Serverless v1,資料 API 事件是管理事件。根據預設,所有資料 API 事件都會包含在 AWS CloudTrail 線索中。但是,因為資料 API 會產生大量的事件,您就能夠將這些事件從 CloudTrail 線索中排除。排除 Amazon RDS 資料 API 事件設定會將所有資料 API 事件從線索中排除。您無法排除特定的資料 API 事件。

若要將資料 API 事件從權杖中排除,請執行下列程序:

  • 在 CloudTrail 主控台中,當您建立權杖更新權杖時,選擇 Exclude Amazon RDS Data API events (排除 Amazon RDS 資料 API 事件) 設定。

  • 在 CloudTrail API 中,使用 PutEventSelectors 操作。如果使用的是進階事件選擇器,您可以將 eventSource 欄位設定為不等於 rdsdata.amazonaws.com,即可排除資料 API 事件。如果使用的是基本事件選擇器,您可以將 ExcludeManagementEventSources 屬性的值設定為 rdsdata.amazonaws.com 來排除資料 API 事件。如需詳細資訊,請參閱《AWS CloudTrail 使用者指南》中的使用 AWS Command Line Interface 記錄事件

警告

從 CloudTrail 日誌中排除資料 API 事件可能會遮蔽資料 API 動作。授予委託人執行此操作所需的 cloudtrail:PutEventSelectors 許可時時,請務必小心。

您可以變更主控台設定或權杖的事件選擇器,以隨時關閉此排除。然後,權杖即會開始記錄資料 API 事件。但無法復原排除有效期間發生過的資料 API 事件。

當您使用主控台或 API 排除資料 API 事件時,產生的CloudTrail PutEventSelectors API 操作也會記錄在 CloudTrail 日誌中。如果資料 API 事件未出現在 CloudTrail 日誌中,請尋找 ExcludeManagementEventSources 屬性設為 rdsdata.amazonaws.comPutEventSelectors 事件。

如需更多詳細資訊,請參閱 AWS CloudTrail 使用者指南中的記錄權杖的管理事件

了解資料 API 日誌檔案項目

權杖是一種組態,能讓事件以日誌檔案的形式交付到您指定的 Amazon S3 儲存貯體。CloudTrail 日誌檔案包含一或多個日誌專案。一個事件為任何來源提出的單一請求,並包含請求動作、請求的日期和時間、請求參數等資訊。CloudTrail 日誌檔並非依公有 API 呼叫的堆疊追蹤排序,因此不會以任何特定順序出現。

Aurora PostgreSQL Serverless 第 2 版和已佈建

下列範例示範 CloudTrail 日誌項目,此項目會示範 Aurora PostgreSQL Serverless 第 2 版和已佈建資料庫的 ExecuteStatement 操作。對於這些資料庫,所有資料 API 事件都是事件來源為 rdsdataapi.amazonaws.com 且事件類型為 Rds Data Service 的資料事件。

{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "AKIAIOSFODNN7EXAMPLE", "arn": "arn:aws:iam::123456789012:user/johndoe", "accountId": "123456789012", "accessKeyId": "AKIAI44QH8DHBEXAMPLE", "userName": "johndoe" }, "eventTime": "2019-12-18T00:49:34Z", "eventSource": "rdsdataapi.amazonaws.com", "eventName": "ExecuteStatement", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.0", "userAgent": "aws-cli/1.16.102 Python/3.7.2 Windows/10 botocore/1.12.92", "requestParameters": { "continueAfterTimeout": false, "database": "**********", "includeResultMetadata": false, "parameters": [], "resourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:my-database-1", "schema": "**********", "secretArn": "arn:aws:secretsmanager:us-east-1:123456789012:secret:dataapisecret-ABC123", "sql": "**********" }, "responseElements": null, "requestID": "6ba9a36e-b3aa-4ca8-9a2e-15a9eada988e", "eventID": "a2c7a357-ee8e-4755-a0d0-aed11ed4253a", "eventType": "Rds Data Service", "recipientAccountId": "123456789012" }

Aurora Serverless v1

下列範例示範上述範例 CloudTrail 日誌項目在 Aurora Serverless v1 會如何顯示。對於 Aurora Serverless v1,所有事件都是管理事件,其中事件來源為 rdsdata.amazonaws.com,而事件類型為 AwsApiCall

{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "AKIAIOSFODNN7EXAMPLE", "arn": "arn:aws:iam::123456789012:user/johndoe", "accountId": "123456789012", "accessKeyId": "AKIAI44QH8DHBEXAMPLE", "userName": "johndoe" }, "eventTime": "2019-12-18T00:49:34Z", "eventSource": "rdsdata.amazonaws.com", "eventName": "ExecuteStatement", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.0", "userAgent": "aws-cli/1.16.102 Python/3.7.2 Windows/10 botocore/1.12.92", "requestParameters": { "continueAfterTimeout": false, "database": "**********", "includeResultMetadata": false, "parameters": [], "resourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:my-database-1", "schema": "**********", "secretArn": "arn:aws:secretsmanager:us-east-1:123456789012:secret:dataapisecret-ABC123", "sql": "**********" }, "responseElements": null, "requestID": "6ba9a36e-b3aa-4ca8-9a2e-15a9eada988e", "eventID": "a2c7a357-ee8e-4755-a0d0-aed11ed4253a", "eventType": "AwsApiCall", "recipientAccountId": "123456789012" }