今回の記事は、IAMユーザでS3やCloudFrontのログをS3から取得することができない、というお話です。(AWSのサポートにも確認済み)
IAMユーザには、下記のようにS3のすべてのリソースに対して、読み取りできるポリシーを付与しています。
{ "Statement": [ { "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": "*" } ] }
しかし、実際にS3やCloudFrontのログが出力されているS3バケットから、任意のログファイルをダウンロードしようとすると、
Access Denyになり、ダウンロードすることができません。
(ファイルのリスト取得まではできます)
他のファイルは取得できるのですが、ログファイルが取得できないのは、ファイルオーナーの問題ではないかと思い、調べてみたのですが、ダウンロードできるファイルのオーナーは自分の親アカウントとなっており、ダウンロードできない(ログ)ファイルのオーナーはawsdatafeedsというAWSのシステムユーザー(?)がオーナーになっていました。
ちなみにAWSのサポートからは、下記のような回答をいただきました。
CloudFrontのログなどはAWSシステムアカウントで書き込まれるようになっていまして、現状ご自身がオーナー権限を持っているリソース以外のポリシーを適用することが出来ません。このことにより、IAMユーザーにログファイルを閲覧や削除する権限を渡せるポリシーを追加することは出来ません。
上記より、S3やCloudFrontのログ取得は親アカウントのみでしかできない、
ということになります。
ご注意ください。
ログを取得できると思ってS3のBucket Policyとかまで調べてしまいました。