環境
AWS CloudWatch
Kinesis Data Firehose
S3
操作方法
1.Kinesis データストリームのサブスクリプションフィルタを作成する
次のコマンドを使用して送信先 ストリームを作成します。
aws kinesis create-stream --stream-name "RootAccess" --shard-count 1
aws kinesis create-stream --stream-name "RootAccess" --shard-count 1
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"
aws kinesis describe-stream --stream-name "RootAccess"
aws kinesis describe-stream --stream-name "RootAccess"
出力例を次に示します。
"StreamStatus": "ACTIVE",
"StreamName": "RootAccess",
"StreamARN": "arn:aws:kinesis:us-east-1:123456789012:stream/RootAccess",
"ShardId": "shardId-000000000000",
"EndingHashKey": "34xxx8211455",
"StartingSequenceNumber":
{
"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"
}
}
]
}
}
{
"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 など) で信頼ポリシーを作成する必要があります。テキストエディタを使用してこのポリシーを作成します。
"Principal": { "Service": "logs.amazonaws.com" },
"Action": "sts:AssumeRole",
"StringLike": { "aws:SourceArn": "arn:aws:logs:region:123456789012:*" }
{
"Statement": {
"Effect": "Allow",
"Principal": { "Service": "logs.amazonaws.com" },
"Action": "sts:AssumeRole",
"Condition": {
"StringLike": { "aws:SourceArn": "arn:aws:logs:region:123456789012:*" }
}
}
}
{
"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
aws iam create-role --role-name CWLtoKinesisRole --assume-role-policy-document file://~/TrustPolicyForCWL-Kinesis.json
aws iam create-role --role-name CWLtoKinesisRole --assume-role-policy-document file://~/TrustPolicyForCWL-Kinesis.json
出力の例
"AssumeRolePolicyDocument": {
"Action": "sts:AssumeRole",
"Service": "logs.amazonaws.com"
"aws:SourceArn": { "arn:aws:logs:region:123456789012:*" }
"RoleId": "AAOIIAH450GAB4HC5F431",
"CreateDate": "2015-05-29T13:46:29.431Z",
"RoleName": "CWLtoKinesisRole",
"Arn": "arn:aws:iam::123456789012:role/CWLtoKinesisRole"
{
"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"
}
}
{
"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 など) で権限ポリシーを作成します。
"Action": "kinesis:PutRecord",
"Resource": "arn:aws:kinesis:region:123456789012:stream/RootAccess"
{
"Statement": [
{
"Effect": "Allow",
"Action": "kinesis:PutRecord",
"Resource": "arn:aws:kinesis:region:123456789012:stream/RootAccess"
}
]
}
{
"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
aws iam put-role-policy --role-name CWLtoKinesisRole --policy-name Permissions-Policy-For-CWL --policy-document file://~/PermissionsForCWL-Kinesis.json
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"
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"
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 kinesis get-shard-iterator --stream-name RootAccess --shard-id shardId-000000xxx00 --shard-iterator-type TRIM_HORIZON
aws kinesis get-shard-iterator --stream-name RootAccess --shard-id shardId-000000xxx00 --shard-iterator-type TRIM_HORIZON