1
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データをKinesis Data Streams を使用してクロスアカウント共有

Posted at

内容

アカウント内のCloudWatch Logsのデータを別アカウントのKinesis Data Streamsを使用して共有します。下記公式マニュアル中に手順がありますが、文字だけだと分かり辛い箇所があるため、図解化しながらまとめました。下記構成図中のステップ●や●~●などの番号はマニュアル中の手順の番号と同様となります。

スライド1.PNG

手順

まずは下記青枠の箇所を実施します。

スライド2.PNG

送信ストリームの作成・確認

kinesisデータストリームで送信先ストリームを作成します。

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

ストリームがアクティブになるのを待ちます。下記のStreamStatusがActiveになればOKです。

aws kinesis describe-stream --stream-name "RecipientStream"
{
  "StreamDescription": {
    "StreamStatus": "ACTIVE",
    "StreamName": "RecipientStream",
    "StreamARN": "arn:aws:kinesis:us-east-1:999999999999:stream/RecipientStream",
    "Shards": [
      {
        "ShardId": "shardId-000000000000",
        "HashKeyRange": {
          "EndingHashKey": "34028236692093846346337460743176EXAMPLE",
          "StartingHashKey": "0"
        },
        "SequenceNumberRange": {
          "StartingSequenceNumber": "4955113521868881845667950383198145878459135270218EXAMPLE"
        }
      }
    ]
  }
}

CloudWatch Logsに付与するIAMロールの作成

ここからマニュアルだと結構色々書いていますが、IAMロールを作成しているだけです。マニュアル中に「このポリシーの作成にはテキストエディタを使用します。IAM コンソールは使用しないでください。」と記載がありますのでマニュアル通りコマンドで実施していきます。

~/TrustPolicyForCWL.json
{
    "Statement": {
        "Effect": "Allow",
        "Principal": {
            "Service": "logs.amazonaws.com"
        },
        "Condition": {
            "StringLike": {
                "aws:SourceArn": [
                    "arn:aws:logs:region:sourceAccountId:*",
                    "arn:aws:logs:region:recipientAccountId:*"
                ]
            }
        },
        "Action": "sts:AssumeRole"
    }
}

上記のファイル作成後、下記コマンドを実行します。これにより、CWLtoKinesisRoleというIAMロールが作成されます。信頼ポリシーはTrustPolicyForCWL.jsonの内容が設定されます。

aws iam create-role \
--role-name CWLtoKinesisRole \
--assume-role-policy-document file://~/TrustPolicyForCWL.json
~/PermissionsForCWL.json
{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "kinesis:PutRecord",
      "Resource": "arn:aws:kinesis:region:999999999999:stream/RecipientStream"
    }
  ]
}

上記のファイル作成後、下記コマンドを実行します。これにより先ほど作成したIAMロールにPermissionsForCWL.jsonの内容の許可ポリシーが設定されます。

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

IAMロールの作成が完了しました。ここからは下記2つの青枠の箇所を設定していきます。

スライド3.PNG

CloudWatch送信先の作成

CloudWatch Destination(送信先)というコンポーネントを作成します。ここで受信したものをkinesisの送信ストリームに送信します。なおIAMロールは先ほど作成したものを紐づけます。

aws logs put-destination \
    --destination-name "testDestination" \
    --target-arn "arn:aws:kinesis:region:999999999999:stream/RecipientStream" \
    --role-arn "arn:aws:iam::999999999999:role/CWLtoKinesisRole"

リソースポリシーの作成と紐づけ

~/AccessPolicy.json
{
  "Version" : "2012-10-17",
  "Statement" : [
    {
      "Sid" : "",
      "Effect" : "Allow",
      "Principal" : {
        "AWS" : "111111111111"
      },
      "Action" : "logs:PutSubscriptionFilter",
      "Resource" : "arn:aws:logs:region:999999999999:destination:testDestination"
    }
  ]
}

上記のファイル作成後、下記コマンドを実行します。これにより先ほど作成したCloudWatch DestinationにリソースポリシーとしてAccessPolicy.jsonの内容の許可ポリシーが設定されます。

aws logs put-destination-policy \
    --destination-name "testDestination" \
    --access-policy file://~/AccessPolicy.json

ここまでで送信の準備が完了しました。ここから下記青枠の箇所を設定し、ログを送信します。

スライド4.PNG

サブスクリプションフィルターの作成

この操作のみアカウント(111111111111)の方で実施します。
サブスクリプションフィルターの設定で送信元ロググループ、送信先ストリーム名、フィルターパターン、CloudWatch送信先を指定します。フィルターする必要がない場合は--filter-pattern ""を指定します。

aws logs put-subscription-filter \
    --log-group-name "CloudTrail/logs" \
    --filter-name "RecipientStream" \
    --filter-pattern "{$.userIdentity.type = Root}" \
    --destination-arn "arn:aws:logs:region:999999999999:destination:testDestination"

ログイベントを検証

送信ストリーム内にログが転送されていることを確認します。

aws kinesis get-shard-iterator \
      --stream-name RecipientStream \
      --shard-id shardId-000000000000 \
      --shard-iterator-type TRIM_HORIZON

{
    "ShardIterator":
    "AAAAAAAAAAFGU/kLvNggvndHq2UIFOw5PZc6F01s3e3afsSscRM70JSbjIefg2ub07nk1y6CDxYR1UoGHJNP4m4NFUetzfL+wev+e2P4djJg4L9wmXKvQYoE+rMUiFq+p4Cn3IgvqOb5dRA0yybNdRcdzvnC35KQANoHzzahKdRGb9v4scv+3vaq+f+OIK8zM5My8ID+g6rMo7UKWeI4+IWiKEXAMPLE"
}

aws kinesis get-records \
      --limit 10 \
      --shard-iterator
      "AAAAAAAAAAFGU/kLvNggvndHq2UIFOw5PZc6F01s3e3afsSscRM70JSbjIefg2ub07nk1y6CDxYR1UoGHJNP4m4NFUetzfL+wev+e2P4djJg4L9wmXKvQYoE+rMUiFq+p4Cn3IgvqOb5dRA0yybNdRcdzvnC35KQANoHzzahKdRGb9v4scv+3vaq+f+OIK8zM5My8ID+g6rMo7UKWeI4+IWiKEXAMPLE"
      ```
1
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
1
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?