

# サーバーアクセスログによるリクエストのログ記録
<a name="ServerLogs"></a>

サーバーアクセスのログには、バケットに対するリクエストの詳細が記録されます。サーバーアクセスのログは、多くのアプリケーションに役立ちます。例えば、アクセスのログ情報は、セキュリティやアクセスの監査に役立ちます。この情報は、顧客基盤の把握や Amazon S3 の請求の理解にもつながります。

**注記**  
サーバーアクセスログには、2019 年 3 月 20 日以降に開設されたリージョンで発生するリージョン違いによるリダイレクトエラーに関する情報は記録されません。リージョン違いによるリダイレクトエラーは、オブジェクトまたはバケットに対するリクエストがそのバケットがあるリージョン以外で行われた場合に発生します。

## ログ配信を有効にするにはどうすればよいですか?
<a name="server-access-logging-overview"></a>

ログ配信を有効にするには、次の基本的な手順を実行します。詳細については、「[Amazon S3 サーバーアクセスログを有効にします。](enable-server-access-logging.md)」を参照してください。

1. **送信先バケット (別名ターゲットバケット) の名前を指定**します。**このバケットは、Amazon S3 がアクセスログをオブジェクトとして保存する場所です。ソースと送信先バケットの両方が同じ AWS リージョン にあり、同じアカウントが所有している必要があります。送信先バケットには S3 オブジェクトロックのデフォルト保持期間設定を指定できません。また、送信先バケットでは [リクエスタ支払い] を有効にできません。

   ログの保存先のバケットとして、ソースバケットと同じリージョンにあるユーザー所有のバケットを指定できます。これにはソースバケット自体も含まれます。ただし、ログを管理しやすくするため、アクセスログは別のバケットに保存することをお勧めします。

   ソースバケットと送信先バケットが同じである場合、バケットに書き込まれるログに関する追加のログが作成されます。ストレージの請求額がいくらか増える可能性があるため、この方法はお勧めしていません。また、ログに関する追加のログのために、必要なログを見つけにくくなります。

   アクセス ログをソースバケットに保存する場合は、すべてのログオブジェクトキーに対して送信先プレフィックス (別名**ターゲットプレフィックス) を指定することをお勧めします。プレフィックスを指定すると、すべてのログオブジェクト名が共通の文字列で始まるため、ログオブジェクトを識別しやすくなります。

