資料庫稽核記錄日誌 - Amazon Redshift

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

資料庫稽核記錄日誌

Amazon Redshift 會記錄您資料庫中連線和使用者活動的相關資訊。這些日誌可協助您基於安全和故障診斷之目的監控資料庫,此程序稱為資料庫稽核。日誌可以儲存在:

  • Amazon S3 儲存貯體 — 這會讓負責監控資料庫中活動的使用者能夠存取資料安全功能。

  • Amazon CloudWatch-您可以使用內建的功能 (例如視覺化功能和設定動 CloudWatch作) 來檢視稽核記錄資料。

注意

SYS_CONNECTION_LOG 會收集 Amazon Redshift Serverless 的連線日誌資料。請注意,當您收集 Amazon Redshift 無伺服器的稽核記錄資料時,無法將資料傳送至記錄檔,只能傳送給。 CloudWatch

Amazon Redshift 日誌

Amazon Redshift 會將資訊記錄在下列日誌檔中:

  • 連線日誌 — 記錄身分驗證嘗試、連線和中斷連線。

  • 使用者日誌 — 記錄對資料庫使用者定義所做之變更的相關資訊。

  • 使用者活動日誌 — 在每個查詢於資料庫上執行之前先行記錄。

連線和使用者日誌主要用於安全目的。您可以使用連線日誌,來監控正在連線至資料庫的使用者相關資訊,以及相關的連線資訊。此資訊可能是使用者的 IP 地址、使用者何時提出請求、使用者使用哪種類型的身分驗證等等。您可以利用使用者日誌,來監控對資料庫使用者之定義所做的變更。

使用者活動日誌主要用於故障診斷目的。它會追蹤使用者和系統在資料庫中執行之查詢類型的相關資訊。

連線日誌和使用者日誌對應至儲存在資料庫中系統資料表的資訊。您可以使用系統資料表來取得相同資訊,但是日誌檔提供更簡單的擷取和檢閱機制。日誌檔依賴 Amazon S3 許可而非資料庫許可,針對資料表執行查詢。此外,藉由檢視日誌檔中的資訊,而非查詢系統資料表,您可以減少與資料庫互動的任何影響。

注意

日誌檔不如系統日誌資料表 STL_USERLOGSTL_CONNECTION_LOG 一樣新。比最新記錄舊的記錄 (但不含最新記錄) 會複製到日誌檔。

注意

若為 Amazon Redshift Serverless,SYS_CONNECTION_LOG 會收集連線日誌資料。當您收集 Amazon Redshift 無伺服器的稽核記錄資料時,只能將資料傳送到記錄檔。 CloudWatch

連線日誌

記錄身分驗證嘗試以及連線和中斷連線。下表說明連線日誌中的資訊。如需這些欄位的相關資訊,請參閱《Amazon Redshift 資料庫開發人員指南》中的 STL_CONNECTION_LOG。如需 Amazon Redshift Serverless 所收集連線日誌資料的相關資訊,請參閱 SYS_CONNECTION_LOG

資料欄名稱 描述
事件 連線或身分驗證事件。
recordtime 發生事件的時間。
remotehost 遠端主機的名稱或 IP 地址。
remoteport 遠端主機的連接埠號碼。
pid 與陳述式相關聯的處理程序 ID。
dbname 資料庫名稱。
使用者名稱 使用者名稱。
authmethod 身分驗證方法。
持續時間 連線的持續時間,以微秒為單位。
sslversion Secure Sockets Layer (SSL) 版本。
sslcipher SSL 密碼。
mtu 最大傳輸單位 (MTU)。
sslcompression SSL 壓縮類型。
sslexpansion SSL 擴展類型。
iamauthguid 請求的 AWS Identity and Access Management (IAM) 身份驗證識別 AWS CloudTrail 碼。這是 GetClusterCredentialsAPI 呼叫的識別碼,用來建立用於指定連線的認證。
application_name 工作階段應用程式的初始名稱或已更新名稱。
os_version 連線到 Amazon Redshift 叢集之用戶端機器上的作業系統版本。
driver_version 從第三方 SQL 用戶端工具連線到 Amazon Redshift 叢集的 ODBC 或 JDBC 驅動器版本。
plugin_name 連接至您的 Amazon Redshift 叢集時使用的外掛程式名稱。
protocol_version Amazon Redshift 驅動程式在建立與伺服器的連線時使用的內部通訊協定版本。
sessionid 目前工作階段的全域唯一識別碼。
compression 用於連線的壓縮演算法。

