‹ ハウツー に戻る

Amazon Lightsail でのバケットのアクセスログを使用するリクエストの識別

最終更新日: 2021 年 11 月 1 日

このガイドでは、アクセスログを使用したバケットへのリクエストの識別方法を説明します。詳細については、「 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

    注意

    ベストプラクティスとして、データベースは、S3 バケットと同じ AWS リージョンで作成することをお勧めします。

  3. クエリエディタで、次のようなコマンドを実行して、ステップ 2 で作成したデータベースでテーブルスキーマを作成します。STRING および BIGINT データ型の値はアクセスログのプロパティです。これらのプロパティは 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. ナビゲーションペインにある、[データベース] で、データベースを選択します。

  5. [テーブル] で、テーブル名の横にある、[Preview table (テーブルのプレビュー)] を選択します。

    [結果] ペインに、サーバーアクセスログのデータ (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 アドレス/リクエスタからの PutObject または GetObject コールの結果を確認し、バケットへの匿名リクエストを特定できます。

  • このクエリでは、ログ記録が有効になった時間以降の情報のみ取得されます。

Lightsail でのバケットとオブジェクトの管理

Lightsail オブジェクトストレージバケットを管理するための一般的なステップは次のとおりです。

  1. Amazon Lightsail オブジェクトストレージサービスのオブジェクトとバケットについて説明します。詳細については、「Amazon Lightsail のオブジェクトストレージ」を参照してください。

  2. Amazon Lightsail でバケットに付けることができる名前について説明します。詳細については、「Amazon Lightsail のバケットの命名規則」を参照してください。

  3. バケットを作成することにより、Lightsail オブジェクトストレージサービスの使用を開始します。詳細については、「Amazon Lightsail でのバケットの作成」を参照してください。

  4. バケットのセキュリティに関するベストプラクティスと、バケットに対して設定できるアクセス許可について説明します。バケットのすべてのオブジェクトをパブリックまたはプライベートにすることも、個別のオブジェクトをパブリックにすることもできます。また、アクセスキーを作成し、バケットにインスタンスをアタッチし、他の AWS アカウントへのアクセスを許可して、バケットへのアクセスを許可することもできます。詳細については、「Amazon Lightsail オブジェクトストレージのセキュリティのベストプラクティス」と「Amazon Lightsail のバケットアクセス許可について」を参照してください。

    バケットのアクセス許可について学習したら、次のガイドを参照してバケットへのアクセスを許可します。

  5. バケットのアクセスログ記録を有効にする方法と、アクセスログを使用してバケットのセキュリティを監査する方法について説明します。詳細については、以下のガイドを参照してください。

  6. Lightsail のバケットの管理をユーザーに許可する IAM ポリシーを作成します。詳細については、「Amazon Lightsail のバケットを管理する IAM ポリシー」を参照してください。

  7. バケットのオブジェクトのラベル付けと識別方法について説明します。詳細については、「Amazon Lightsail のオブジェクトのキー名について」を参照してください。

  8. バケットでファイルをアップロードする方法と、オブジェクトを管理する方法について説明します。詳細については、以下のガイドを参照してください。

  9. オブジェクトのバージョニングを有効にして、バケットに保存されたあらゆるオブジェクトのあらゆるバージョンを保存、取得、復元することができます。詳細については、「Amazon Lightsail のバケットでのオブジェクトのバージョニングの有効化と一時停止」を参照してください。

  10. オブジェクトのバージョニングを有効にすると、バケットのオブジェクトの以前のバージョンを復元できるようになります。詳細については、「Amazon Lightsail のバケットのオブジェクトの以前のバージョンの復元」を参照してください。

  11. バケットの使用率をモニタリングします。詳細については、「Amazon Lightsail のバケットのメトリクスの表示」を参照してください。

  12. バケットの使用率がしきい値を超えたときにバケットメトリクスが通知されるようにアラームを設定します。詳細については、「Amazon Lightsail のバケットメトリクスアラームの作成」を参照してください。

  13. ストレージおよびネットワーク転送で不足している場合は、バケットのストレージプランを変更します。詳細については、「Amazon Lightsail のバケットのプランを変更する」を参照してください。

  14. バケットを他のリソースに接続する方法について説明します。詳細については、以下のチュートリアルを参照してください。

  15. バケットを使用しなくなった場合は、バケットを削除します。詳細については、「Amazon Lightsail のバケットの削除」を参照してください。