AWSのS3デフォルト暗号化AWS-KMSを選択してCloudWatch Logsからログのエクスポートが出来ない
CloudWatch Logsからログをエクスポートする機会があり、その過程でハマりました。ちょっと自分では情けないですが、備忘録を兼ねて記載します。
ITインフラ作業をやる時に、AWSを使うケースが良くあります。今回も人に頼まれてAWS CloudWatch Logsを自動でエクスポートさせようとした際に、その手前であるCloudWatch Logsから手動でS3にエクスポートできないという事態をやらかしました。(全体作業の途中で詰まった)
(軽く)AWS/CloudWatch Logs/S3とは?
AWSとはAmazon Web Servicesの事で、AmazonがAmazonのECサイトを運用している基盤そのもので、同様のITインフラサービスとして買って利用ができます。
CloudWatch LogsとはAWSの1サービスでAWSで利用するサーバ(EC2という)などサービスログを集約し監視・保存・アクセスがまとめてできるサービスです。
S3とはAWSが提供するAmazon Simple Storage Service (S3)の事で、どこからでも好きな量のデータ保存や取り出しが簡単に出来るストレージサービスです。その中はBucket(バケツ/バケット)
やらかした事
主題の通りですが、僕がこの時点でやりたかった事は「S3にLog保存用のバケツを作る」「セキュリティに配慮して権限設定行う」「CloudWatch Logsから手動エクスポートをしてテスト」この3つだけです。
Could not create export task.
PutObject call on the given bucket failed. Please check if CloudWatch Logs has been granted permission to perform this operation.
え?エクスポートが出来ないって怒られました。
S3の設定を見直す
自分で設定をしたし、先ずはバケットポリシーを疑います。でもAWSのドキュメントからポリシーテンプレートを持ってきたので、そんな間違いはしないと思いたいけど、信用できない...[引用元ドキュメント]。でも大丈夫そうだな。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "logs.ap-northeast-1.amazonaws.com"
},
"Action": "s3:GetBucketAcl",
"Resource": "arn:aws:s3:::<Your Bucket Name>"
},
{
"Effect": "Allow",
"Principal": {
"Service": "logs.ap-northeast-1.amazonaws.com"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::<Your Bucket Name>/logging-test/*",
"Condition": {
"StringEquals": {
"s3:x-amz-acl": "bucket-owner-full-control"
}
}
}
]
}
arnのパスを/logging-test/*を/*にしてもダメ。
挙句にはパブリックアクセスを、一度全部オフも試すとかね(ちゃんとパブリックアクセスは「オン」に戻しましたよ)。焦る、焦る。
原因
ええ、タイトル出オチです。詳しい方は「ドキュメント読め!」って怒ると思います。AWS ユーザーズガイド「引用元」の記載に、
AWS-256 で暗号化された S3 バケットへのエクスポートがサポートされています。SSE-KMS で暗号化された S3 バケットへのエクスポートはサポートされていません。
Oh...。ほぼ反射的にKMSのKeyを利用する頭だったので、迷わずKMSに作成済みのS3用のKeyを設定しておりました。これをAWS-256へ変更。再度CloudWatch Logsのログエクスポートを実施してみる。
成功のポップアップとともに、やっちまった感でした。
最後に
きっと同じ失敗をされた方もいらっしゃると信じて、生暖かい目で見て貰えたら幸いです。何より「ドキュメントはちゃんと読みましょう」が今回も学びでした...。みんなも気を付けてください。
(2020/6/18 追記) この内容、翌日も別件でハマりました。あちこちに潜んでいるんだと思ってます。
この記事が気に入ったらサポートをしてみませんか?