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

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

使用 記錄 Amazon RDS Data API 呼叫 AWS CloudTrail

RDS Data 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 中發生支援的活動 (管理事件) 時,該活動會與事件歷史記錄中的其他 AWS 服務事件一起記錄在 CloudTrail 事件中。您可以在 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 使用者依賴 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 Data 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

從 AWS CloudTrail 追蹤中排除資料 API 事件 (Aurora Serverless v1僅限 )

對於 Aurora Serverless v1,資料 API 事件是管理事件。根據預設,所有資料 API 事件都會包含在 AWS CloudTrail 追蹤中。不過,由於資料 API 可能會產生大量事件,因此您可能想要將這些事件排除在您的 CloudTrail 追蹤中。排除 Amazon RDS Data API 事件設定會從追蹤中排除所有資料 API 事件。您無法排除特定資料 API 事件。

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

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

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

警告

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

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

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

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

了解資料 API 日誌檔案項目

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

Aurora PostgreSQL Serverless v2 和 已佈建

下列範例顯示 CloudTrail 日誌項目,示範 Aurora PostgreSQL Serverless v2 和佈建資料庫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" }