在 Amazon Lightsail 中使用儲存貯體存取日誌來識別請求 - Amazon Lightsail

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

在 Amazon Lightsail 中使用儲存貯體存取日誌來識別請求

在本指南中,我們會為您介紹如何使用存取日誌來識別儲存貯體請求。如需詳細資訊,請參閱儲存貯體存取日誌

內容

使用 Amazon Athena 查詢請求的存取日誌

您可以使用 Amazon Athena 在存取日誌中查詢和識別對儲存貯體的請求。

Lightsail 會將存取日誌存放於 Lightsail 儲存貯體中做為物件。使用可以分析日誌的工具通常比較容易。Athena 支援分析物件,還可用來查詢存取日誌。

範例

以下範例示範如何在 Amazon Athena 中查詢儲存貯體伺服器存取日誌。

注意

若要在 Athena 查詢中指定儲存貯體的位置,您需要格式化日誌在其中以 S3 URI 傳送的目標儲存貯體名稱和目標字首,如下所示:s3://DOC-EXAMPLE-BUCKET1-logs/prefix/

  1. 前往 https://console.aws.amazon.com/athena/ 開啟 Athena 主控台。

  2. 查詢編輯器中,執行類似如下的命令。

    create database bucket_access_logs_db
    注意

    最佳實務是在相同 AWS 區域 內建立資料庫作為您的 S3 儲存貯體。

  3. 查詢編輯器中,執行類似如下的命令,在您於步驟 2 建立的資料庫中建立資料表結構描述。STRINGBIGINT 資料類型值為存取日誌屬性。您可以在 Athena 中查詢這些屬性。在 LOCATION 的部分,輸入稍早記下的儲存貯體和字首路徑。

    CREATE EXTERNAL TABLE `s3_access_logs_db.mybucket_logs`( `bucketowner` STRING, `bucket_name` STRING, `requestdatetime` STRING, `remoteip` STRING, `requester` STRING, `requestid` STRING, `operation` STRING, `key` STRING, `request_uri` STRING, `httpstatus` STRING, `errorcode` STRING, `bytessent` BIGINT, `objectsize` BIGINT, `totaltime` STRING, `turnaroundtime` STRING, `referrer` STRING, `useragent` STRING, `versionid` STRING, `hostid` STRING, `sigv` STRING, `ciphersuite` STRING, `authtype` STRING, `endpoint` STRING, `tlsversion` STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( 'input.regex'='([^ ]*) ([^ ]*) \\[(.*?)\\] ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) (\"[^\"]*\"|-) (-|[0-9]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) (\"[^\"]*\"|-) ([^ ]*)(?: ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*))?.*$') STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://doc-example-bucket1-logs/prefix/'
  4. 在導覽窗格的 Database (資料庫) 下,選擇您的資料庫。

  5. Tables (表格) 底下,選擇資料表名稱旁的 Preview table (預覽資料表)

    Results (結果) 窗格中,應出現伺服器存取日誌的資料,例如 bucketownerbucketrequestdatetime 等。這表示您成功建立 Athena 資料表。您現可查詢儲存貯體伺服器存取日誌。

範例 — 顯示刪除物件的人與時間 (時間戳記、IP 地址和 IAM 使用者)

SELECT RequestDateTime, RemoteIP, Requester, Key FROM s3_access_logs_db.mybucket_logs WHERE key = 'images/picture.jpg' AND operation like '%DELETE%';

範例 — 顯示 IAM 使用者執行的所有操作

SELECT * FROM s3_access_logs_db.mybucket_logs WHERE requester='arn:aws:iam::123456789123:user/user_name';

範例 — 顯示特定期間內針對某物件執行的所有操作

SELECT * FROM s3_access_logs_db.mybucket_logs WHERE 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 SUM(bytessent) AS uploadTotal, SUM(objectsize) AS downloadTotal, SUM(bytessent + objectsize) AS Total FROM s3_access_logs_db.mybucket_logs WHERE RemoteIP='1.2.3.4' AND parse_datetime(RequestDateTime,'dd/MMM/yyyy:HH:mm:ss Z') BETWEEN parse_datetime('2017-06-01','yyyy-MM-dd') AND parse_datetime('2017-07-01','yyyy-MM-dd');

使用 Amazon S3 存取日誌來識別物件存取請求

您可以在存取日誌上使用查詢以識別物件存取請求,包括 GETPUTDELETE 等操作,並探索有關這些請求的詳細資訊。

以下 Amazon Athena 查詢範例示範如何從伺服器存取日誌取得儲存貯體的所有 PUT 物件請求。

範例 — 顯示在特定期間內傳送 PUT 物件請求的所有請求者

SELECT Bucket, Requester, RemoteIP, Key, HTTPStatus, ErrorCode, RequestDateTime FROM s3_access_logs_db WHERE Operation='REST.PUT.OBJECT' AND parse_datetime(RequestDateTime,'dd/MMM/yyyy:HH:mm:ss Z') BETWEEN parse_datetime('2019-07-01:00:42:42','yyyy-MM-dd:HH:mm:ss') AND parse_datetime('2019-07-02:00:42:42','yyyy-MM-dd:HH:mm:ss')

以下 Amazon Athena 查詢範例示範如何從伺服器存取日誌取得 Amazon S3 的所有 GET 物件請求。

範例 — 顯示在特定期間內傳送 GET 物件請求的所有請求者

SELECT Bucket, Requester, RemoteIP, Key, HTTPStatus, ErrorCode, RequestDateTime FROM s3_access_logs_db WHERE Operation='REST.GET.OBJECT' AND parse_datetime(RequestDateTime,'dd/MMM/yyyy:HH:mm:ss Z') BETWEEN parse_datetime('2019-07-01:00:42:42','yyyy-MM-dd:HH:mm:ss') AND parse_datetime('2019-07-02:00:42:42','yyyy-MM-dd:HH:mm:ss')

以下 Amazon Athena 查詢範例示範如何從伺服器存取日誌取得 S3 儲存貯體的所有匿名請求。

範例 — 顯示在特定期間向儲存貯體提出請求的所有匿名請求者

SELECT Bucket, Requester, RemoteIP, Key, HTTPStatus, ErrorCode, RequestDateTime FROM s3_access_logs_db.mybucket_logs WHERE Requester IS NULL AND parse_datetime(RequestDateTime,'dd/MMM/yyyy:HH:mm:ss Z') BETWEEN parse_datetime('2019-07-01:00:42:42','yyyy-MM-dd:HH:mm:ss') AND parse_datetime('2019-07-02:00:42:42','yyyy-MM-dd:HH:mm:ss')
注意
  • 您可以修改日期範圍以符合您的需求。

  • 對安全監控時而言,這些查詢範例也可能相當實用。您可以檢閱來自意外或未授權 IP 地址/請求者的 PutObjectGetObject 呼叫的結果,以及識別對您儲存貯體的任何匿名請求。

  • 此查詢只會擷取啟用日誌之後的資訊。