CloudWatchLogs Kinesis データストリームのサブスクリプションフィルターの使い方

環境
AWS CloudWatch
Kinesis Data Firehose
S3

操作方法
1.Kinesis データストリームのサブスクリプションフィルタを作成する
次のコマンドを使用して送信先 ストリームを作成します。

aws kinesis create-stream --stream-name "RootAccess" --shard-count 1

2.ストリームが [アクティブ] になるまで待ちます (これには 1~2 分かかる可能性があります)。
次の Kinesis データストリーム describe-stream コマンドを使用して、StreamDescription.StreamStatus プロパティをチェックできます。
さらに、後のステップで必要になるため StreamDescription.StreamARN 値を書き留めます。

aws kinesis describe-stream --stream-name "RootAccess"

出力例を次に示します。

 {
    "StreamDescription": {
        "StreamStatus": "ACTIVE",
        "StreamName": "RootAccess",
        "StreamARN": "arn:aws:kinesis:us-east-1:123456789012:stream/RootAccess",
        "Shards": [
            {
                "ShardId": "shardId-000000000000",
                "HashKeyRange": {
                    "EndingHashKey": "34xxx8211455",
                    "StartingHashKey": "0"
                },
                "SequenceNumberRange": {
                    "StartingSequenceNumber":
                    "4xxx81572610"
                }
            }
        ]
    }
}

3.ストリームにデータを置くアクセス許可を CloudWatch Logs に付与する IAM ロールを作成します。
ファイル (~/TrustPolicyForCWL-Kinesis.json など) で信頼ポリシーを作成する必要があります。テキストエディタを使用してこのポリシーを作成します。

{
  "Statement": {
    "Effect": "Allow",
    "Principal": { "Service": "logs.amazonaws.com" },
    "Action": "sts:AssumeRole",
    "Condition": { 
        "StringLike": { "aws:SourceArn": "arn:aws:logs:region:123456789012:*" } 
     }
   }
}

4.create-role コマンドを使用し、信頼ポリシーファイルを指定して IAM ロールを作成します。

aws iam create-role --role-name CWLtoKinesisRole --assume-role-policy-document file://~/TrustPolicyForCWL-Kinesis.json

出力の例

{
    "Role": {
        "AssumeRolePolicyDocument": {
            "Statement": {
                "Action": "sts:AssumeRole",
                "Effect": "Allow",
                "Principal": {
                    "Service": "logs.amazonaws.com"
                },
                "Condition": { 
                    "StringLike": { 
                        "aws:SourceArn": { "arn:aws:logs:region:123456789012:*" }
                    } 
                }
            }
        },
        "RoleId": "AAOIIAH450GAB4HC5F431",
        "CreateDate": "2015-05-29T13:46:29.431Z",
        "RoleName": "CWLtoKinesisRole",
        "Path": "/",
        "Arn": "arn:aws:iam::123456789012:role/CWLtoKinesisRole"
    }
}

5.権限ポリシーを作成し、CloudWatch Logs がアカウントで実行できるアクションを定義します。
ファイル (~/PermissionsForCWL-Kinesis.json など) で権限ポリシーを作成します。

{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "kinesis:PutRecord",
      "Resource": "arn:aws:kinesis:region:123456789012:stream/RootAccess"
    }
  ]
}

6.次の put-role-policy コマンドを使用して、アクセス許可ポリシーをロールに関連付けます。

aws iam put-role-policy  --role-name CWLtoKinesisRole  --policy-name Permissions-Policy-For-CWL  --policy-document file://~/PermissionsForCWL-Kinesis.json

7.ストリームが [アクティブ] 状態になり、IAM ロールを作成したら、CloudWatch Logs サブスクリプションフィルタを作成できます。

aws logs put-subscription-filter \
    --log-group-name "CloudTrail/logs" \
    --filter-name "RootAccess" \
    --filter-pattern "{$.userIdentity.type = Root}" \
    --destination-arn "arn:aws:kinesis:region:123456789012:stream/RootAccess" \
    --role-arn "arn:aws:iam::123456789012:role/CWLtoKinesisRole"

8.サブスクリプションフィルタを設定したら、CloudWatch Logs によりフィルタパターンに一致するすべての受信ログイベントがストリームに転送されます。

aws kinesis get-shard-iterator --stream-name RootAccess --shard-id shardId-000000xxx00 --shard-iterator-type TRIM_HORIZON

 

AWS

Posted by arkgame