使用者日誌

記錄資料庫使用者之下列變更的詳細資訊:

  • 建立使用者

  • 捨棄使用者

  • 更改使用者 (重新命名)

  • 更改使用者 (更改屬性)

資料欄名稱 描述
userid 受到變更影響之使用者的 ID。
使用者名稱 受到變更影響之使用者的使用者名稱。
oldusername 若為重新命名動作,這是原始使用者名稱。若是任何其他動作,此欄位空白。
動作 發生的動作。有效值:
  • Alter

  • 建立

  • Drop

  • 重新命名

usecreatedb 若為 true (1),表示使用者具備建立資料庫許可。
usesuper 若為 true (1),表示使用者是超級使用者。
usecatupd 若為 true (1),表示使用者可以更新系統目錄。
valuntil 密碼到期日。
pid 處理程序 ID。
xid 交易 ID。
recordtime 查詢開始的時間,以 UTC 表示。

查詢 SYS_USERLOG 系統檢視可尋找有關使用者變更的其他資訊。此檢視包含來自 Amazon Redshift Serverless 的日誌資料。

使用者活動日誌

在每個查詢於資料庫上執行之前先行記錄。

資料欄名稱 描述
recordtime 發生事件的時間。
db 資料庫名稱。
使用者 使用者名稱。
pid 與陳述式相關聯的處理程序 ID。
userid 使用者 ID。
xid 交易 ID。
query 日誌的字首:後面跟著查詢的文字,包括換行字元。

啟用記錄

根據預設,Amazon Redshift 不會開啟稽核記錄。當您在叢集上開啟日誌記錄功能時,Amazon Redshift 會將日誌匯出到 Amazon CloudWatch,或是建立日誌並將日誌上傳到 Amazon S3,從啟用稽核記錄到目前為止擷取資料。每個記錄更新都會接續先前的日誌。

向 Amazon S3 CloudWatch 或傳送到 Amazon S3 的稽核記錄是選擇性的程序。目標為系統資料表的記錄則非選用,而且會自動發生。如需目標為系統資料表之記錄的相關資訊,請參閱《Amazon Redshift 資料庫開發人員指南》中的系統資料表參考

連線日誌、使用者日誌和使用者活動日誌可透過使用 Amazon Redshift API 參考或 AWS Command Line Interface (AWS CLI) 一起啟用。 AWS Management Console對於使用者活動日誌,您也須啟用 enable_user_activity_logging 資料庫參數。如果您只啟用稽核記錄功能,但未啟用相關聯參數,則資料庫稽核日誌將只記錄連線日誌和使用者日誌的日誌資訊,但不記錄使用者活動日誌的日誌資訊。預設不會啟用 enable_user_activity_logging 參數 (false)。您可以將其設為 true 來啟用使用者活動日誌。如需詳細資訊,請參閱 Amazon Redshift 參數群組

將稽核日誌傳送到 Amazon CloudWatch

當您啟用記錄功能時 CloudWatch,Amazon Redshift 會將叢集連線、使用者和使用者活動日誌資料匯出到 Amazon CloudWatch 日誌群組。記錄檔資料在結構描述方面不會變更。 CloudWatch 專為監控應用程式而建置,您可以使用它來執行即時分析或將其設定為採取行動。您也可以使用 Amazon CloudWatch 日誌將日誌記錄存放在耐用儲存中。

建議 CloudWatch 使用檢視日誌檔案在 Amazon S3 中存放日誌檔案的替代方法。其不需要太多的組態設定,並可能適合您的監控要求,特別是如果您已經使用它來監控其他服務和應用程式的話。

Amazon 中的日誌群組和日誌事件 CloudWatch

選取要匯出的 Amazon Redshift 日誌後,您可以在 Amazon 日誌中監控 CloudWatch 日誌事件。系統會自動在下列字首下,為 Amazon Redshift Serverless 建立新的日誌群組,其中 log_type 代表日誌類型。

/aws/redshift/cluster/<cluster_name>/<log_type>

