Amazon Simple Storage Service (Amazon S3) でサーバーアクセスログを設定しましたが、Amazon S3 から Amazon S3 の宛先バケットにサーバーアクセスログが配信されません。
簡単な説明
サーバーアクセスログを初めて有効にする場合や、ログの宛先バケットを変更する場合、変更の実装に時間がかかります。Amazon S3 は、ログ記録を有効にしてから最初の 1 時間は、配信リクエストを記録しない場合があります。また、Amazon S3 は、送信先バケットを変更してから最初の 1 時間は、過去の送信先バケットにログを配信する場合があります。
ログ設定を変更した後、少なくとも 1 時間待ってからログを確認してください。詳しくは、「ベストエフォートでのサーバーログ配信」を参照してください。
送信元バケットと宛先バケットが同じ AWS リージョンにあり、同じ AWS アカウントがバケットを所有していることを確認してください。また、宛先バケットでリクエスタ支払いを有効にしている場合は、無効にします。
注: Amazon S3 では、汎用バケットにのみサーバーアクセスログ機能を使用できます。ディレクトリバケットと S3 Express One Zone ディレクトリバケットでは、この機能はサポートされません。
宛先バケットに依然としてログが表示されない場合は、次のトラブルシューティングを実施して問題を解決します。
解決策
ログ配信グループが宛先バケットにアクセスできるかどうかを確認する
Amazon S3 は、ログ配信グループを使用してサーバーアクセスログを送信先バケットに配信します。サーバーアクセスログを受信するには、ログ記録のサービスプリンシパルに宛先バケットへのアクセス許可を付与する必要があります。
宛先バケットへのアクセスを許可するには、S3 バケットポリシーを作成します。アクセス制御リスト (ACL) を使用すると、宛先バケットへのアクセスを許可できます。ただし、各オブジェクトのアクセスを個別に制御する必要がある場合にのみ ACL を使用することをおすすめします。ACL を使用する必要がある場合は、[オブジェクト所有権] を [バケット所有者強制] に設定しないよう注意してください。
バケットポリシー経由でアクセス権を付与する
バケットポリシーを更新し、ログ記録のサービスプリンシパルに s3:PutObject アクセス許可を付与します。
ポリシーの例
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "S3ServerAccessLogsPolicy",
"Effect": "Allow",
"Principal": {
"Service": "logging.s3.amazonaws.com"
},
"Action": [
"s3:PutObject"
],
"Resource": "arn:aws:s3:::DOC-EXAMPLE-DESTINATION-BUCKET/EXAMPLE-LOGGING-PREFIX*",
"Condition": {
"ArnLike": {
"aws:SourceArn": "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET"
},
"StringEquals": {
"aws:SourceAccount": "SOURCE-ACCOUNT-ID"
}
}
}
]
}
バケット ACL によるアクセス許可
S3 ログ配信グループに書き込みアクセス許可を付与する付与エントリをバケット ACL に追加します。
宛先バケットの ACL を変更するには、次の手順を実行します。
- Amazon S3 コンソールを開きます。
- ナビゲーションペインで [バケット] を選択し、宛先の汎用バケットを選択します。
- [アクセス許可] タブを選択します。
- [アクセス制御リスト (ACL)] セクションで [編集] を選択します。
- [S3 ログ配信グループ] で [Objects - Write] および [Bucket ACL - Write] を選択します。
- [変更を保存] を選択します。
宛先バケットのポリシーがログへのアクセスを拒否していないことを確認する
宛先バケットのポリシーで "Effect": "Deny" を含むステートメントを検索します。ポリシーに Deny ステートメントが含まれている場合は、その Deny ステートメントがバケットへの書き込みアクセスを妨げていないことを確認します。
注: サーバーアクセスログには、別のバケットを使用することをおすすめします。バケットはデフォルトでプライベートとなるため、バケットへの不正アクセスを防ぐためにバケットポリシーで Deny ステートメントを使用する必要はありません。
宛先バケットで Amazon S3 Object Lock が無効であることを確認する
宛先バケットでは Object Lock が無効である必要があります。Object Lock が有効な場合、Amazon S3 はサーバーアクセスログを配信できません。
暗号化キーには SSE-S3 を選択したことを確認します。
宛先バケットでデフォルトの暗号化を使用する場合は、暗号化に Amazon S3 マネージドキー (SSE-S3) によるサーバー側の暗号化を選択していることを確認します。サーバーログの配信は、AWS Key Management Service (AWS KMS) キーによるサーバー側の暗号化をサポートしていません。デフォルトの暗号化を設定する方法については、「デフォルトの暗号化を設定する」を参照してください。
関連情報
Amazon S3 サーバーのアクセスログを有効にする