0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CloudWatch LogsのログをS3へ保存する

Posted at

概要

WAFなどのログをCloudWatch Logsに転送しているが、S3に保存した方が安いため、1ヵ月経ったらS3へ保存するようにしたい

大まかな流れ

①対象のロググループの失効を1ヵ月にする
②CloudWatch LogsのデータをS3へ保存するためのロールを用意
③CloudWatch Logsのデータを受け入れるためのバケットポリシーを記述
④EventBridgeで転送するように設定

手順

①対象のロググループの失効を1ヵ月にする
ロググループを作成する際、以下のように設定(既にある場合は対象を選択し、画面右上アクション⇒保持設定を編集から設定変更可能)

スクリーンショット1.png

②CloudWatch LogsのデータをS3へ保存するためのロールを用意

まずはポリシーを作成する
サービス:CloudWatch Logs
アクション許可:
・CreateExportTask
・DescribeLogStreams
・DescribeExportTasks
・DescribeLogGroups
・CancelExportTask

⇒検索窓でそれぞれ検索して選択

image.png

リソースの特定より、「リージョン」、「Resource log group name」をそれぞれ入力し追加

image.png

名前を付けて保存

image.png

続いてロールの作成
カスタム信頼ポリシーにてEventBridgeを許可

image.png

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "scheduler.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

先ほど作ったポリシーを追加し、名前を付けて保存

image.png

③CloudWatch Logsのデータを受け入れるためのバケットポリシーを記述
転送先のS3のバケットポリシーに以下を記述

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "logs.ap-northeast-1.amazonaws.com"
            },
            "Action": "s3:GetBucketAcl",
            "Resource": "arn:aws:s3:::<対象ロググループ名>",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "<自身のアカウントID>"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:logs:*:<自身のアカウントID>:log-group:*"
                }
            }
        },
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "logs.ap-northeast-1.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::<対象ロググループ名>/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control",
                    "aws:SourceAccount": "<自身のアカウントID>"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:logs:*:<自身のアカウントID>:log-group:*"
                }
            }
        }
    ]
}

<>で囲っている部分は環境によって読み替えて下さい。

④EventBridgeで転送するように設定
スケジュールを作成から、名前を決めて以下のようにCronを設定する
image.png

日付の部分を「L」とすることで毎月の月末に動作するようになる

APIは「CloudWatch Logs」の「CreateExportTask」を選択し、入力値として以下を記述

{
  "Destination": "<対象の転送先バケット名>",
  "DestinationPrefix": "<aws.scheduler.scheduled-time>",
  "From": 1736262000,
  "LogGroupName": "<対象ロググループ名>",
  "To": 4892022000
}

FromとtoはUnix時間で記載する
Unixで変換するサイトがあるため調べて、いつからいつまで動かしたいか決めてUnix時間で記載
他の設定値はデフォルトで、アタッチするロールのみ手順内で作成したロールを選択する
スケジュールを保存で設定完了

動きだけ見たい場合は、Cronの日付を作業している時間の5分後などに設定して動作確認するとよい

以上!!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?