本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
資料庫稽核記錄日誌
Amazon Redshift 會記錄您資料庫中連線和使用者活動的相關資訊。這些日誌可協助您基於安全和故障診斷之目的監控資料庫,此程序稱為資料庫稽核。日誌可以儲存在:
-
Amazon S3 儲存貯體 — 這會讓負責監控資料庫中活動的使用者能夠存取資料安全功能。
-
Amazon CloudWatch — 您可以使用 CloudWatch 內建的功能 (例如視覺化功能和動作設定) 來檢視稽核記錄資料。
注意
SYS_CONNECTION_LOG 會收集 Amazon Redshift Serverless 的連線日誌資料。請注意,當您收集 Amazon Redshift Serverless 的稽核記錄資料時,並無法將資料傳送至日誌檔,只能傳送至 CloudWatch。
Amazon Redshift 日誌
Amazon Redshift 會將資訊記錄在下列日誌檔中:
-
連線日誌 — 記錄身分驗證嘗試、連線和中斷連線。
-
使用者日誌 — 記錄對資料庫使用者定義所做之變更的相關資訊。
-
使用者活動日誌 — 在每個查詢於資料庫上執行之前先行記錄。
連線和使用者日誌主要用於安全目的。您可以使用連線日誌,來監控正在連線至資料庫的使用者相關資訊,以及相關的連線資訊。此資訊可能是使用者的 IP 地址、使用者何時提出請求、使用者使用哪種類型的身分驗證等等。您可以利用使用者日誌,來監控對資料庫使用者之定義所做的變更。
使用者活動日誌主要用於故障診斷目的。它會追蹤使用者和系統在資料庫中執行之查詢類型的相關資訊。
連線日誌和使用者日誌對應至儲存在資料庫中系統資料表的資訊。您可以使用系統資料表來取得相同資訊,但是日誌檔提供更簡單的擷取和檢閱機制。日誌檔依賴 Amazon S3 許可而非資料庫許可,針對資料表執行查詢。此外,藉由檢視日誌檔中的資訊,而非查詢系統資料表,您可以減少與資料庫互動的任何影響。
注意
日誌檔不如系統日誌資料表 STL_USERLOG 和 STL_CONNECTION_LOG 一樣新。比最新記錄舊的記錄 (但不含最新記錄) 會複製到日誌檔。
注意
若為 Amazon Redshift Serverless,SYS_CONNECTION_LOG 會收集連線日誌資料。當您收集 Amazon Redshift Serverless 的稽核記錄資料時,並無法將資料傳送至日誌檔,只能傳送至 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 CloudTrail 請求的 AWS Identity and Access Management (IAM) 身分驗證 ID。這是用來建立指定連線所用憑證之 GetClusterCredentials API 呼叫的識別碼。 |
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 | 若為重新命名動作,這是原始使用者名稱。若是任何其他動作,此欄位空白。 |
動作 | 發生的動作。有效值:
|
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 CloudWatch
根據預設,Amazon Redshift 不會開啟稽核記錄。當您在叢集上開啟記錄時,Amazon Redshift 會將日誌匯出至 Amazon CloudWatch,或建立日誌並將其上傳至 Amazon S3,擷取從啟用稽核記錄起到目前為止的資料。每個記錄更新都會接續先前的日誌。
目標為 CloudWatch 或 Amazon S3 的稽核記錄是選擇性程序。目標為系統資料表的記錄則非選用,而且會自動發生。如需目標為系統資料表之記錄的相關資訊,請參閱《Amazon Redshift 資料庫開發人員指南》中的系統資料表參考。
使用 、Amazon Redshift API 參考或 AWS Command Line Interface () 一起啟用連線日誌 AWS Management Console、使用者日誌和使用者活動日誌AWS CLI。對於使用者活動日誌,您也須啟用 enable_user_activity_logging
資料庫參數。如果您只啟用稽核記錄功能,但未啟用相關聯參數,則資料庫稽核日誌將只記錄連線日誌和使用者日誌的日誌資訊,但不記錄使用者活動日誌的日誌資訊。預設不會啟用 enable_user_activity_logging
參數 (false
)。您可以將其設為 true
來啟用使用者活動日誌。如需詳細資訊,請參閱Amazon Redshift 參數群組。
當您啟用目標為 CloudWatch 的記錄時,Amazon Redshift 會將叢集連線、使用者和使用者活動日誌資料匯出到 Amazon CloudWatch Logs 日誌群組。日誌資料在結構描述方面不會變更。CloudWatch 專為監控應用程式而建置,您可以使用它來執行即時分析或為其進行設定以採取動作。您可以使用 Amazon CloudWatch Logs 將日誌記錄儲存在耐用的儲存體中。
若不要在 Amazon S3 中存放日誌檔,建議的替代方法是使用 CloudWatch 來檢視日誌。其不需要太多的組態設定,並可能適合您的監控要求,特別是如果您已經使用它來監控其他服務和應用程式的話。
Amazon CloudWatch 中的日誌群組和日誌事件
選取要匯出的 Amazon Redshift 日誌後,您就可以在 Amazon CloudWatch Logs 中監控日誌事件。系統會自動在下列字首下,為 Amazon Redshift Serverless 建立新的日誌群組,其中 log_type
代表日誌類型。
/aws/redshift/cluster/<cluster_name>/<log_type>
例如,如果您選擇匯出連線日誌,則日誌資料會儲存在下列日誌群組中。
/aws/redshift/cluster/cluster1/connectionlog
日誌事件會使用日誌串流匯出至日誌群組。若要在日誌事件內搜尋無伺服器端點的資訊,請使用 Amazon CloudWatch Logs 主控台、 AWS CLI或 Amazon CloudWatch Logs API。如需有關搜尋和篩選日誌資料的資訊,請參閱使用篩選條件從日誌事件建立指標。
在 CloudWatch 中,您可以使用能提供精細度和彈性的查詢語法來搜尋日誌資料。如需詳細資訊,請參閱 CloudWatch Logs Insights 查詢語法。
遷移到 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 service-principal 名稱,https://redshift.amazonaws.com
。
儲存貯體政策會使用以下格式。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.rproxy.goskope.comredshift.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 S3 儲存貯體的許可。驗證儲存貯體是使用正確 IAM 政策設定的。如需詳細資訊,請參閱Amazon Redshift 稽核記錄的儲存貯體許可。
-
儲存貯體擁有者已變更。當 Amazon Redshift 上傳日誌時,其會驗證儲存貯體擁有者是否與啟用記錄時的儲存貯體擁有者相同。如果儲存貯體擁有者已變更,則 Amazon Redshift 無法上傳日誌,直到您設定另一個用於稽核記錄的儲存貯體為止。
-
找不到儲存貯體。如果在 Amazon S3 中刪除該儲存貯體,Amazon Redshift 便無法上傳日誌。您必須重建儲存貯體,或設定 Amazon Redshift 以將日誌上傳至不同的儲存貯體。
使用 的 API 呼叫 AWS CloudTrail
Amazon Redshift 已與 整合 AWS CloudTrail,此服務提供 Amazon Redshift AWS 中使用者、角色或服務所採取動作的記錄。CloudTrail 會將 Amazon Redshift 的所有 API 呼叫擷取為事件。如需與 Amazon Redshift 整合的詳細資訊 AWS CloudTrail,請參閱使用 CloudTrail 記錄。
您可以獨立於或除了 Amazon Redshift 資料庫稽核記錄之外使用 CloudTrail。
若要進一步了解 CloudTrail,請參閱《AWS CloudTrail 使用者指南》https://docs.aws.amazon.com/awscloudtrail/latest/userguide/。