本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Amazon S3 伺服器存取日誌來識別請求
您可以使用 Amazon S3 伺服器存取日誌來識別 Amazon S3 請求。
注意
-
若要識別 Amazon S3 請求,建議您使用 AWS CloudTrail 資料事件,而不是 Amazon S3 伺服器存取日誌。CloudTrail 資料事件更容易設定且包含更多資訊。如需詳細資訊,請參閱使用 CloudTrail 來識別 Amazon S3 請求。
-
根據您取得的存取請求數量多寡而定,分析日誌需要的資源或時間可能比使用 CloudTrail 資料事件更多。
使用 Amazon Athena 查詢請求的存取日誌
您可以使用 Amazon Athena 搭配 Amazon S3 存取日誌來識別 Amazon S3 請求。
Amazon S3 會將伺服器存取日誌當作物件存放於 S3 儲存貯體中。使用可以在 Amazon S3 中分析日誌的工具通常比較容易。Athena 支援分析 S3 物件,還可用來查詢 Amazon S3 存取日誌。
範例
以下範例示範如何在 Amazon Athena 中查詢 Amazon S3 伺服器存取日誌。請將下列範例中使用的 取代為您自己的資訊。user input placeholders
注意
若要在 Athena 查詢中指定 Amazon S3 位置,您必須提供交付日誌所在的儲存貯體的 S3 URI。此 URI 必須包含下列格式的儲存貯體名稱和字首:s3:///amzn-s3-demo-bucket1-logs/prefix
前往 https://console.aws.amazon.com/athena/
開啟 Athena 主控台。 -
在查詢編輯器中,執行類似如下的命令。將
取代為您要為資料庫指定的名稱。s3_access_logs_dbCREATE DATABASEs3_access_logs_db注意
最佳實務是在與 S3 儲存貯體 AWS 區域 相同的 中建立資料庫。
-
在查詢編輯器中,執行類似如下的命令,在您於步驟 2 建立的資料庫中建立資料表結構描述。將
取代為您要為資料表指定的名稱。s3_access_logs_db.mybucket_logsSTRING及BIGINT資料類型值為存取日誌屬性。您可以在 Athena 中查詢這些屬性。在LOCATION的部分,輸入稍早記下的 S3 儲存貯體和字首路徑。 -
在導覽窗格的 Database (資料庫) 下,選擇您的資料庫。
-
在 Tables (表格) 底下,選擇資料表名稱旁的 Preview table (預覽資料表)。
在 Results (結果) 窗格中,應出現伺服器存取日誌的資料,例如
bucketowner、bucket、requestdatetime等。這表示您成功建立 Athena 資料表。您現在可以查詢 Amazon S3 伺服器存取日誌。
範例— 顯示刪除物件的人與時間 (時間戳記、IP 位址和 IAM 使用者)
SELECT requestdatetime, remoteip, requester, key FROMs3_access_logs_db.mybucket_logsWHERE key = 'images/picture.jpg' AND operation like '%DELETE%';
範例— 顯示 IAM 使用者執行的所有操作
SELECT * FROMs3_access_logs_db.mybucket_logsWHERE requester='arn:aws:iam::123456789123:user/user_name';
範例— 顯示特定期間內針對某物件執行的所有操作
SELECT * FROMs3_access_logs_db.mybucket_logsWHERE Key='prefix/images/picture.jpg' AND parse_datetime(requestdatetime,'dd/MMM/yyyy:HH:mm:ss Z') BETWEEN parse_datetime('2017-02-18:07:00:00','yyyy-MM-dd:HH:mm:ss') AND parse_datetime('2017-02-18:08:00:00','yyyy-MM-dd:HH:mm:ss');
範例— 顯示特定時段有多少資料已傳輸至特定 IP 位址
SELECT coalesce(SUM(bytessent), 0) AS bytessenttotal FROMs3_access_logs_db.mybucket_logsWHERE remoteip='192.0.2.1' AND parse_datetime(requestdatetime,'dd/MMM/yyyy:HH:mm:ss Z') BETWEEN parse_datetime('2022-06-01','yyyy-MM-dd') AND parse_datetime('2022-07-01','yyyy-MM-dd');
範例- 尋找特定期間內 HTTP 5xx 錯誤的請求 ID
SELECT requestdatetime, key, httpstatus, errorcode, requestid, hostid FROMs3_access_logs_db.mybucket_logsWHERE httpstatus like '5%' AND timestamp BETWEEN '2024/01/29' AND '2024/01/30'
識別簽章第 2 版請求
您可以使用伺服器存取日誌來識別 Signature 第 2 版請求。如需使用 Amazon Athena 查詢日誌的詳細資訊,請參閱 下的 Athena 查詢一節將日誌交付至 Amazon S3 一般用途儲存貯體。
識別物件存取請求
您可以使用伺服器存取日誌來識別物件存取模式。如需使用 Amazon Athena 查詢日誌的詳細資訊,請參閱 下的 Athena 查詢一節將日誌交付至 Amazon S3 一般用途儲存貯體。