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