例如,如果您選擇匯出連線日誌,則日誌資料會儲存在下列日誌群組中。

/aws/redshift/cluster/cluster1/connectionlog

日誌事件會使用日誌串流匯出至日誌群組。若要在無伺服器端點的日誌事件中搜尋資訊,請使用 Amazon CloudWatch 日誌主控台 AWS CLI、或 Amazon CloudWatch 日誌 API。如需有關搜尋和篩選日誌資料的資訊,請參閱使用篩選條件從日誌事件建立指標

在中 CloudWatch,您可以使用提供精細度和彈性的查詢語法來搜尋記錄資料。如需詳細資訊,請參閱CloudWatch 記錄檔見解查詢語法

遷移至 Amazon CloudWatch 稽核記錄

在任何情況下,當您將日誌傳送到 Amazon S3 並變更組態 (例如要將日誌傳送到) 時 CloudWatch,保留在 Amazon S3 中的日誌都不會受到影響。您仍可在日誌資料所在的 Amazon S3 儲存貯體中查詢日誌資料。

在 Amazon S3 中管理日誌檔案

Amazon S3 中 Amazon Redshift 日誌檔案的數目和大小極度取決於叢集中的活動。如果您有作用中叢集,正在產生大量日誌,則 Amazon Redshift 可能更頻繁地產生日誌檔案。對於相同類型的活動,您可能具有一系列日誌檔案,例如在同一小時內具有多個連線日誌。

當 Amazon Redshift 使用 Amazon S3 來儲存日誌時,您在 Amazon S3 中使用的儲存會產生費用。在設定目標為 Amazon S3 的記錄之前,請計劃您需要儲存日誌檔案多長時間。這包括根據您的稽核需求,決定何時可刪除或封存日誌檔案。您建立的計劃極度取決於您儲存的資料類型,例如受制於合規或法規需求的資料。如需 Amazon S3 定價的相關資訊,請前往 Amazon Simple Storage Service (Amazon S3) 定價

啟用目標為 Amazon S3 的記錄時的限制

稽核記錄有下列限制:

  • 您只能使用 Amazon S3 受管金鑰 (SSE-S3) 加密 (AES-256)。

  • Amazon S3 儲存貯體必須關閉 S3 物件鎖定功能。

Amazon Redshift 稽核記錄的儲存貯體許可

當您開啟目標為 Amazon S3 的記錄功能時,Amazon Redshift 會收集記錄資訊,並將其上傳到儲存在 Amazon S3 的日誌檔案。您可以使用現有的儲存貯體,或建立新的儲存貯體。Amazon Redshift 需要儲存貯體的以下 IAM 許可:

  • s3:GetBucketAcl 服務對 Amazon S3 儲存貯體需有讀取許可,才能識別儲存貯體擁有者。

  • s3:PutObject 服務需有放置物件許可,才能上傳物件。此外,開啟記錄功能的使用者或 IAM 角色還必須具有 Amazon S3 儲存貯體的 s3:PutObject 許可。每次上傳日誌,服務就會判斷目前儲存貯體擁有者是否符合啟用記錄時的儲存貯體擁有者。如果這些擁有者不相符,您會收到錯誤。

當您啟用稽核記錄時,如果您選取建立新儲存貯體的選項,系統便會為其套用正確的許可。不過,如果您在 Amazon S3 建立自己的儲存貯體,或使用現有的儲存貯體,則請務必新增包含儲存貯體名稱的儲存貯體政策。日誌會使用服務主體憑證來傳送。對於大多數人來說 AWS 區域,您可以添加 Redshift 服務主要名稱,紅移。