1. **(オプション) Amazon S3 のすべてのログオブジェクトのキーにプレフィックスを割り当てます。**送信先プレフィクス (**別名ターゲットプレフィックス) を使用すると、ログオブジェクトを識別しやすくなります。例えば、プレフィックスの値として `logs/` を指定すると、Amazon S3 で作成する各ログオブジェクトのキーの先頭に `logs/` というプレフィックスが付けられます。

   ```
   logs/2013-11-01-21-32-16-E568B2907131C0C0
   ```

   プレフィックス値 `logs` を指定すると、ログオブジェクトは次のように表示されます。

   ```
   logs2013-11-01-21-32-16-E568B2907131C0C0
   ```

   [プレフィックス](https://docs.aws.amazon.com/general/latest/gr/glos-chap.html#keyprefix) は、複数のバケットログが同じ送信先バケットにログを記録する場合にもソースバケットの識別に役立ちます。

   キープレフィックスは、ログを削除する際にも役に立ちます。例えば、特定のキープレフィックスを使用して、Amazon S3 のライフサイクル設定ルールを指定することができます。詳細については、「[Amazon S3 ログファイルの削除](deleting-log-files-lifecycle.md)」を参照してください。

1. **(オプション) 生成されたログをその他のユーザーが利用するために、アクセス許可を設定します。****デフォルトでは、バケット所有者のみにログオブジェクトへのフルアクセスが許可されます。(サーバーアクセスログが保存されている) 送信先バケットが S3 オブジェクト所有権のバケット所有者強制設定を使用してアクセスコントロールリスト (ACL) を無効化する場合、ACL を使用する**送信先権限のアクセス許可を付与することはできません。ただし、送信先バケットのバケットポリシーを更新して、その他のユーザーにアクセスを付与することはできます。詳細については、「[Amazon S3 用 Identity and Access Management](security-iam.md)」および「[ログ配信許可](enable-server-access-logging.md#grant-log-delivery-permissions-general)」を参照してください。

1. **(オプション) ログファイルのログオブジェクトキー形式を設定します。**ログオブジェクトキーの形式 (**別名ターゲットオブジェクトキー形式) には 2 つのオプションがあります。
   + **日付ベース以外のパーティション分割** – これはオリジナルのログオブジェクトキーの形式です。この形式を選択すると、ログファイルのキー形式は次のとおりになります。

     ```
     [DestinationPrefix][YYYY]-[MM]-[DD]-[hh]-[mm]-[ss]-[UniqueString]
     ```

     例えば、`logs/` をプレフィックスとして指定すると、ログオブジェクトには次のような名前が付けられます。

     ```
     logs/2013-11-01-21-32-16-E568B2907131C0C0
     ```
   + **日付ベースのパーティション分割** – 日付ベースのパーティショニングを選択した場合、ログ形式で使用される日付ソースとして、ログファイルのイベント時間または配信時間を選択できます。この形式を使用すると、ログのクエリが簡単になります。

     日付ベースのパーティション分割を選択すると、ログファイルのキー形式は次のとおりになります。

     ```
     [DestinationPrefix][SourceAccountId]/[SourceRegion]/[SourceBucket]/[YYYY]/[MM]/[DD]/[YYYY]-[MM]-[DD]-[hh]-[mm]-[ss]-[UniqueString]
     ```

     例えば、`logs/` をターゲットプレフィックスとして指定すると、ログオブジェクトには次のような名前が付けられます。

     ```
     logs/123456789012/us-west-2/amzn-s3-demo-source-bucket/2023/03/01/2023-03-01-21-32-16-E568B2907131C0C0
     ```

     配信時間配信の場合、ログファイル名の時刻はログファイルの配信時間に対応します。

     イベント時間配信の場合、年、月、日はイベントが発生した日に対応し、時、分、秒はキーで `00` に設定されます。このようなログファイルに配信されるログは、特定の日のみを対象とします。

   

   AWS Command Line Interface (AWS CLI)、AWS SDK、または Amazon S3 REST API を使用してログを設定する場合は、`TargetObjectKeyFormat` を使用してログオブジェクトのキー形式を指定します。日付ベース以外のパーティション分割を指定するには、`SimplePrefix` を使用します。日付ベースのパーティション分割を指定するには、`PartitionedPrefix` を使用します。`PartitionedPrefix` を使用する場合は、`PartitionDateSource` で `EventTime` または `DeliveryTime` を指定します。

   `SimplePrefix` の場合、ログファイルキー形式は、次のとおりです。

   ```
   [TargetPrefix][YYYY]-[MM]-[DD]-[hh]-[mm]-[ss]-[UniqueString]
   ```

   イベント時刻または配信時刻の `PartitionedPrefix` の場合、ログファイルのキー形式は次のとおりになります。

   ```
   [TargetPrefix][SourceAccountId]/[SourceRegion]/[SourceBucket]/[YYYY]/[MM]/[DD]/[YYYY]-[MM]-[DD]-[hh]-[mm]-[ss]-[UniqueString]
   ```

## ログオブジェクトのキーフォーマット
<a name="server-log-keyname-format"></a>

Amazon S3 では、送信先バケットにログオブジェクトをアップロードする際に、次のオブジェクトキー形式を使用します。
+ **日付ベース以外のパーティション分割** – これはオリジナルのログオブジェクトキーの形式です。この形式を選択すると、ログファイルのキー形式は次のとおりになります。

  ```
  [DestinationPrefix][YYYY]-[MM]-[DD]-[hh]-[mm]-[ss]-[UniqueString]
  ```
+ **日付ベースのパーティション分割** – 日付ベースのパーティショニングを選択した場合、ログ形式で使用される日付ソースとして、ログファイルのイベント時間または配信時間を選択できます。この形式を使用すると、ログのクエリが簡単になります。

  日付ベースのパーティション分割を選択すると、ログファイルのキー形式は次のとおりになります。

  ```
  [DestinationPrefix][SourceAccountId]/[SourceRegion]/[SourceBucket]/[YYYY]/[MM]/[DD]/[YYYY]-[MM]-[DD]-[hh]-[mm]-[ss]-[UniqueString]
  ```

ログオブジェクトキーでは、`YYYY`、`MM`、`DD`、`hh`、`mm`、`ss` は、ログファイルを配信した年、月、日、時、分、秒をそれぞれ表す数字になります。これらの日付と時刻は協定世界時 (UTC) です。

ある時点で配信されたログファイルには、その時点より前に書き込まれたレコードが含まれます。特定の期間のすべてのログレコードが配信されたかどうかを知る方法はありません。

キーの `UniqueString` コンポーネントは、ファイルの上書きを防止するためのものです。意味はないため、ログ処理ソフトウェアでは無視されます。

## ログを配信する方法
<a name="how-logs-delivered"></a>

Amazon S3 は定期的にアクセスログレコードを収集し、レコードをまとめてログファイルを作成し、そのログファイルを、ログオブジェクトとして送信先バケットにアップロードします。複数のソースバケットでログ記録の配信先が同じ送信先バケットである場合、これらのすべてのソースバケットのアクセスログが送信先バケットに配信されます。ただし、各ログオブジェクトは、ソースバケット別にアクセスログレコードをレポートします。

Amazon S3 は特別なログ配信アカウントを使用してサーバーアクセスログを書き込みます。このような書き込みは、通常のアクセスコントロールの制約に従います。送信先バケットのバケットポリシーを更新して、アクセスログ配信用のログ記録サービスプリンシパル (`logging.s3.amazonaws.com`) へのアクセス権を付与することをお勧めします。バケットのアクセスコントロールリスト (ACL) を介して S3 ログ配信グループにアクセスログ配信のためのアクセスを付与することもできます。ただし、バケット ACL を使用して S3 ログ配信グループへのアクセスを許可することはお勧めしません。

サーバーアクセスのログ記録を有効にして、バケットポリシーを通じてアクセスログ配信のアクセスを許可する場合は、送信先バケットのバケットポリシーを更新して、`s3:PutObject` にログ記録サービスプリンシパルのアクセスを許可します。Amazon S3 コンソールを使用してサーバーアクセスのログ記録を有効にすると、コンソールは、送信先バケットのバケットポリシーを自動的に更新して、ログ記録サービスのプリンシパルにこれらの許可を付与します。サーバーアクセスのログ配信許可の付与の詳細については、[ログ配信許可](enable-server-access-logging.md#grant-log-delivery-permissions-general) を参照してください。

**注記**  
S3 は、VPC エンドポイントポリシーで拒否されている場合、または VPC ポリシーが評価される前にリクエストが失敗した場合、VPC エンドポイントリクエストの CloudTrail ログまたはサーバーアクセスログのリクエスタまたはバケット所有者への配信をサポートしません。

**S3 オブジェクト所有権のバケット所有者強制設定**  
送信先バケットが、オブジェクト所有権のバケット所有者強制設定を使用している場合、ACL は無効になり、アクセス許可への影響はなくなります。送信先バケットのバケットポリシーを更新して、アクセスログ配信用のログ記録サービスプリンシパルへのアクセス権を付与する必要があります。オブジェクトの所有権の詳細については、「[サーバーアクセスのログ記録用の S3 ログ配信グループへのアクセスを付与する](object-ownership-migrating-acls-prerequisites.md#object-ownership-server-access-logs)」を参照してください。

## ベストエフォート型のサーバーログ配信
<a name="LogDeliveryBestEffort"></a>

サーバーアクセスログレコードの配信は、ベストエフォートベースで行われます。ログ記録用に適切にバケットを設定した場合、そのバケットへのほとんどのリクエストについてログレコードが配信されます。ほとんどのログレコードは、記録された時間から数時間以内に配信されますが、配信間隔は短くなる場合もあります。

サーバーログの完全性や適時性は保証されません。リクエストのログレコードが、リクエストが実際に処理されてからかなり後に配信されたり、*配信すらされないこともあり得ます*。ログレコードが重複している場合さえあります。サーバーログの目的は、バケットに対するトラフィックの特性を理解することです。ログレコードが損失したり、ログレコードが重複したりすることはまれであるとはいえ、すべてのリクエストが完全に報告されるとは限りません。

サーバーログ作成機能はベストエフォート型であるため、使用状況レポートには、サーバーログに記録されていないアクセスリクエストが含まれる場合があります。このような使用状況レポートは、AWS Billing and Cost Management コンソールの **[Cost & usage reports]** で確認できます。

## バケットのログ記録ステータスの変更が有効になるまでには時間がかかる
<a name="BucketLoggingStatusChanges"></a>

バケットのログ記録ステータスの変更がログファイルの配信に反映されるまでには時間がかかります。例えば、バケットのログを有効にする場合、その後数時間に行われるリクエストは記録される場合もあれば、されない場合もあります。ログ記録の送信先バケットをバケット A からバケット B に変更すると、その後 1 時間は一部のログがバケット A に引き続き配信されたり、新しいターゲットバケット B に配信されたりします。いずれにしても、最終的に新しい設定が有効になるため、ユーザー側の操作は一切必要ありません。

ログ記録とログファイルの詳細については、次のセクションを参照してください。

**Topics**
+ [

## ログ配信を有効にするにはどうすればよいですか?
](#server-access-logging-overview)
+ [

## ログオブジェクトのキーフォーマット
](#server-log-keyname-format)
+ [

## ログを配信する方法
](#how-logs-delivered)
+ [

## ベストエフォート型のサーバーログ配信
](#LogDeliveryBestEffort)
+ [

## バケットのログ記録ステータスの変更が有効になるまでには時間がかかる
](#BucketLoggingStatusChanges)
+ [

# Amazon S3 サーバーアクセスログを有効にします。
](enable-server-access-logging.md)
+ [

# Amazon S3 サーバーアクセスログの形式
](LogFormat.md)
+ [

# Amazon S3 ログファイルの削除
](deleting-log-files-lifecycle.md)
+ [

# Amazon S3 アクセスログを使用したリクエストの識別
](using-s3-access-logs-to-identify-requests.md)
+ [

# サーバーのアクセスログ記録のトラブルシューティング
](troubleshooting-server-access-logging.md)

# Amazon S3 サーバーアクセスログを有効にします。
<a name="enable-server-access-logging"></a>

サーバーアクセスのログには、Amazon S3 バケットに対するリクエストの詳細が記録されます。サーバーアクセスのログは、多くのアプリケーションに役立ちます。例えば、アクセスのログ情報は、セキュリティやアクセスの監査に役立ちます。この情報は、顧客基盤の把握や Amazon S3 の請求の理解にもつながります。

デフォルトでは、Amazon S3 によってサーバーアクセスログは収集されません。ログ記録を有効にすると、Amazon S3 は、ソースバケットのアクセスログを選択された送信先バケット(**ターゲットバケット) に配信します。ソースと送信先バケットの両方が同じ AWS リージョン にあり、同じ AWS アカウント が所有している必要があります。

アクセスログのレコードには、バケットに対するリクエストの詳細が取り込まれます。この情報には、リクエストタイプ、リクエストで指定したリソース、リクエストを処理した日時などが含まれます。ログ記録の基本の詳細については、[サーバーアクセスログによるリクエストのログ記録](ServerLogs.md) を参照してください。

**重要**  
Amazon S3 バケットに対してサーバーアクセスログ記録を有効にしても追加料金はかかりません。ただし、システムが配信するいずれのログファイルの格納に対しても通常の料金がかかります (ログはいつでも削除できます)。ログファイルの配信にデータ転送料金はかかりません。ただし、ログファイルへのアクセスには通常のデータ転送料金がかかります。
送信先バケットでサーバーアクセスのログ記録が有効になっているべきではありません。ログの保存先のバケットとして、ソースバケットと同じリージョンにあるユーザー所有のバケットを指定できます。これにはソースバケット自体も含まれます。ただし、ソースバケットにログを配信すると、ログの無限ループが発生するため、お勧めしません。ログを管理しやすくするため、アクセスログは別のバケットに保存することをお勧めします。詳細については、[ログ配信を有効にするにはどうすればよいですか?](ServerLogs.md#server-access-logging-overview)を参照してください。
S3 オブジェクトロックが有効になっている S3 バケットは、サーバーアクセスログの送信先バケットとして使用できません。送信先バケットにはデフォルト保持期間設定を指定できません。
送信先バケットでは [リクエスタ支払い] を有効にすることはできません。

サーバーアクセスのログ記録は、Amazon S3 コンソール、Amazon S3 API、AWS Command Line Interface (AWS CLI)、または AWS SDK を使用して有効または無効にできます。

## ログ配信許可
<a name="grant-log-delivery-permissions-general"></a>

Amazon S3 は特別なログ配信アカウントを使用してサーバーアクセスログを書き込みます。このような書き込みは、通常のアクセスコントロールの制約に従います。アクセスログを配信するには、ロギングサービスプリンシパル (`logging.s3.amazonaws.com`) に送信先バケットへのアクセス権を付与する必要があります。

Amazon S3 にログ配信アクセス許可を付与するには、送信先バケットの S3 オブジェクト所有権の設定に応じて、バケットポリシーまたはバケットアクセスコントロールリスト (ACL) を使用できます。ただし、ACL の代わりにバケットポリシーを使用することをお勧めします。

**S3 オブジェクト所有権のバケット所有者強制設定**  
送信先バケットが、オブジェクト所有権のバケット所有者強制設定を使用している場合、ACL は無効になり、アクセス許可への影響はなくなります。この場合は、送信先バケットのバケットポリシーを更新して、アクセスログ配信用のログ記録サービスプリンシパルへのアクセス権を付与する必要があります。S3 ログ配信グループへのアクセスを許可すると、バケット ACL を更新できません。また、送信先権限 (**別名ターゲット権限) [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLogging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLogging.html) を設定に含めることもできません。

アクセスログ配信用の既存のバケット ACL をバケットポリシーに移行する方法については、「[サーバーアクセスのログ記録用の S3 ログ配信グループへのアクセスを付与する](object-ownership-migrating-acls-prerequisites.md#object-ownership-server-access-logs)」を参照してください。オブジェクトの所有権の詳細については、「[オブジェクトの所有権の制御とバケットの ACL の無効化。](about-object-ownership.md)」を参照してください。新しいバケットを作成するとき、ACL はデフォルトでは無効になっています。

**バケットポリシーを使用したアクセスの付与**  
送信先バケットでバケットポリシーを使用してアクセスを許可するには、バケットポリシーを更新して、ログ記録サービスプリンシパルに `s3:PutObject` アクセス許可を付与します。Amazon S3 コンソールを使用してサーバーアクセスのログ記録を有効にすると、コンソールは、送信先バケットのバケットポリシーを自動的に更新して、ログ記録サービスプリンシパルにこのようなアクセス許可を付与します。プログラムでサーバーアクセスのログ記録を有効にする場合、送信先バケットのバケットポリシーを手動で更新して、アクセスログ配信用のログ記録サービスプリンシパルへのアクセス権を付与する必要があります。

ログ記録サービスプリンシパルのリソースへのアクセスを制限するバケットポリシーの例については、「[バケットポリシーを使用して、ロギングサービスプリンシパルに許可を付与](#grant-log-delivery-permissions-bucket-policy)」を参照してください。

**バケット ACL を使用したアクセスの付与**  
代わりに、バケット ACL を使用して、アクセスログ配信のアクセスを許可できます。S3 ログ配信グループに `WRITE` と `READ_ACP` の許可を付与する許可エントリーをバケット ACL に追加します。ただし、バケット ACL を使用して S3 ログ配信グループへのアクセスを許可することはお勧めしません。詳細については、「[オブジェクトの所有権の制御とバケットの ACL の無効化。](about-object-ownership.md)」を参照してください。アクセスログ配信用の既存のバケット ACL をバケットポリシーに移行する方法については、「[サーバーアクセスのログ記録用の S3 ログ配信グループへのアクセスを付与する](object-ownership-migrating-acls-prerequisites.md#object-ownership-server-access-logs)」を参照してください。ログ記録サービスプリンシパルのリソースへのアクセスを制限する ACL の例については、「[バケット ACL を使用して、ログ配信グループにアクセス許可を付与します。](#grant-log-delivery-permissions-acl)」を参照してください。

### バケットポリシーを使用して、ロギングサービスプリンシパルに許可を付与
<a name="grant-log-delivery-permissions-bucket-policy"></a>

このバケットポリシーの例は、`s3:PutObject` アクセス許可をログ記録サービスプリンシパル (`logging.s3.amazonaws.com`) に付与します。このバケットポリシーを実行するには、`user input placeholders` をユーザー自身の情報に置き換えます。次のポリシーでは、`amzn-s3-demo-destination-bucket` はサーバーアクセスログが配信される送信先バケットで、`amzn-s3-demo-source-bucket` は送信元バケットです。`EXAMPLE-LOGGING-PREFIX` は、ログオブジェクトに使用するオプションの送信先のプレフィックス (別称 *ターゲットプレフィックス*) です。`SOURCE-ACCOUNT-ID` は、ソースバケットを所有する AWS アカウントです。

**注記**  
バケットポリシーに `Deny` ステートメントがある場合は、それらが Amazon S3 からのアクセスログの配信を防止していないことを確認します。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "S3ServerAccessLogsPolicy",
            "Effect": "Allow",
            "Principal": {
                "Service": "logging.s3.amazonaws.com"
            },
            "Action": [
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket/EXAMPLE-LOGGING-PREFIX*",
            "Condition": {
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:s3:::amzn-s3-demo-source-bucket"
                },
                "StringEquals": {
                    "aws:SourceAccount": "SOURCE-ACCOUNT-ID"
                }
            }
        }
    ]
}
```

------

### バケット ACL を使用して、ログ配信グループにアクセス許可を付与します。
<a name="grant-log-delivery-permissions-acl"></a>

**注記**  
セキュリティ上のベストプラクティスとして、Amazon S3 はすべての新しいバケットのアクセスコントロールリスト (ACL) をデフォルトで無効にします。Amazon S3 コンソールでの ACL アクセス権限の詳細については、「[ACL の設定](managing-acls.md)」を参照してください。

バケット ACL を使用してログ配信グループに許可を付与することはできますが、この方法はお勧めしません。ただし、送信先バケットが、オブジェクト所有権のバケット所有者強制設定を使用している場合、バケット ACL や オブジェクト ACL を設定することはできません。また、送信先権限 (**別名ターゲット権限) [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLogging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLogging.html) を設定に含めることもできません。代わりに、ロギングサービスプリンシパル (`logging.s3.amazonaws.com`) にアクセス許可を付与するために、バケットポリシーを使用する必要があります。詳細については、「[ログ配信許可](#grant-log-delivery-permissions-general)」を参照してください。

バケット ACL では、ログ配信グループは次の URL で示されます。

```
1. http://acs.amazonaws.com/groups/s3/LogDelivery
```

`WRITE` と `READ_ACP` (ACL 読み取り) アクセス許可を付与するには、送信先バケット ACL に次の権限を追加します。

```
 1. <Grant>
 2.     <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:type="Group">
 3.         <URI>http://acs.amazonaws.com/groups/s3/LogDelivery</URI> 
 4.     </Grantee>
 5.     <Permission>WRITE</Permission>
 6. </Grant>
 7. <Grant>
 8.     <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:type="Group">
 9.         <URI>http://acs.amazonaws.com/groups/s3/LogDelivery</URI> 
10.     </Grantee>
11.     <Permission>READ_ACP</Permission>
12. </Grant>
```

プログラムを使用して ACL アクセス権限を追加する例については、[ACL の設定](managing-acls.md) を参照してください。

**重要**  
バケットで AWS CloudFormation 使用して Amazon S3 サーバーアクセスロギングを有効にし、ACL を使用して S3 ログ配信グループへのアクセスを許可する場合は、CloudFormation テンプレートにも「`AccessControl": "LogDeliveryWrite"`」を追加する必要があります。このようなアクセス許可はバケット ACL を作成することによってのみ付与できます。CloudFormation ではバケットのカスタム ACL を作成できないため、これを実行することは重要です。CloudFormation で使用できるのは既定 ACL のみです。

## サーバーアクセスのログ記録を有効にします
<a name="enable-server-logging"></a>

Amazon S3 コンソール、Amazon S3 REST API、AWS SDK、AWS CLI を使用してサーバーアクセスのログ記録を有効にするには、次の手順を実行します。

### S3 コンソールの使用
<a name="server-access-logging"></a>

1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール ([https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)) を開きます。

1. 左のナビゲーションペインで、**[汎用バケット]** を選択します。

1. バケットリストで、サーバーアクセスログを有効にするバケットの名前を選択します。

1. [**プロパティ**] を選択します。

1. [**サーバーアクセスのログ記録**] で、[**編集**] を選択します。

1. **[Server access logging]** (サーバーアクセスのログ記録) で**[Enable]** (有効) を選択します。

1. **[送信先バケット]** の下で、バケットとオプションのプレフィックスを指定します。プレフィックスを指定する場合は、ログを検出しやすくするために、プレフィックスの後にスラッシュ (`/`) を付けることをお勧めします。
**注記**  
スラッシュ (`/`) を使用したプレフィックスを指定すると、ログオブジェクトが見つけやすくなります。例えば、プレフィックスの値として `logs/` を指定すると、次のとおり Amazon S3 で作成する各ログオブジェクトのキーの先頭に `logs/` というプレフィックスが付けられます。  

   ```
   logs/2013-11-01-21-32-16-E568B2907131C0C0
   ```
プレフィックス値 `logs` を指定すると、ログオブジェクトは次のように表示されます。  

   ```
   logs2013-11-01-21-32-16-E568B2907131C0C0
   ```

1. **[ログオブジェクトキーの形式]** の下で、次を設定します。
   + 日付ベース以外のパーティション分割を選択するには、**[DestinationPrefix][YYYY]-[MM]-[DD]-[hh]-[mm]-[ss]-[UniqueString]** を選択します。
   + 日付ベースでパーティション分割するには、**[DestinationPrefix][SourceAccountId]/[SourceRegion]/[SourceBucket]/[YYYY]/[MM]/[DD]/[YYYY]-[MM]-[DD]-[hh]-[mm]-[ss]-[UniqueString]** を選択してから、**[S3 イベント時刻]** または **[ログファイルの配信時刻]** を選択します。

1. **[Save changes]** (変更の保存) をクリックします。

   バケットでサーバーアクセスのログ記録を有効にすると、コンソールはソースバケットでのログ記録を有効にして、送信先バケットのバケットポリシーを更新し、ログ記録サービスプリンシパル (`logging.s3.amazonaws.com`) に `s3:PutObject` アクセス許可を付与します。バケットポリシーの詳細については、[バケットポリシーを使用して、ロギングサービスプリンシパルに許可を付与](#grant-log-delivery-permissions-bucket-policy) を参照してください。

   ログは 送信先バケットで確認できます。サーバーアクセスのログ記録を有効にすると、ログがターゲットバケットに配信されるまでに数時間かかることがあります。ログ配信の方法と間隔の詳細については、[ログを配信する方法](ServerLogs.md#how-logs-delivered) を参照してください。

詳細については、「[S3 汎用バケットのプロパティの表示](view-bucket-properties.md)」を参照してください。

### REST API の使用
<a name="enable-logging-rest"></a>

ログ記録を有効にするには、[https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTlogging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTlogging.html) リクエストを送信してソースバケットにログ記録の設定を追加します。リクエストでは、送信先バケット (別名 **ターゲットバケット) を指定し、必要に応じて、すべてのログオブジェクトキーに使用するプレフィックスを指定します。

送信先バケットとして `amzn-s3-demo-destination-bucket` を、プレフィックスとして *`logs/`* を指定する例は次のとおりです。

```
1. <BucketLoggingStatus xmlns="http://doc.s3.amazonaws.com/2006-03-01">
2.   <LoggingEnabled>
3.     <TargetBucket>amzn-s3-demo-destination-bucket</TargetBucket>
4.     <TargetPrefix>logs/</TargetPrefix>
5.   </LoggingEnabled>
6. </BucketLoggingStatus>
```

送信先バケットとして `amzn-s3-demo-destination-bucket` を、プレフィックスとして *`logs/`* を、ログオブジェクトキーの形式として `EventTime` を指定する例は次のとおりです。

```
 1. <BucketLoggingStatus xmlns="http://doc.s3.amazonaws.com/2006-03-01">
 2.   <LoggingEnabled>
 3.     <TargetBucket>amzn-s3-demo-destination-bucket</TargetBucket>
 4.     <TargetPrefix>logs/</TargetPrefix>
 5.     <TargetObjectKeyFormat>
 6.       <PartitionedPrefix>
 7.          <PartitionDateSource>EventTime</PartitionDateSource>
 8.       </PartitionedPrefix>
 9.   </TargetObjectKeyFormat>
10.   </LoggingEnabled>
11. </BucketLoggingStatus>
```

ログオブジェクトはログ配信アカウントが作成および所有し、バケット所有者はログオブジェクトへの完全な許可を付与されます。必要に応じて、送信先権限 (別名**ターゲット権限) をして、他のユーザーがログにアクセスできるようにアクセス許可を付与できます。詳細については、[ を参照してください。PutBucketLogging](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTlogging.html)

**注記**  
送信先バケットが、オブジェクト所有権のバケット所有者強制設定を使用している場合、送信先権限を使用してその他のユーザーにアクセス許可を付与することはできません。その他のユーザーにアクセス許可を付与するには、送信先バケットのバケットポリシーを更新します。詳細については、「[ログ配信許可](#grant-log-delivery-permissions-general)」を参照してください。

バケットのログ記録設定を取得するには、[https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETlogging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETlogging.html) API オペレーションを使用します。

ログ記録設定を削除するには、`PutBucketLogging` リクエストで空の `BucketLoggingStatus` を指定して送信します。

```
1. <BucketLoggingStatus xmlns="http://doc.s3.amazonaws.com/2006-03-01">
2. </BucketLoggingStatus>
```

バケットでログ記録を有効にするには、Amazon S3 API または AWS SDK ラッパーライブラリを使用できます。

### AWS SDK の使用
<a name="enable-logging-sdk"></a>

バケットでログ記録を有効化する例は次のとおりです。ソースバケットと送信先 (ターゲット) バケットの 2 つのバケットを作成する必要があります。 この例ではまず、送信先バケットのバケット ACL を更新します。この例では、まず送信先バケットにログを書き込むために必要なアクセス許可をログ配信グループに付与して、次にソースバケットでのログ記録を有効にしています。

このような例では、オブジェクト所有権のバケット所有者の強制設定を使用する送信先バケットでは機能しません。

送信先 (ターゲット) バケットが、オブジェクト所有権にバケット所有者の強制設定を使用している場合、バケット ACL や オブジェクト ACL を設定することはできません。[PutBucketLogging](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLogging.html) 設定には、送信先 (ターゲット) 権限を含めることもできません。ロギングサービスプリンシパル (`logging.s3.amazonaws.com`) に許可を付与するために、バケットポリシーを使用する必要があります。詳細については、「[ログ配信許可](#grant-log-delivery-permissions-general)」を参照してください。

------
#### [ .NET ]

**SDK for .NET**  
 GitHub には、その他のリソースもあります。[AWS コード例リポジトリ](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/dotnetv3/S3#code-examples)で完全な例を見つけて、設定と実行の方法を確認してください。

```
    using System;
    using System.IO;
    using System.Threading.Tasks;
    using Amazon.S3;
    using Amazon.S3.Model;
    using Microsoft.Extensions.Configuration;

    /// <summary>
    /// This example shows how to enable logging on an Amazon Simple Storage
    /// Service (Amazon S3) bucket. You need to have two Amazon S3 buckets for
    /// this example. The first is the bucket for which you wish to enable
    /// logging, and the second is the location where you want to store the
    /// logs.
    /// </summary>
    public class ServerAccessLogging
    {
        private static IConfiguration _configuration = null!;

        public static async Task Main()
        {
            LoadConfig();

            string bucketName = _configuration["BucketName"];
            string logBucketName = _configuration["LogBucketName"];
            string logObjectKeyPrefix = _configuration["LogObjectKeyPrefix"];
            string accountId = _configuration["AccountId"];

            // If the AWS Region defined for your default user is different
            // from the Region where your Amazon S3 bucket is located,
            // pass the Region name to the Amazon S3 client object's constructor.
            // For example: RegionEndpoint.USWest2 or RegionEndpoint.USEast2.
            IAmazonS3 client = new AmazonS3Client();

            try
            {
                // Update bucket policy for target bucket to allow delivery of logs to it.
                await SetBucketPolicyToAllowLogDelivery(
                    client,
                    bucketName,
                    logBucketName,
                    logObjectKeyPrefix,
                    accountId);

                // Enable logging on the source bucket.
                await EnableLoggingAsync(
                    client,
                    bucketName,
                    logBucketName,
                    logObjectKeyPrefix);
            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine($"Error: {e.Message}");
            }
        }

        /// <summary>
        /// This method grants appropriate permissions for logging to the
        /// Amazon S3 bucket where the logs will be stored.
        /// </summary>
        /// <param name="client">The initialized Amazon S3 client which will be used
        /// to apply the bucket policy.</param>
        /// <param name="sourceBucketName">The name of the source bucket.</param>
        /// <param name="logBucketName">The name of the bucket where logging
        /// information will be stored.</param>
        /// <param name="logPrefix">The logging prefix where the logs should be delivered.</param>
        /// <param name="accountId">The account id of the account where the source bucket exists.</param>
        /// <returns>Async task.</returns>
        public static async Task SetBucketPolicyToAllowLogDelivery(
            IAmazonS3 client,
            string sourceBucketName,
            string logBucketName,
            string logPrefix,
            string accountId)
        {
            var resourceArn = @"""arn:aws:s3:::" + logBucketName + "/" + logPrefix + @"*""";

            var newPolicy = @"{
                                ""Statement"":[{
                                ""Sid"": ""S3ServerAccessLogsPolicy"",
                                ""Effect"": ""Allow"",
                                ""Principal"": { ""Service"": ""logging.s3.amazonaws.com"" },
                                ""Action"": [""s3:PutObject""],
                                ""Resource"": [" + resourceArn + @"],
                                ""Condition"": {
                                ""ArnLike"": { ""aws:SourceArn"": ""arn:aws:s3:::" + sourceBucketName + @""" },
                                ""StringEquals"": { ""aws:SourceAccount"": """ + accountId + @""" }
                                        }
                                    }]
                                }";
            Console.WriteLine($"The policy to apply to bucket {logBucketName} to enable logging:");
            Console.WriteLine(newPolicy);

            PutBucketPolicyRequest putRequest = new PutBucketPolicyRequest
            {
                BucketName = logBucketName,
                Policy = newPolicy,
            };
            await client.PutBucketPolicyAsync(putRequest);
            Console.WriteLine("Policy applied.");
        }

        /// <summary>
        /// This method enables logging for an Amazon S3 bucket. Logs will be stored
        /// in the bucket you selected for logging. Selected prefix
        /// will be prepended to each log object.
        /// </summary>
        /// <param name="client">The initialized Amazon S3 client which will be used
        /// to configure and apply logging to the selected Amazon S3 bucket.</param>
        /// <param name="bucketName">The name of the Amazon S3 bucket for which you
        /// wish to enable logging.</param>
        /// <param name="logBucketName">The name of the Amazon S3 bucket where logging
        /// information will be stored.</param>
        /// <param name="logObjectKeyPrefix">The prefix to prepend to each
        /// object key.</param>
        /// <returns>Async task.</returns>
        public static async Task EnableLoggingAsync(
            IAmazonS3 client,
            string bucketName,
            string logBucketName,
            string logObjectKeyPrefix)
        {
            Console.WriteLine($"Enabling logging for bucket {bucketName}.");
            var loggingConfig = new S3BucketLoggingConfig
            {
                TargetBucketName = logBucketName,
                TargetPrefix = logObjectKeyPrefix,
            };

            var putBucketLoggingRequest = new PutBucketLoggingRequest
            {
                BucketName = bucketName,
                LoggingConfig = loggingConfig,
            };
            await client.PutBucketLoggingAsync(putBucketLoggingRequest);
            Console.WriteLine($"Logging enabled.");
        }

        /// <summary>
        /// Loads configuration from settings files.
        /// </summary>
        public static void LoadConfig()
        {
            _configuration = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("settings.json") // Load settings from .json file.
                .AddJsonFile("settings.local.json", true) // Optionally, load local settings.
                .Build();
        }
    }
```
+  API の詳細については、「*AWS SDK for .NET API リファレンス*」の「[PutBucketLogging](https://docs.aws.amazon.com/goto/DotNetSDKV3/s3-2006-03-01/PutBucketLogging)」を参照してください。

------
#### [ Java ]

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.BucketLoggingStatus;
import software.amazon.awssdk.services.s3.model.LoggingEnabled;
import software.amazon.awssdk.services.s3.model.PartitionedPrefix;
import software.amazon.awssdk.services.s3.model.PutBucketLoggingRequest;
import software.amazon.awssdk.services.s3.model.TargetObjectKeyFormat;

// Class to set a bucket policy on a target S3 bucket and enable server access logging on a source S3 bucket.
public class ServerAccessLogging {
    private static S3Client s3Client;

    public static void main(String[] args) {
        String sourceBucketName = "SOURCE-BUCKET";
        String targetBucketName = "TARGET-BUCKET";
        String sourceAccountId = "123456789012";
        String targetPrefix = "logs/";

        // Create S3 Client.
        s3Client = S3Client.builder().
                region(Region.US_EAST_2)
                .build();

        // Set a bucket policy on the target S3 bucket to enable server access logging by granting the
        // logging.s3.amazonaws.com principal permission to use the PutObject operation.
        ServerAccessLogging serverAccessLogging = new ServerAccessLogging();
        serverAccessLogging.setTargetBucketPolicy(sourceAccountId, sourceBucketName, targetBucketName);

        // Enable server access logging on the source S3 bucket.
        serverAccessLogging.enableServerAccessLogging(sourceBucketName, targetBucketName,
                targetPrefix);

    }

    // Function to set a bucket policy on the target S3 bucket to enable server access logging by granting the
    // logging.s3.amazonaws.com principal permission to use the PutObject operation.
    public void setTargetBucketPolicy(String sourceAccountId, String sourceBucketName, String targetBucketName) {
        String policy = "{\n" +
                "    \"Version\": \"2012-10-17\",\n" +
                "    \"Statement\": [\n" +
                "        {\n" +
                "            \"Sid\": \"S3ServerAccessLogsPolicy\",\n" +
                "            \"Effect\": \"Allow\",\n" +
                "            \"Principal\": {\"Service\": \"logging.s3.amazonaws.com\"},\n" +
                "            \"Action\": [\n" +
                "                \"s3:PutObject\"\n" +
                "            ],\n" +
                "            \"Resource\": \"arn:aws:s3:::" + targetBucketName + "/*\",\n" +
                "            \"Condition\": {\n" +
                "                \"ArnLike\": {\n" +
                "                    \"aws:SourceArn\": \"arn:aws:s3:::" + sourceBucketName + "\"\n" +
                "                },\n" +
                "                \"StringEquals\": {\n" +
                "                    \"aws:SourceAccount\": \"" + sourceAccountId + "\"\n" +
                "                }\n" +
                "            }\n" +
                "        }\n" +
                "    ]\n" +
                "}";
        s3Client.putBucketPolicy(b -> b.bucket(targetBucketName).policy(policy));
    }

    // Function to enable server access logging on the source S3 bucket.
    public void enableServerAccessLogging(String sourceBucketName, String targetBucketName,
            String targetPrefix) {
        TargetObjectKeyFormat targetObjectKeyFormat = TargetObjectKeyFormat.builder()
                .partitionedPrefix(PartitionedPrefix.builder().partitionDateSource("EventTime").build())
                .build();
        LoggingEnabled loggingEnabled = LoggingEnabled.builder()
                .targetBucket(targetBucketName)
                .targetPrefix(targetPrefix)
                .targetObjectKeyFormat(targetObjectKeyFormat)
                .build();
        BucketLoggingStatus bucketLoggingStatus = BucketLoggingStatus.builder()
                .loggingEnabled(loggingEnabled)
                .build();
        s3Client.putBucketLogging(PutBucketLoggingRequest.builder()
                .bucket(sourceBucketName)
                .bucketLoggingStatus(bucketLoggingStatus)
                .build());
    }

}
```

------

### AWS CLI の使用
<a name="enabling-s3-access-logs-for-requests"></a>

S3 バケットがある各 AWS リージョンに専用のログ記録バケットを作成することをお勧めします。その後、Amazon S3 アクセスログをその S3 バケットに配信します。詳細と例については、「*AWS CLI リファレンス*」の「[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-bucket-logging.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-bucket-logging.html)」を参照してください。

送信先 (ターゲット) バケットが、オブジェクト所有権にバケット所有者の強制設定を使用している場合、バケット ACL や オブジェクト ACL を設定することはできません。[PutBucketLogging](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLogging.html) 設定には、送信先 (ターゲット) 権限を含めることもできません。ロギングサービスプリンシパル (`logging.s3.amazonaws.com`) に許可を付与するために、バケットポリシーを使用する必要があります。詳細については、[ログ配信許可](#grant-log-delivery-permissions-general) を参照してください。

**Example − 2 つのリージョンの 5 つのバケットでアクセスログを有効にする**  
この例では、次の 5 つのバケットがあります。  
+ `amzn-s3-demo-source-bucket-us-east-1`
+ `amzn-s3-demo-source-bucket1-us-east-1`
+ `amzn-s3-demo-source-bucket2-us-east-1`
+ `amzn-s3-demo-bucket1-us-west-2`
+ `amzn-s3-demo-bucket2-us-west-2`
**注記**  
次の手順の最後のステップでは、ログ記録バケットを作成して、そのバケットでサーバーアクセスのログ記録を有効にするために使用できる bash スクリプトの例が示されています。このようなスクリプトを使用するには、次の手順で説明されるとおり、`policy.json` と `logging.json` ファイルを作成する必要があります。

1. 米国西部 (オレゴン) リージョンと米国東部 (バージニア北部) リージョンに 2 つのログ記録先バケットを作成して、次の名前を付けます。
   + `amzn-s3-demo-destination-bucket-logs-us-east-1`
   + `amzn-s3-demo-destination-bucket1-logs-us-west-2`

1. このステップの後半では、次のとおりサーバーアクセスのログ記録を有効にします。
   + `amzn-s3-demo-source-bucket-us-east-1` は、プレフィックス `amzn-s3-demo-destination-bucket-logs-us-east-1` を使用して S3 バケット `amzn-s3-demo-source-bucket-us-east-1` にログを記録します。
   + `amzn-s3-demo-source-bucket1-us-east-1` は、プレフィックス `amzn-s3-demo-destination-bucket-logs-us-east-1` を使用して S3 バケット `amzn-s3-demo-source-bucket1-us-east-1` にログを記録します。
   + `amzn-s3-demo-source-bucket2-us-east-1` は、プレフィックス `amzn-s3-demo-destination-bucket-logs-us-east-1` を使用して S3 バケット `amzn-s3-demo-source-bucket2-us-east-1` にログを記録します。
   + `amzn-s3-demo-bucket1-us-west-2` は、プレフィックス `amzn-s3-demo-destination-bucket1-logs-us-west-2` を使用して S3 バケット `amzn-s3-demo-bucket1-us-west-2` にログを記録します。
   + `amzn-s3-demo-bucket2-us-west-2` は、プレフィックス `amzn-s3-demo-destination-bucket1-logs-us-west-2` を使用して S3 バケット `amzn-s3-demo-bucket2-us-west-2` にログを記録します。

1. バケット ACL **またはバケットポリシーを使用して、サーバーアクセスのログ記録の配信の許可を付与します。
   + **バケットポリシーの更新** (推奨) – ロギングサービスプリンシパルにアクセス許可を付与するには、次の `put-bucket-policy` コマンドを使用します。`amzn-s3-demo-destination-bucket-logs` を、宛先のバケットの名前に置き換えます。

     ```
     1. aws s3api put-bucket-policy --bucket amzn-s3-demo-destination-bucket-logs --policy file://policy.json
     ```

     `Policy.json` は、次のバケットポリシーを含む現在のフォルダ内の JSON ドキュメントです。このバケットポリシーを実行するには、`user input placeholders` をユーザー自身の情報に置き換えます。次のポリシーでは、*`amzn-s3-demo-destination-bucket-logs`* はサーバーアクセスログが配信される送信先バケットであり、`amzn-s3-demo-source-bucket` はソースバケットです。`SOURCE-ACCOUNT-ID` は、ソースバケットを所有する AWS アカウント です。

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
         "Statement": [
             {
                 "Sid": "S3ServerAccessLogsPolicy",
                 "Effect": "Allow",
                 "Principal": {
                     "Service": "logging.s3.amazonaws.com"
                 },
                 "Action": [
                     "s3:PutObject"
                 ],
                 "Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket-logs/*",
                 "Condition": {
                     "ArnLike": {
                         "aws:SourceArn": "arn:aws:s3:::amzn-s3-demo-source-bucket"
                     },
                     "StringEquals": {
                         "aws:SourceAccount": "SOURCE-ACCOUNT-ID"
                     }
                 }
             }
         ]
     }
     ```

------
   + **バケット ACL の更新** – S3 ログ配信グループに許可を付与するには、次の `put-bucket-acl` コマンドを使用します。*`amzn-s3-demo-destination-bucket-logs`* は、送信先 (ターゲット) バケット名前に置き換えます。

     ```
     1. aws s3api put-bucket-acl --bucket amzn-s3-demo-destination-bucket-logs  --grant-write URI=http://acs.amazonaws.com/groups/s3/LogDelivery --grant-read-acp URI=http://acs.amazonaws.com/groups/s3/LogDelivery 
     ```

1. 次に、(次の 3 つの例のうちのいずれかに基づいた) ログ記録設定を含む `logging.json` ファイルを作成します。`logging.json` ファイルを作成したら、次の `put-bucket-logging` コマンドを使用してログ記録設定を適用できます。*`amzn-s3-demo-destination-bucket-logs`* は、送信先 (ターゲット) バケット名前に置き換えます。

   ```
   1. aws s3api put-bucket-logging --bucket amzn-s3-demo-destination-bucket-logs --bucket-logging-status file://logging.json 
   ```
**注記**  
この `put-bucket-logging` コマンドを使用して各送信先バケットにログ記録設定を適用する代わりに、次のステップで提供される bash スクリプトのいずれかを使用できます。このようなスクリプトを使用するには、次の手順のとおり、`policy.json` と `logging.json` ファイルを作成する必要があります。

   `logging.json` ファイルは、ログ記録設定を含む現在のフォルダ内の JSON ドキュメントです。送信先バケットがオブジェクト所有権に対してバケット所有者の強制設定を使用している場合、ログ記録設定に送信先 (ターゲット) の権限を含めることはできません。詳細については、「[ログ配信許可](#grant-log-delivery-permissions-general)」を参照してください。  
**Example — 送信先 (ターゲット) 権限なしの `logging.json`**  

   次の例の `logging.json` ファイルには、送信先 (ターゲット) 権限が含まれていません。そのため、オブジェクト所有権のバケット所有者の強制設定を使用する送信先 (ターゲット) バケットにこの設定を適用できます。

   ```
     {
         "LoggingEnabled": {
             "TargetBucket": "amzn-s3-demo-destination-bucket-logs",
             "TargetPrefix": "amzn-s3-demo-destination-bucket/"
          }
      }
   ```  
**Example — 送信先 (ターゲット) 権限のある `logging.json`**  

   次の例の `logging.json` ファイルには、送信先 (ターゲット) 権限が含まれています。

   送信先バケットが、オブジェクト所有権のバケット所有者の強制設定を使用している場合、[https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLogging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLogging.html) 設定に送信先 (ターゲット) 権限を含めることはできません。詳細については、「[ログ配信許可](#grant-log-delivery-permissions-general)」を参照してください。

   ```
     {
         "LoggingEnabled": {
             "TargetBucket": "amzn-s3-demo-destination-bucket-logs",
             "TargetPrefix": "amzn-s3-demo-destination-bucket/",
             "TargetGrants": [
                  {
                     "Grantee": {
                         "Type": "CanonicalUser",
                         "ID": "79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be"
                      },
                     "Permission": "FULL_CONTROL"
                  }
              ]
          }
      }
   ```

**被付与者の値**  
アクセス権を割り当てる先のユーザー (被付与者) は、以下の方法で (リクエスト要素を使用して) 指定できます。
   + ユーザーの ID の場合:

     ```
     {
       "Grantee": {
         "Type": "CanonicalUser",
         "ID": "ID"
       }
     }
     ```
   + URI の場合:

     ```
     {
       "Grantee": {
         "Type": "Group",
         "URI": "http://acs.amazonaws.com/groups/global/AuthenticatedUsers"
       }
     }
     ```  
**Example – ログオブジェクトキーを S3 イベント時刻に設定した `logging.json`**  

   次の `logging.json` ファイルは、ログオブジェクトキーの形式を S3 イベント時刻に変更します。暗号化キーの使用の詳細については、「[ログ配信を有効にするにはどうすればよいですか?](ServerLogs.md#server-access-logging-overview)」を参照してください。

   ```
     { 
       "LoggingEnabled": {
           "TargetBucket": "amzn-s3-demo-destination-bucket-logs",
           "TargetPrefix": "amzn-s3-demo-destination-bucket/",
           "TargetObjectKeyFormat": { 
               "PartitionedPrefix": { 
                   "PartitionDateSource": "EventTime" 
               }
            }
       }
   }
   ```

1. アカウントのすべてのバケットに対するアクセスログを追加するには、次の bash スクリプトのいずれかを使用します。*`amzn-s3-demo-destination-bucket-logs`* は、送信先 (ターゲット) バケットの名前に置き換え、`us-west-2` はバケットが配置されているリージョンの名前に置き換えます。
**注記**  
これはすべてのバケットが同じリージョンにある場合にのみ機能します。複数のリージョンにバケットがある場合は、スクリプトを調整する必要があります。  
**Example — バケットポリシーによるアクセスを許可し、アカウントのバケットのロギングを追加します**  

   ```
     loggingBucket='amzn-s3-demo-destination-bucket-logs'
     region='us-west-2'
     
     
     # Create the logging bucket.
     aws s3 mb s3://$loggingBucket --region $region
     
     aws s3api put-bucket-policy --bucket $loggingBucket --policy file://policy.json
     
     # List the buckets in this account.
     buckets="$(aws s3 ls | awk '{print $3}')"
     
     # Put a bucket logging configuration on each bucket.
     for bucket in $buckets
         do 
           # This if statement excludes the logging bucket.
           if [ "$bucket" == "$loggingBucket" ] ; then
               continue;
           fi
           printf '{
             "LoggingEnabled": {
               "TargetBucket": "%s",
               "TargetPrefix": "%s/"
           }
         }' "$loggingBucket" "$bucket"  > logging.json
         aws s3api put-bucket-logging --bucket $bucket --bucket-logging-status file://logging.json
         echo "$bucket done"
     done
     
     rm logging.json
     
     echo "Complete"
   ```  
**Example — バケット ACL でアクセス権を付与し、アカウントのバケットのロギングを追加します**  

   ```
     loggingBucket='amzn-s3-demo-destination-bucket-logs'
     region='us-west-2'
     
     
     # Create the logging bucket.
     aws s3 mb s3://$loggingBucket --region $region
     
     aws s3api put-bucket-acl --bucket $loggingBucket --grant-write URI=http://acs.amazonaws.com/groups/s3/LogDelivery --grant-read-acp URI=http://acs.amazonaws.com/groups/s3/LogDelivery
     
     # List the buckets in this account.
     buckets="$(aws s3 ls | awk '{print $3}')"
     
     # Put a bucket logging configuration on each bucket.
     for bucket in $buckets
         do 
           # This if statement excludes the logging bucket.
           if [ "$bucket" == "$loggingBucket" ] ; then
               continue;
           fi
           printf '{
             "LoggingEnabled": {
               "TargetBucket": "%s",
               "TargetPrefix": "%s/"
           }
         }' "$loggingBucket" "$bucket"  > logging.json
         aws s3api put-bucket-logging --bucket $bucket --bucket-logging-status file://logging.json
         echo "$bucket done"
     done
     
     rm logging.json
     
     echo "Complete"
   ```

## サーバーアクセスログ設定の検証
<a name="verify-access-logs"></a>

サーバーアクセスロギングを有効にしたら、以下の手順を実行します。
+ 送信先バケットにアクセスして、ログファイルが配信されていることを確認します。アクセスログが設定されると、Amazon S3 はすぐにリクエストのキャプチャとログ記録を開始します。ただし、ログが送信先バケットに送られるまでに数時間かかる場合があります。詳細については、「[バケットのログ記録ステータスの変更が有効になるまでには時間がかかる](ServerLogs.md#BucketLoggingStatusChanges)」および「[ベストエフォート型のサーバーログ配信](ServerLogs.md#LogDeliveryBestEffort)」を参照してください。

  Amazon S3 リクエストメトリクスを使用し、これらのメトリックスに Amazon CloudWatch アラームを設定することで、ログ配信を自動的に検証することもできます。詳細については、「[Amazon CloudWatch によるメトリクスのモニタリング](cloudwatch-monitoring.md)」を参照してください。
+ ログファイルのコンテンツを開いて読み取ることができることを確認します。

サーバアクセスロギングのトラブルシューティング情報については、[サーバーのアクセスログ記録のトラブルシューティング](troubleshooting-server-access-logging.md) を参照してください。

# Amazon S3 サーバーアクセスログの形式
<a name="LogFormat"></a>

サーバーアクセスのログには、Amazon S3 バケットに対するリクエストの詳細が記録されます。サーバーアクセスログは次の目的で使用できます。
+ セキュリティ監査とアクセス監査の実施
+ 顧客ベースについて学ぶ
+ Amazon S3 の請求書を理解する

このセクションでは、Amazon S3 サーバーアクセスログファイルの形式およびその他の詳細について説明します。

サーバーアクセスのログファイルは、一連のログレコードを改行で区切って構成します。各ログレコードは 1 個のリクエストを表し、各フィールドをスペースで区切って構成します。

次に示すのは、5 個のログレコードで構成されるログの例です。

**注記**  
任意のフィールドを `-` に設定して、データが不明または使用不可であること、またはフィールドがこのリクエストに適用されなかったことを示すことができます。

```
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be amzn-s3-demo-bucket1 [06/Feb/2019:00:00:38 +0000] 192.0.2.3 79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be 3E57427F3EXAMPLE REST.GET.VERSIONING - "GET /amzn-s3-demo-bucket1?versioning HTTP/1.1" 200 - 113 - 7 - "-" "S3Console/0.4" - s9lzHYrFp76ZVxRcpX9+5cjAnEH2ROuNkd2BHfIa6UkFVdtjf5mKR3/eTPFvsiP/XV/VLi31234= SigV4 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader amzn-s3-demo-bucket1.s3.us-west-1.amazonaws.com TLSV1.2 arn:aws:s3:us-west-1:123456789012:accesspoint/example-AP Yes us-east-1
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be amzn-s3-demo-bucket1 [06/Feb/2019:00:00:38 +0000] 192.0.2.3 79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be 891CE47D2EXAMPLE REST.GET.LOGGING_STATUS - "GET /amzn-s3-demo-bucket1?logging HTTP/1.1" 200 - 242 - 11 - "-" "S3Console/0.4" - 9vKBE6vMhrNiWHZmb2L0mXOcqPGzQOI5XLnCtZNPxev+Hf+7tpT6sxDwDty4LHBUOZJG96N1234= SigV4 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader amzn-s3-demo-bucket1.s3.us-west-1.amazonaws.com TLSV1.2 - - us-east-1
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be amzn-s3-demo-bucket1 [06/Feb/2019:00:00:38 +0000] 192.0.2.3 79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be A1206F460EXAMPLE REST.GET.BUCKETPOLICY - "GET /amzn-s3-demo-bucket1?policy HTTP/1.1" 404 NoSuchBucketPolicy 297 - 38 - "-" "S3Console/0.4" - BNaBsXZQQDbssi6xMBdBU2sLt+Yf5kZDmeBUP35sFoKa3sLLeMC78iwEIWxs99CRUrbS4n11234= SigV4 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader amzn-s3-demo-bucket1.s3.us-west-1.amazonaws.com TLSV1.2 - Yes us-east-1
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be amzn-s3-demo-bucket1 [06/Feb/2019:00:01:00 +0000] 192.0.2.3 79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be 7B4A0FABBEXAMPLE REST.GET.VERSIONING - "GET /amzn-s3-demo-bucket1?versioning HTTP/1.1" 200 - 113 - 33 - "-" "S3Console/0.4" - Ke1bUcazaN1jWuUlPJaxF64cQVpUEhoZKEG/hmy/gijN/I1DeWqDfFvnpybfEseEME/u7ME1234= SigV4 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader amzn-s3-demo-bucket1.s3.us-west-1.amazonaws.com TLSV1.2 - - us-east-1
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be amzn-s3-demo-bucket1 [06/Feb/2019:00:01:57 +0000] 192.0.2.3 79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be DD6CC733AEXAMPLE REST.PUT.OBJECT s3-dg.pdf "PUT /amzn-s3-demo-bucket1/s3-dg.pdf HTTP/1.1" 200 - - 4406583 41754 28 "-" "S3Console/0.4" - 10S62Zv81kBW7BB6SX4XJ48o6kpcl6LPwEoizZQQxJd5qDSCTLX0TgS37kYUBKQW3+bPdrg1234= SigV4 ECDHE-RSA-AES128-SHA AuthHeader amzn-s3-demo-bucket1.s3.us-west-1.amazonaws.com TLSV1.2 - Yes us-east-1
```

**[チェックサムを計算]** オペレーションのログレコードの例を次に示します。

```
7cd47ef2be amzn-s3-demo-bucket [06/Feb/2019:00:00:38 +0000] - 79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be e5042925-b524-4b3b-a869-f3881e78ff3a S3.COMPUTE.OBJECT.CHECKSUM example-object - - - - 1048576 - - - - - bPf7qjG4XwYdPgDQTl72GW/uotRhdPz2UryEyAFLDSRmKrakUkJCYLtAw6fdANcrsUYc1M/kIulXM1u5vZQT5g== - - - - - - - -
```

**Topics**
+ [

## ログレコードフィールド
](#log-record-fields)
+ [

## コピーオペレーションの追加ログ記録
](#AdditionalLoggingforCopyOperations)
+ [

## カスタムアクセスログ情報
](#LogFormatCustom)
+ [

## 拡張可能なサーバーアクセスログの形式のプログラミングに関する考慮事項
](#LogFormatExtensible)

## ログレコードフィールド
<a name="log-record-fields"></a>

次のリストは、ログレコードのフィールドについて説明しています。

**Bucket Owner**  
ソースバケット所有者の正規ユーザー ID。正規ユーザー ID は、別の形式の AWS アカウント ID です。正規ユーザー ID の詳細については、*AWS 全般のリファレンス* の「[AWS アカウント IDID](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html)」を参照してください。アカウントの正規ユーザー ID を検索する方法については、「[AWS アカウントの正規ユーザー ID を検索する](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-identifiers.html#FindCanonicalId)」を参照してください。  
**エントリ例**  

```
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
```

**バケット**  
リクエストの処理ターゲットのバケットの名前。システムで受け取ったリクエストの形式に誤りがあり、バケットを特定できない場合、そのリクエストはサーバーアクセスログに表示されません。  
**エントリ例**  

```
amzn-s3-demo-bucket1
```

**時間**  
リクエストが受信された時間。これらの日付と時刻は協定世界時 (UTC) です。`strftime()` terminology を使用した形式は次のようになります: `[%d/%b/%Y:%H:%M:%S %z]`  
**エントリ例**  

```
[06/Feb/2019:00:00:38 +0000]
```

**Remote IP**  
リクエスタの表面上の IP アドレス。中間プロキシやファイアウォールにより、リクエストを作成したマシンの実際の IP アドレスが不明確になる場合があります。  
**エントリ例**  

```
192.0.2.3
```

**リクエスタ**  
リクエスタの正規ユーザー ID。認証されていないリクエストの場合は `-` です。リクエスタが IAM ユーザーであった場合、このフィールドは、リクエスタの IAM ユーザー名と IAM ユーザーが属する AWS アカウントを返します。この識別子は、アクセスコントロールに使用されるものと同じです。  
**エントリ例**  

```
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
```
リクエスタが引き受けたロールを使用している場合、このフィールドは、引き受けた IAM ロールを返します。  
**エントリ例**  

```
arn:aws:sts::123456789012:assumed-role/roleName/test-role
```

**リクエスト ID**  
各リクエストを一意に識別するために Amazon S3 で生成される文字列。**[チェックサムを計算]** ジョブリクエストの場合、**[リクエスト ID]** フィールドには関連するジョブ ID が表示されます。詳細については、「[チェックサムの計算](batch-ops-compute-checksums.md)」を参照してください。  
**エントリ例**  

```
3E57427F33A59F07
```

**オペレーション**  
ここに表示されているオペレーションは、`SOAP.operation`、`REST.HTTP_method.resource_type`、`WEBSITE.HTTP_method.resource_type` または `BATCH.DELETE.OBJECT`、または `S3.action.resource_type` の [S3 ライフサイクルとログ記録](lifecycle-and-other-bucket-config.md#lifecycle-general-considerations-logging) として宣言されます。[https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-compute-checksums.html](https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-compute-checksums.html) ジョブリクエストの場合、オペレーションは `S3.COMPUTE.OBJECT.CHECKSUM` としてリストされます。  
**エントリ例**  

```
REST.PUT.OBJECT
S3.COMPUTE.OBJECT.CHECKSUM
```

**Key**  
リクエストのキー (オブジェクト名) 部分。  
**エントリ例**  

```
/photos/2019/08/puppy.jpg
```

**Request-URI**  
HTTP リクエストメッセージの `Request-URI` の部分。このフィールドには、ユーザー入力からエスケープされていない引用符を含めることができます。  
**エントリ例**  

```
"GET /amzn-s3-demo-bucket1/photos/2019/08/puppy.jpg?x-foo=bar HTTP/1.1"
```

**HTTP status**  
レスポンスの HTTP ステータスの数値。  
**エントリ例**  

```
200
```

**エラーコード**  
Amazon S3 [エラーレスポンス](https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html)、またはエラーが発生しなかった場合は「`-`」。  
**エントリ例**  

```
NoSuchBucket
```

**Bytes Sent**  
送信されたレスポンスのバイト数 (HTTP プロトコルオーバーヘッドを除きます)。ゼロの場合は「`-`」。  
**エントリ例**  

```
2662992
```

**Object Size**  
該当するオブジェクトの合計サイズ。  
**エントリ例**  

```
3462992
```

**Total Time**  
サーバーから見た、リクエストの転送中の時間数 (ミリ秒単位)。これは、リクエストが受信されてから、レスポンスの最終バイトが送信されるまでの時間を計測した値です。クライアント側での計測値は、ネットワーク遅延により長くなる場合があります。  
**エントリ例**  

```
70
```

**Turn−Around Time**  
Amazon S3 でリクエストの処理に要した時間数 (ミリ秒単位)。これは、リクエストの最終バイトが受信されてから、レスポンスの先頭バイトが送信されるまでの時間を計測した値です。  
**エントリ例**  

```
10
```

**Referer**  
HTTP `Referer` ヘッダーの値 (存在する場合)。一般に、HTTP ユーザーエージェント (ブラウザなど) は、このヘッダーをリクエスト作成時のリンクページや埋め込みページの URL に設定します。このフィールドには、ユーザー入力からエスケープされていない引用符を含めることができます。  
**エントリ例**  

```
"http://www.example.com/webservices"
```

**User-Agent**  
HTTP `User-Agent` ヘッダーの値 このフィールドには、ユーザー入力からエスケープされていない引用符を含めることができます。  
**エントリ例**  

```
"curl/7.15.1"
```

**Version Id**  
リクエストのバージョン ID、または オペレーションが `versionId` パラメータを取らない場合は「`-`」。  
**エントリ例**  

```
3HL4kqtJvjVBH40Nrjfkd
```

**ホスト ID**  
`x-amz-id-2` または Amazon S3 拡張リクエスト ID。  
**エントリ例**  

```
s9lzHYrFp76ZVxRcpX9+5cjAnEH2ROuNkd2BHfIa6UkFVdtjf5mKR3/eTPFvsiP/XV/VLi31234=
```

**署名バージョン**  
署名バージョン `SigV2` か `SigV4` (リクエストの認証に使用)、または `-` (認証されていないリクエストの場合)。  
**エントリ例**  

```
SigV2
```

**暗号スイート**  
HTTPS リクエストまたは HTTP の `-` に対してネゴシエートされた Transport Layer Security (TLS) 暗号。  
**エントリ例**  

```
ECDHE-RSA-AES128-GCM-SHA256
```

**認証タイプ**  
使用されるリクエスト認証のタイプ。認証ヘッダーは `AuthHeader`、クエリ文字列 (署名付き URL) は `QueryString`、認証されていないリクエストには「`-`」。  
**エントリ例**  

```
AuthHeader
```

**ホストヘッダー**  
Amazon S3 への接続に使用するエンドポイント。  
**エントリ例**  

```
s3.us-west-2.amazonaws.com
```
一部の古いリージョンでは、レガシーエンドポイントがサポートされています。これらのエンドポイントは、サーバーアクセスログまたは AWS CloudTrail ログに表示される場合があります。詳細については、「[レガシーエンドポイント](VirtualHosting.md#s3-legacy-endpoints)」を参照してください。Amazon S3 リージョンとエンドポイントの完全なリストについては、*Amazon Web Services 全般のリファレンス* の「[Amazon S3 エンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/s3.html)」を参照してください。

**TLS のバージョン**  
クライアントによってネゴシエートされた Transport Layer Security (TLS) バージョン。値は `TLSv1.1`、`TLSv1.2`、`TLSv1.3`、`-` のいずれかです (TLS を使用しなかった場合)。  
**エントリ例**  

```
TLSv1.2
```

**アクセスポイント ARN**  
リクエストのアクセスポイントの Amazon リソースネーム (ARN) です。アクセスポイントの ARN の形式が不正、または使用されていない場合、このフィールドには「`-`」が含まれます。アクセスポイントの詳細については、「[汎用バケットでの Amazon S3 アクセスポイントの使用](using-access-points.md)」を参照してください。ARN の詳細については、「*AWS リファレンスガイド*」の「[Amazon リソースネーム (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)」を参照してください。  
**エントリ例**  

```
arn:aws:s3:us-east-1:123456789012:accesspoint/example-AP
```

**aclRequired**  
リクエストの承認のためにアクセスコントロールリスト (ACL) が必要かどうかを示す文字列。リクエストに承認用の ACL が必要な場合、文字列は「`Yes`」です。ACL が必要なかった場合、文字列は「`-`」です。ACL の詳細については、「[アクセスコントロールリスト (ACL) の概要](acl-overview.md)」を参照してください。`aclRequired` フィールドを使用して ACL を無効にする方法の詳細については、[オブジェクトの所有権の制御とバケットの ACL の無効化。](about-object-ownership.md) を参照してください。  
**エントリ例**  

```
Yes
```

**送信元リージョン**  
リクエストの送信元の AWS リージョン。このフィールドには、送信元リージョンを特定できない場合 (PrivateLink 接続、Direct Connect 接続、Bring your own IP addresses (BYOIP)、または非 AWS IP アドレスなど）、またはライフサイクルやチェックサムなど、お客様が設定したポリシーやアクションに基づいてトリガーされたオペレーションによってログが生成された場合、ダッシュ (`-`) が表示されます。  
**エントリ例**  

```
us-east-1
```

## コピーオペレーションの追加ログ記録
<a name="AdditionalLoggingforCopyOperations"></a>

コピーオペレーションには `GET` と `PUT` が含まれます。このため、コピーオペレーションの実行時には 2 つのログレコードが記録されます。前述のセクションでは、コピーオペレーションの `PUT` 部分に関連するフィールドを説明しています。次のリストでは、コピーオペレーションの `GET` 部分に関連するフィールドを説明します。

**バケット所有者**  
コピーされたオブジェクトを格納するバケットの正規ユーザー ID。正規ユーザー ID は、別の形式の AWS アカウント ID です。正規ユーザー ID の詳細については、*AWS 全般のリファレンス* の「[AWS アカウント IDID](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html)」を参照してください。アカウントの正規ユーザー ID を検索する方法については、「[AWS アカウントの正規ユーザー ID を検索する](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-identifiers.html#FindCanonicalId)」を参照してください。  
**エントリ例**  

```
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
```

**バケット**  
コピー対象オブジェクトのオブジェクトを格納するバケットの名前。  
**エントリ例**  

```
amzn-s3-demo-bucket1
```

**時間**  
リクエストが受信された時間。これらの日付と時刻は協定世界時 (UTC) です。`strftime()` terminology を使用した形式は次のようになります: `[%d/%B/%Y:%H:%M:%S %z]`  
**エントリ例**  

```
[06/Feb/2019:00:00:38 +0000]
```

**Remote IP**  
リクエスタの表面上の IP アドレス。中間プロキシやファイアウォールにより、リクエストを作成したマシンの実際の IP アドレスが不明確になる場合があります。  
**エントリ例**  

```
192.0.2.3
```

**リクエスタ**  
リクエスタの正規ユーザー ID。認証されていないリクエストの場合は `-` です。リクエスタが IAM ユーザーであった場合、このフィールドは、リクエスタの IAM ユーザー名と IAM ユーザーが属する AWS アカウントのルートユーザーを返します。この識別子は、アクセスコントロールに使用されるものと同じです。  
**エントリ例**  

```
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
```
リクエスタが引き受けたロールを使用している場合、このフィールドは、引き受けた IAM ロールを返します。  
**エントリ例**  

```
arn:aws:sts::123456789012:assumed-role/roleName/test-role
```

**リクエスト ID**  
各リクエストを一意に識別するために Amazon S3 で生成される文字列。**[チェックサムを計算]** ジョブリクエストの場合、**[リクエスト ID]** フィールドには関連するジョブ ID が表示されます。詳細については、「[チェックサムの計算](batch-ops-compute-checksums.md)」を参照してください。  
**エントリ例**  

```
3E57427F33A59F07
```

**オペレーション**  
ここに表示されているオペレーションは、`SOAP.operation`、`REST.HTTP_method.resource_type`、`WEBSITE.HTTP_method.resource_type` または `BATCH.DELETE.OBJECT` と表示されます。  
**エントリ例**  

```
REST.COPY.OBJECT_GET
```

**Key**  
コピー対象オブジェクトのキー (オブジェクト名) 部分。オペレーションがキーパラメータを取らない場合は「`-`」。  
**エントリ例**  

```
/photos/2019/08/puppy.jpg
```

**Request-URI**  
HTTP リクエストメッセージの `Request-URI` の部分。このフィールドには、ユーザー入力からエスケープされていない引用符を含めることができます。  
**エントリ例**  

```
"GET /amzn-s3-demo-bucket1/photos/2019/08/puppy.jpg?x-foo=bar"
```

**HTTP status**  
コピーオペレーションの `GET` 部分の HTTP ステータスの数値。  
**エントリ例**  

```
200
```

**エラーコード**  
コピーオペレーションの `GET` 部分の Amazon S3 [エラーレスポンス](https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html)、またはエラーがない場合は「`-`」。  
**エントリ例**  

```
NoSuchBucket
```

**Bytes Sent**  
送信されたレスポンスのバイト数 (HTTP プロトコルオーバーヘッドを除く)。ゼロの場合は「`-`」。  
**エントリ例**  

```
2662992
```

**Object Size**  
該当するオブジェクトの合計サイズ。  
**エントリ例**  

```
3462992
```

**Total Time**  
サーバーから見た、リクエストの転送中の時間数 (ミリ秒単位)。これは、リクエストが受信されてから、レスポンスの最終バイトが送信されるまでの時間を計測した値です。クライアント側での計測値は、ネットワーク遅延により長くなる場合があります。  
**エントリ例**  

```
70
```

**Turn−Around Time**  
Amazon S3 でリクエストの処理に要した時間数 (ミリ秒単位)。これは、リクエストの最終バイトが受信されてから、レスポンスの先頭バイトが送信されるまでの時間を計測した値です。  
**エントリ例**  

```
10
```

**Referer**  
HTTP `Referer` ヘッダーの値 (存在する場合)。一般に、HTTP ユーザーエージェント (ブラウザなど) は、このヘッダーをリクエスト作成時のリンクページや埋め込みページの URL に設定します。このフィールドには、ユーザー入力からエスケープされていない引用符を含めることができます。  
**エントリ例**  

```
"http://www.example.com/webservices"
```

**User-Agent**  
HTTP `User-Agent` ヘッダーの値 このフィールドには、ユーザー入力からエスケープされていない引用符を含めることができます。  
**エントリ例**  

```
"curl/7.15.1"
```

**Version Id**  
コピー対象オブジェクトのバージョン ID、または `x-amz-copy-source` ヘッダーでコピー元の一部として `versionId` パラメータを指定しなかった場合は「`-`」。  
**エントリ例**  

```
3HL4kqtJvjVBH40Nrjfkd
```

**ホスト ID**  
`x-amz-id-2` または Amazon S3 拡張リクエスト ID。  
**エントリ例**  

```
s9lzHYrFp76ZVxRcpX9+5cjAnEH2ROuNkd2BHfIa6UkFVdtjf5mKR3/eTPFvsiP/XV/VLi31234=
```

**署名バージョン**  
Signature Version、`SigV2` か `SigV4` (リクエストの認証に使用)、または `-` (認証されていないリクエストの場合)。  
**エントリ例**  

```
SigV4
```

**暗号スイート**  
HTTPS リクエストまたは HTTP の `-` に対してネゴシエートされた Transport Layer Security (TLS) 暗号。  
**エントリ例**  

```
ECDHE-RSA-AES128-GCM-SHA256
```

**認証タイプ**  
使用されるリクエスト認証のタイプ。認証ヘッダーは `AuthHeader`、クエリ文字列 (署名付き URL) は `QueryString`、認証されていないリクエストには「`-`」。  
**エントリ例**  

```
AuthHeader
```

**ホストヘッダー**  
Amazon S3 への接続に使用するエンドポイント。  
**エントリ例**  

```
s3.us-west-2.amazonaws.com
```
一部の古いリージョンでは、レガシーエンドポイントがサポートされています。これらのエンドポイントは、サーバーアクセスログまたは AWS CloudTrail ログに表示される場合があります。詳細については、「[レガシーエンドポイント](VirtualHosting.md#s3-legacy-endpoints)」を参照してください。Amazon S3 リージョンとエンドポイントの完全なリストについては、*Amazon Web Services 全般のリファレンス* の「[Amazon S3 エンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/s3.html)」を参照してください。

**TLS のバージョン**  
クライアントによってネゴシエートされた Transport Layer Security (TLS) バージョン。値は `TLSv1.1`、`TLSv1.2`、`TLSv1.3`、`-` のいずれかです (TLS を使用しなかった場合)。  
**エントリ例**  

```
TLSv1.2
```

**アクセスポイント ARN**  
リクエストのアクセスポイントの Amazon リソースネーム (ARN) です。アクセスポイントの ARN の形式が不正、または使用されていない場合、このフィールドには「`-`」が含まれます。アクセスポイントの詳細については、「[汎用バケットでの Amazon S3 アクセスポイントの使用](using-access-points.md)」を参照してください。ARN の詳細については、「*AWS リファレンスガイド*」の「[Amazon リソースネーム (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)」を参照してください。  
**エントリ例**  

```
arn:aws:s3:us-east-1:123456789012:accesspoint/example-AP
```

**aclRequired**  
リクエストの承認のためにアクセスコントロールリスト (ACL) が必要かどうかを示す文字列。リクエストに承認用の ACL が必要な場合、文字列は「`Yes`」です。ACL が必要なかった場合、文字列は「`-`」です。ACL の詳細については、「[アクセスコントロールリスト (ACL) の概要](acl-overview.md)」を参照してください。`aclRequired` フィールドを使用して ACL を無効にする方法の詳細については、[オブジェクトの所有権の制御とバケットの ACL の無効化。](about-object-ownership.md) を参照してください。  
**エントリ例**  

```
Yes
```

**送信元リージョン**  
リクエストの送信元の AWS リージョン。このフィールドには、送信元リージョンを特定できない場合 (PrivateLink 接続、Direct Connect 接続、Bring your own IP addresses (BYOIP)、または非 AWS IP アドレスなど）、またはライフサイクルやチェックサムなど、お客様が設定したポリシーやアクションに基づいてトリガーされたオペレーションによってログが生成された場合、ダッシュ (`-`) が表示されます。  
**エントリ例**  

```
us-east-1
```

## カスタムアクセスログ情報
<a name="LogFormatCustom"></a>

リクエストのアクセスログレコードに保存するカスタム情報を含めることができます。これを行うには、リクエストの URL にカスタムクエリ文字列パラメータを追加します。Amazon S3 では、「`x-`」で始まるクエリ文字列パラメータは無視されますが、これらのパラメータはログレコードの `Request-URI` フィールドの一部として、リクエストのアクセスログレコードに追加されます。

例えば、`GET` の `"s3.amazonaws.com/amzn-s3-demo-bucket1/photos/2019/08/puppy.jpg?x-user=johndoe"` リクエストは、`"s3.amazonaws.com/amzn-s3-demo-bucket1/photos/2019/08/puppy.jpg"` のリクエストと同じように動作します。ただし 、`"x-user=johndoe"` 文字列は関連付けられたログレコードの `Request-URI` フィールドに含まれている点が異なります。この機能は REST インターフェイスでのみ利用できます。

## 拡張可能なサーバーアクセスログの形式のプログラミングに関する考慮事項
<a name="LogFormatExtensible"></a>

場合によっては、新しいフィールドを各行末に追加することで、アクセスログレコードの形式を拡張することがあります。したがって、サーバーアクセスログを解析するコードは、理解できない可能性のある後続フィールドを処理するよう作成する必要があります。

# Amazon S3 ログファイルの削除
<a name="deleting-log-files-lifecycle"></a>

Amazon S3 バケットでサーバーアクセスのログ記録が有効になっていると、時間の経過とともに多数のサーバーログオブジェクトが蓄積される場合があります。アクセスログは、作成後アプリケーションで必要な期間が過ぎたら、削除できます。Amazon S3 のライフサイクル設定でルールを指定しておくことで、このようなオブジェクトのライフサイクルが終了すると、自動的にオブジェクトを削除キューに入れることができます。

共有プレフィックスを使用して、S3 バケット内のオブジェクトのサブセットのライフサイクル設定を定義できます。サーバーアクセスのログ記録設定でプレフィックスを指定した場合は、そのプレフィックスが付いたログオブジェクトを削除するライフサイクル設定ルールを指定できます。

例えば、ログオブジェクトに `logs/` というプレフィックスがあるとします。ライフサイクル設定ルールを指定して、指定した期間後に `logs/` プレフィックスを持つバケット内のすべてのオブジェクトを削除できます。

ライフサイクル設定についての詳細は、[オブジェクトのライフサイクルの管理](object-lifecycle-mgmt.md) を参照してください。

サーバーアクセスログ記録の一般情報については、[サーバーアクセスログによるリクエストのログ記録](ServerLogs.md) を参照してください。

# Amazon S3 アクセスログを使用したリクエストの識別
<a name="using-s3-access-logs-to-identify-requests"></a>

Amazon S3 アクセスログを使用して、Amazon S3 リクエストを識別できます。

**注記**  
Amazon S3 リクエストを識別するには、Amazon S3 アクセスログの代わりに AWS CloudTrail データイベントを使用することをお勧めします。CloudTrail データイベントは、設定が容易で、より多くの情報が含まれています。詳細については、「[CloudTrail を使用した Amazon S3 リクエストの識別](cloudtrail-request-identification.md)」を参照してください。
取得したアクセスリクエスト数に応じて、ログの分析にリソースや時間がさらに必要になる場合があります。

**Topics**
+ [

## Amazon Athena を使用したリクエストのアクセスログのクエリ
](#querying-s3-access-logs-for-requests)
+ [

## Amazon S3 アクセスログを使用した Signature Version 2 リクエストの識別
](#using-s3-access-logs-to-identify-sigv2-requests)
+ [

## Amazon S3 アクセスログを使用したオブジェクトアクセスリクエストの識別
](#using-s3-access-logs-to-identify-objects-access)

## Amazon Athena を使用したリクエストのアクセスログのクエリ
<a name="querying-s3-access-logs-for-requests"></a>

Amazon Athena を使って、Amazon S3 のアクセスログで、Amazon S3 リクエストを識別できます。

Amazon S3 は、サーバーのアクセスログを S3 バケット内のオブジェクトとして保存します。多くの場合、Amazon S3 のログを分析できるツールを使用する方が簡単です。Athena は S3 オブジェクトの分析をサポートしてしるため、Amazon S3 アクセスログに対してクエリを実行するのに使用できます。

**Example**  
次の例は、Amazon Athena で Amazon S3 サーバーアクセスログをクエリする方法を示しています。次の例を実行するには、`user input placeholders` をユーザー自身の情報に置き換えます。  
Athena クエリで Amazon S3 のロケーションを指定するには、ログの送信先となるバケットの S3 URI を指定する必要があります。この URI には、次の形式でバケット名とプレフィックスを含める必要があります。`s3://amzn-s3-demo-bucket1-logs/prefix/`

1. [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) で Athena コンソールを開きます。

1. クエリエディタで、次のようなコマンドを実行します。`s3_access_logs_db` は、データベースにつける名前に置き換えます。

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

1. クエリエディタで次のようなコマンドを実行して、ステップ 2 で作成したデータベースでテーブルスキーマを作成します。`s3_access_logs_db.mybucket_logs` は、テーブルにつける名前に置き換えます。`STRING` および `BIGINT` データ型の値はアクセスログのプロパティです。これらのプロパティは Athena でクエリできます。`LOCATION` の場合は、前述のように S3 バケットとプレフィックスパスを入力します。

------
#### [ Date-based partitioning ]

   ```
   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,
    `accesspointarn` STRING,
    `aclrequired` STRING,
    `sourceregion` STRING)
    PARTITIONED BY (
      `timestamp` 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://bucket-name/prefix-name/account-id/region/source-bucket-name/'
    TBLPROPERTIES (
     'projection.enabled'='true', 
     'projection.timestamp.format'='yyyy/MM/dd', 
     'projection.timestamp.interval'='1', 
     'projection.timestamp.interval.unit'='DAYS', 
     'projection.timestamp.range'='2024/01/01,NOW', 
     'projection.timestamp.type'='date', 
     'storage.location.template'='s3://bucket-name/prefix-name/account-id/region/source-bucket-name/${timestamp}')
   ```

------
#### [ Non-date-based partitioning ]

   ```
   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,
     `accesspointarn` STRING,
     `aclrequired` STRING,
     `sourceregion` 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://amzn-s3-demo-bucket1-logs/prefix/'
   ```

------

1. ナビゲーションペインにある、[**データベース**] で、データベースを選択します。

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

   [**結果**] ペインに、サーバーアクセスログのデータ (`bucketowner`、`bucket`、`requestdatetime` など) が表示されます。これは、Athena テーブルが正常に作成されたことを意味します。これで Amazon S3 サーバーアクセスログのクエリを実行できるようになりました。

**Example − 誰がいつオブジェクトを削除したか (タイムスタンプ、IP アドレス、および IAM ユーザー) を表示する**  

```
SELECT requestdatetime, remoteip, requester, key 
FROM s3_access_logs_db.mybucket_logs 
WHERE key = 'images/picture.jpg' AND operation like '%DELETE%';
```

**Example − IAM ユーザーによって実行されたすべてのオペレーションを表示する**  

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

**Example − 特定の期間にオブジェクトに対して実行されたすべてのオペレーションを表示する**  

```
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');
```

**Example − 特定の期間、特定の IP アドレスに送信されたデータの量を表示する**  

```
SELECT coalesce(SUM(bytessent), 0) AS bytessenttotal
FROM s3_access_logs_db.mybucket_logs
WHERE 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');
```

**Example — 特定の期間内の HTTP 5xx エラーに対応するリクエスト ID を検索する**  

```
SELECT requestdatetime, key, httpstatus, errorcode, requestid, hostid 
FROM s3_access_logs_db.mybucket_logs
WHERE httpstatus like '5%' AND timestamp
BETWEEN '2024/01/29'
AND '2024/01/30'
```

**注記**  
ログを保持する時間を短縮するために、サーバーアクセスログバケットの Amazon S3 ライフサイクル設定を作成できます。ライフサイクル設定ルールを作成して、定期的にログファイルを削除します。これにより、各クエリで Athena が分析するデータの量が減ります。詳細については、「[バケットに S3 ライフサイクル設定を設定する](how-to-set-lifecycle-configuration-intro.md)」を参照してください。

## Amazon S3 アクセスログを使用した Signature Version 2 リクエストの識別
<a name="using-s3-access-logs-to-identify-sigv2-requests"></a>

Signature Version 2 の Amazon S3 サポートがオフになります (非推奨)。その後、Amazon S3 は署名バージョン 2 を使用するリクエストを受け入れず、すべてのリクエストに Signature Version 4 署名を使用する必要があります。Amazon S3 アクセスログを使用して、Signature Version 2 アクセスリクエストを識別できます。

**注記**  
Signature Version 2 リクエストを識別するには、Amazon S3 アクセスログの代わりに AWS CloudTrail データイベントを使用することをお勧めします。CloudTrail データイベントは、サーバーアクセスログと比べ、設定が容易で、より多くの情報が含まれています。詳細については、「[CloudTrail を使用した Amazon S3 Signature Version 2 リクエストの識別](cloudtrail-request-identification.md#cloudtrail-identification-sigv2-requests)」を参照してください。

**Example − 署名バージョン 2 トラフィックを送信しているすべてのリクエスタを表示する**  

```
SELECT requester, sigv, Count(sigv) as sigcount 
FROM s3_access_logs_db.mybucket_logs
GROUP BY requester, sigv;
```

## Amazon S3 アクセスログを使用したオブジェクトアクセスリクエストの識別
<a name="using-s3-access-logs-to-identify-objects-access"></a>

Amazon S3 サーバーアクセスログに対するクエリを使用して、`GET`、`PUT`、`DELETE` などのオペレーションに対する Amazon S3 オブジェクトアクセスリクエストを識別し、それらのリクエストに関する詳細情報を確認することができます。

次の Amazon Athena クエリの例は、サーバーアクセスログから Amazon S3 に対するすべての `PUT` オブジェクトリクエストを取得する方法を示しています。

**Example − 一定期間内に `PUT` オブジェクトリクエストを送信しているすべてのリクエスタを表示する**  

```
SELECT bucket_name, requester, remoteip, key, httpstatus, errorcode, requestdatetime
FROM s3_access_logs_db.mybucket_logs
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` オブジェクトリクエストを取得する方法を示しています。

**Example − 一定期間内に `GET` オブジェクトリクエストを送信しているすべてのリクエスタを表示する**  

```
SELECT bucket_name, requester, remoteip, key, httpstatus, errorcode, requestdatetime
FROM s3_access_logs_db.mybucket_logs
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 バケットへのすべての匿名リクエストをサーバーアクセスログから取得する方法を示しています。

**Example − 特定の期間にバケットにリクエストを行っているすべての匿名リクエスタを表示する**  

```
SELECT bucket_name, 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')
```

次の Amazon Athena のクエリは、承認のためにアクセスコントロールリスト (ACL) が必要な S3 バケットへのすべてのリクエストを特定する方法を示しています。この情報を使用して、これらの ACL 権限を適切なバケットポリシーに移行し、ACL を無効にすることができます。これらのバケットポリシーを作成したら、これらのバケットの ACL を無効にできます。ACL の無効化の詳細については、「[ACL を無効にする前提条件。](object-ownership-migrating-acls-prerequisites.md)」を参照してください。

**Example — 承認に ACL が必要なリクエストをすべて特定する**  

```
SELECT bucket_name, requester, key, operation, aclrequired, requestdatetime
FROM s3_access_logs_db.mybucket_logs
WHERE aclrequired = 'Yes' 
AND parse_datetime(requestdatetime,'dd/MMM/yyyy:HH:mm:ss Z')
BETWEEN parse_datetime('2022-05-10:00:00:00','yyyy-MM-dd:HH:mm:ss')
AND parse_datetime('2022-08-10:00:00:00','yyyy-MM-dd:HH:mm:ss')
```

**注記**  
ニーズに合わせられるように、必要に応じてデータ範囲を変更することができます。
このクエリの例は、セキュリティのモニタリングにも役立つ場合があります。予期しないまたは不正な IP アドレスやリクエスタからの `PutObject` または `GetObject` コールの結果を確認し、バケットへの匿名リクエストを特定できます。
このクエリでは、ログ記録が有効になった時間以降の情報のみ取得されます。
AWS CloudTrail ログを使用している場合は、「[CloudTrail を使用した S3 オブジェクトへのアクセスの識別](cloudtrail-request-identification.md#cloudtrail-identification-object-access)」を参照してください。

# サーバーのアクセスログ記録のトラブルシューティング
<a name="troubleshooting-server-access-logging"></a>

次のトピックは、Amazon S3 でログ記録された問題をトラブルシューティングするのに役立ちます。

**Topics**
+ [

## ログ記録設定時のよくあるエラーメッセージ
](#common-errors)
+ [

## 配信失敗のトラブルシューティング
](#delivery-failures)

## ログ記録設定時のよくあるエラーメッセージ
<a name="common-errors"></a>

AWS Command Line Interface (AWS CLI) と AWS SDK を使用してログ記録を有効にすると、次のようなエラーメッセージが表示されることがよくあります。

エラー: S3 ロケーションをまたがるロギングは許可されていません

送信先バケット (別名**ターゲットバケット) がソースバケットとは別のリージョンに配置されている場合、Cross S3 location logging not allowed エラーが発生します。このエラーを解決するには、アクセスログを受信するように設定された送信先バケットがソースバケットと同じ AWS リージョン の AWS アカウント にあることを確認します。

エラー: ログを記録するバケットの所有者とターゲットバケットの所有者は同じである必要があります

サーバーアクセスのログ記録を有効にしている場合、指定された送信先バケットが別のアカウントに属している場合にこのエラーが発生します。このエラーを解決するには、送信先バケットがソースバケットと同じ AWS アカウント にあることを確認します。

**注記**  
ソースバケットとは別のターゲットバケットを選択することをお勧めします。ソースバケットと送信先バケットが同じ場合、バケットに書き込まれるログに関する追加のログが作成され、ストレージ料金が増大する可能性があります。また、追加のログがあると、探している特定のログを見つけるのが難しくなることがあります。ログを管理しやすくするため、アクセスログは別のバケットに保存することをお勧めします。詳細については、「[ログ配信を有効にするにはどうすればよいですか?](ServerLogs.md#server-access-logging-overview)」を参照してください。

エラー: ログ記録のターゲットバケットが存在しません。

送信先バケットは、設定する前に存在している必要があります。このエラーは、送信先バケットが存在しないか、見つからないことを示しています。バケット名のスペルが正しいことを確認してから、もう一度試してください。

エラー: バケット所有者が強制するバケットにターゲット許可が付与されていません

このエラーは、送信先バケットが S3 オブジェクト所有権のバケット所有者の強制設定を使用していることを示しています。バケット所有者の強制設定は、送信先 (ターゲット) 権限をサポートしていません。詳細については、「[ログ配信許可](enable-server-access-logging.md#grant-log-delivery-permissions-general)」を参照してください。

## 配信失敗のトラブルシューティング
<a name="delivery-failures"></a>

サーバーアクセスのログ記録の問題を回避するには、次のベストプラクティスに従っていることを確認してください。
+ **S3 ログ配信グループに送信先バケットへの書き込みアクセス許可があること** - S3 ログ配信グループは、送信先バケットにサーバーアクセスログを配信します。バケットポリシーまたはバケットアクセスコントロールリスト (ACL) を使用して、送信先バケットへの書き込みアクセスを付与できます。ただし、ACL の代わりにバケットポリシーを使用することをお勧めします。送信先バケットへの書き込みアクセスを許可する方法の詳細については、「[ログ配信許可](enable-server-access-logging.md#grant-log-delivery-permissions-general)」を参照してください。
**注記**  
送信先バケットが、オブジェクト所有権にバケット所有者の強制設定を使用している場合は、次の点に注意します。  
ACL は無効になり、アクセス権限には影響しません。つまり、S3 ログ配信グループへのアクセスを許可すると、バケット ACL を更新できません。代わりに、ログサービスプリンシパルへのアクセスを許可するために、送信先バケットのバケットポリシーを更新する必要があります。
`PutBucketLogging` 設定には、送信先権限を含めることできません。
+ **送信先バケットのバケットポリシーがログへのアクセスを許可していること** – ターゲットバケットのバケットポリシーを確認します。`"Effect": "Deny"` を含むステートメントをバケットポリシーで検索します。次に、`Deny` ステートメントがアクセスログのバケットへの書き込みを妨げていないことを確認します。
+ **S3 オブジェクトロックがターゲットバケットで有効になっていないこと** – ターゲットバケットでオブジェクトロックが有効になっているかを確認します。オブジェクトロックにより、サーバーアクセスログの配信をブロックします。オブジェクトロックが有効になっていない送信先バケットを選択する必要があります。
+ **送信先バケットでデフォルトの暗号化が有効になっている場合、Amazon S3 マネージドキー (SSE-S3) が選択されていること** – Amazon S3 マネージドキー (SSE-S3) でサーバー側の暗号化を使用する場合に限り、送信先バケットでデフォルトのバケット暗号化を使用できます。サーバーアクセスのログ記録の送信先バケットでは、AWS Key Management Service (AWS KMS) キー (SSE-KMS) によるデフォルトのサーバー側の暗号化はサポートされていません。デフォルトの暗号化の有効にする方法の詳細については、「[デフォルトの暗号化の設定](default-bucket-encryption.md)」を参照してください。
+ **ターゲットバケットでリクエスタ支払いが有効になっていないこと** – サーバーアクセスのログ記録でのリクエスタ支払いバケットの使用はサポートされていません。サーバーアクセスログの配信を許可するには、ターゲットバケットのリクエスタ支払いオプションを無効にします。
+ **AWS Organizations のサービスコントロールポリシー (SCP) とリソースコントロールポリシー (RCP) を確認する** - AWS Organizations を使用している場合は、サービスコントロールポリシーとリソースコントロールポリシーをチェックして、Amazon S3 へのアクセスが許可されていることを確認します。これらのポリシーは、影響を受けるアカウントのプリンシパルとリソースに対する最大数のアクセス許可を指定します。`"Effect": "Deny"` を含むステートメントをポリシーで検索し、バケットへのアクセスログの書き込みを `Deny` ステートメントが妨げていないことを確認します。詳細については、「*AWS Organizations IAM ユーザーガイド*」の「[Authorization policies in AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_authorization_policies.html)」を参照してください。
+ **最新のロギング設定の変更が有効になるまで時間がかかること** - サーバーアクセスのログ記録を最初に有効にした場合や、ログの送信先バケットを変更した場合は、すべてが有効になるまでに時間がかかります。すべてのリクエストが正しく記録され、配信されるまでに 1 時間以上かかる場合があります。

  ログ配信の失敗を確認するには、Amazon CloudWatch でリクエストメトリクスを有効にします。ログが数時間以内に配信されない場合は、ログ配信の失敗を示す `4xxErrors` メトリクスを探してください。リクエストメトリクスの有効化の詳細については、「[バケット内のすべてのオブジェクトに対する CloudWatch メトリクス設定を作成する](configure-request-metrics-bucket.md)」を参照してください。