儲存貯體政策會使用以下格式。ServiceName並且BucketName是您自己的價值觀的佔位符。此外,還要在儲存貯體政策中指定相關聯的動作和資源。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Put bucket policy needed for audit logging", "Effect": "Allow", "Principal": { "Service": "ServiceName" }, "Action": [ "s3:PutObject", "s3:GetBucketAcl" ], "Resource": [ "arn:aws:s3:::BucketName", "arn:aws:s3:::BucketName/*" ] } ] }

下列範例是美國東部 (維吉尼亞北部) 區域的儲存貯體政策,以及名為 AuditLogs 的儲存貯體。

{ "Version": "2008-10-17", "Statement": [ { "Sid": "Put bucket policy needed for audit logging", "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": [ "s3:PutObject", "s3:GetBucketAcl" ], "Resource": [ "arn:aws:s3:::AuditLogs", "arn:aws:s3:::AuditLogs/*" ] } ] }

預設未啟用的區域 (也稱為「選擇加入」區域) 需要區域特定的服務主體名稱。對於這些區域,服務主體名稱會包含 redshift.region.amazonaws.com 格式的區域。例如,對於亞太區域 (香港) 區域,名稱是 redshift.ap-east-1.amazonaws.com。如需預設未啟用的區域清單,請參閱《AWS 一般參考》中的管理 AWS 區域

注意

區域特定服務主體名稱會對應到叢集所在的區域。

日誌檔案的最佳實務

當 Redshift 將日誌檔案上傳到 Amazon S3 時,大型檔案可以分段上傳。如果分段上傳不成功,檔案的這些分段可能會留在 Amazon S3 儲存貯體中。這可能會導致額外的儲存成本,因此請務必了解分段上傳失敗時會發生什麼情況。如需有關稽核日誌分段上傳的詳細說明,請參閱使用分段上傳來上傳和複製物件中止分段上傳

如需建立 S3 儲存貯體和新增儲存貯體政策的相關資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的建立儲存貯體編輯儲存貯體許可

Amazon Redshift 稽核記錄的儲存貯體結構

依預設,Amazon Redshift 會使用下列儲存貯體和物件結構來組織 Amazon S3 儲存貯體中的日誌檔案:

AWSLogs/AccountID/ServiceName/Region/Year/Month/Day/AccountID_ServiceName_Region_ClusterName_LogType_Timestamp.gz

範例為:AWSLogs/123456789012/redshift/us-east-1/2013/10/29/123456789012_redshift_us-east-1_mycluster_userlog_2013-10-29T18:01.gz

如果您提供 Amazon S3 金鑰字首,請將字首置於金鑰開頭處。

例如,如果您指定 myprefix 的字首:myprefix/AWSLogs/123456789012/redshift/us-east-1/2013/10/29/123456789012_redshift_us-east-1_mycluster_userlog_2013-10-29T18:01.gz

Amazon S3 金鑰字首不能超過 512 個字元。它不能包含空格 ( )、雙引號 (“)、單引號 (‘)、反斜線 (\)。也有一些不允許的特殊字元和控制字元。這些字元的十六進位碼如下:

  • x00 到 x20

  • x22

  • x27

  • x5c

  • x7f 或更大

針對 Amazon S3 中的 Amazon Redshift 稽核記錄進行故障診斷

Amazon Redshift 稽核記錄可能會由於下列原因而中斷:

  • Amazon Redshift 沒有將日誌上傳至 Amazon S3 儲存貯體的許可。驗證儲存貯體是使用正確 IAM 政策設定的。如需詳細資訊,請參閱 Amazon Redshift 稽核記錄的儲存貯體許可

  • 儲存貯體擁有者已變更。當 Amazon Redshift 上傳日誌時,其會驗證儲存貯體擁有者是否與啟用記錄時的儲存貯體擁有者相同。如果儲存貯體擁有者已變更,則 Amazon Redshift 無法上傳日誌,直到您設定另一個用於稽核記錄的儲存貯體為止。

  • 找不到儲存貯體。如果在 Amazon S3 中刪除該儲存貯體,Amazon Redshift 便無法上傳日誌。您必須重建儲存貯體,或設定 Amazon Redshift 以將日誌上傳至不同的儲存貯體。

使用記錄 Amazon Redshift API 呼叫 AWS CloudTrail

Amazon Redshift 與這項服務整合在一起 AWS CloudTrail,該服務可提供使用者、角色或 AWS 服務在 Amazon Redshift 中所採取的動作記錄。 CloudTrail 以事件形式擷取 Amazon Redshift 的所有 API 呼叫。如需與 Amazon Redshift 整合的詳細資訊 AWS CloudTrail,請參閱使用 CloudTrail.

您可以在 Amazon Redshift 資料庫稽核記錄之外 CloudTrail 獨立使用,也可以在 Amazon Redshift 資料庫稽核

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