複数アカウントにわたる CloudWatch Logs を Amazon Data Firehose にプッシュする方法を教えてください。

所要時間4分
0

Amazon CloudWatch Logs を、Amazon Data Firehose から、他の AWS リージョンにある別のアカウントにストリーミングしたいと考えています。

解決策

CloudWatch ログを別のリージョンの Firehose ストリームに送信するには、そのリージョンが Firehose をサポートしている必要があります。

上記のコマンドでは、次の値を実際の値に置き換えてください。

  • 111111111111 は、宛先アカウントの ID に置き換えます
  • us-east-1 は、実際の Firehose リージョンに置き換えます
  • us-west-2 は、お使いの Amazon Simple Storage Service (Amazon S3) バケットのリージョンに置き換えます
  • us-east-2 は、宛先アカウントのリージョンに置き換えます
  • 222222222222 は、ソースアカウントの IDに置き換えます
  • us-east2 は、CloudWatch ロググループのリージョンに置き換えます
  • **us-east-2 ** は、お使いの Amazon Virtual Private Cloud (Amazon VPC) フローログのリージョンに置き換えます
  • -arn は、リソースの ARN に置き換えます

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

宛先アカウントを設定する

次の手順を実行します。

  1. Amazon S3 バケットを作成します。

    aws s3api create-bucket --bucket my-bucket --create-bucket-configuration LocationConstraint=us-west-2 --region us-west-2

    注: 後のステップで使用できるように、出力からバケットの ARN を書き留めておきます。

  2. Firehose が Amazon S3 にデータをプッシュするために必要なアクセス許可を持つ、信頼ポリシーを作成します。

    {
      "Statement": {
        "Effect": "Allow",
        "Principal": {
          "Service": "firehose.amazonaws.com"
        },
        "Action": "sts:AssumeRole",
        "Condition": {
          "StringEquals": {
            "sts:ExternalId": "111111111111"
          }
        }
      }
    }
  3. create-role コマンドを実行し、IAM ロールを作成して信頼ポリシーファイルを指定します。

    aws iam create-role \
        --role-name FirehosetoS3Role \
        --assume-role-policy-document file://~/TrustPolicyForFirehose.json

    注: 後のステップで使用できるように、出力からロールの ARN を書き留めておきます。

  4. Firehose が宛先アカウントで実行できるアクションを定義するために、JSON エディタを使用してアクセス許可ポリシーを作成します。

    {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "s3:AbortMultipartUpload",
              "s3:GetBucketLocation",
              "s3:GetObject",
              "s3:ListBucket",
              "s3:ListBucketMultipartUploads",
              "s3:PutObject"
            ],
            "Resource": [
              "arn:aws:s3:::my-bucket",
              "arn:aws:s3:::my-bucket/*"
            ]
          }
        ]
      }
  5. put-role-policy コマンドを実行し、アクセス許可ポリシーを IAM ロールに関連付けます。

    aws iam put-role-policy --role-name FirehosetoS3Role --policy-name Permissions-Policy-For-Firehose --policy-document file://~/PermissionsForFirehose.json
  6. Firehose の宛先配信ストリームを作成します。

    aws firehose create-delivery-stream --delivery-stream-name my-delivery-stream --s3-destination-configuration RoleARN='arn:aws:iam::111111111111:role/FirehosetoS3Role',BucketARN='arn:aws:s3:::my-bucket' --region us-east-1

    注: RoleARNBucketARN は、お使いのロールとバケットの ARN で置き換えます。
    S3 オブジェクトを Firehose に配信するときに、タイプスタンプ名前空間の式ではカスタムプレフィックスを使用します。時間形式の先頭に、追加のプレフィックス (yyyy/MM/dd/HH/) を指定できます。プレフィックスがフォワードスラッシュ (/) で終わる場合は、S3 バケットのフォルダとして表示されます。

  7. DeliveryStreamDescription.DeliveryStreamStatus プロパティを確認するために、describe-delivery-stream コマンドを実行します。

    aws firehose describe-delivery-stream --delivery-stream-name "my-delivery-stream" --region us-east-1

    ストリームがアクティブであることを確認するために、コマンドの出力を確認します。

    {
      "DeliveryStreamDescription": {
        "DeliveryStreamType": "DirectPut",
        "HasMoreDestinations": false,
        "DeliveryStreamEncryptionConfiguration": {
          "Status": "DISABLED"
        },
        "VersionId": "1",
        "CreateTimestamp": 1604484348.804,
        "DeliveryStreamARN": "arn:aws:firehose:us-east-1:111111111111:deliverystream/my-delivery-stream",
        "DeliveryStreamStatus": "ACTIVE",
        "DeliveryStreamName": "my-delivery-stream",
        "Destinations": [
          {
            "DestinationId": "destinationId-000000000001",
            "ExtendedS3DestinationDescription": {
              "RoleARN": "arn:aws:iam::111111111111:role/FirehosetoS3Role2test",
              "BufferingHints": {
                "IntervalInSeconds": 300,
                "SizeInMBs": 5
              },
              "EncryptionConfiguration": {
                "NoEncryptionConfig": "NoEncryption"
              },
              "CompressionFormat": "UNCOMPRESSED",
              "S3BackupMode": "Disabled",
              "CloudWatchLoggingOptions": {
                "Enabled": false
              },
              "BucketARN": "arn:aws:s3:::my-bucket"
            },
            "S3DestinationDescription": {
              "RoleARN": "arn:aws:iam::111111111111:role/FirehosetoS3Role2test",
              "BufferingHints": {
                "IntervalInSeconds": 300,
                "SizeInMBs": 5
              },
              "EncryptionConfiguration": {
                "NoEncryptionConfig": "NoEncryption"
              },
              "CompressionFormat": "UNCOMPRESSED",
              "CloudWatchLoggingOptions": {
                "Enabled": false
              },
              "BucketARN": "arn:aws:s3:::my-bucket"
            }
          }
        ]
      }
    }

    注: 後のステップで使用するために、ストリームの ARN を書き留めておきます。

  8. 追加の信頼ポリシーを作成して、Firehose ストリームにデータを入力するアクセス許可を CloudWatch Logs に付与します。ログをプッシュするリージョンを追加します。

    {
      "Version": "2012-10-17",
      "Statement": {
        "Effect": "Allow",
        "Principal": {
          "Service": "logs.us-east-2.amazonaws.com"
        },
        "Action": "sts:AssumeRole",
        "Condition": {
          "StringLike": {
            "aws:SourceArn": [
              "arn:aws:logs:us-east-2:sourceAccountId:*",
              "arn:aws:logs:us-east-2:recipientAccountId:*"
            ]
          }
        }
      }
    }
  9. Firehose ストリームにデータを入力し、信頼ポリシーファイルを指定するための追加の IAM ロールを作成するには、create-role コマンドを実行します。

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

    注: 後のステップで使用するために、ロールの ARN を書き留めておきます。

  10. アクセス許可ポリシーを作成し、CloudWatch ログが宛先アカウントで実行できるアクションを定義します。ストリームの ARN とロールの ARN を含めてください。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "firehose:ListDeliveryStreams",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "firehose:DescribeDeliveryStream",
                "firehose:PutRecord",
                "firehose:PutRecordBatch"
            ],
            "Resource": "arn:aws:firehose:us-east-1:111111111111:deliverystream/my-delivery-stream"
        }
    ]
}
  1. アクセス許可ポリシーをロールに関連付けるために、put-role-policy コマンドを実行します。
aws iam put-role-policy --role-name CWLtoKinesisFirehoseRole --policy-name Permissions-Policy-For-CWL --policy-document file://~/PermissionsForCWL.json
  1. 送信元アカウントの宛先アカウントにログの送信先を作成するには、put-destination コマンドを実行します。
aws logs put-destination --destination-name "myDestination" --target-arn "arn:aws:firehose:us-east-1:111111111111:deliverystream/my-delivery-stream" --role-arn "arn:aws:iam::111111111111:role/CWLtoKinesisFirehoseRole" --region us-east-2

注: Firehose がサポートされている任意のリージョンに、配信ストリームの宛先を作成できます。宛先を作成するリージョンは、ログソースリージョンと同じである必要があります。 CloudWatch の宛先用のアクセスポリシーを作成します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": "222222222222"
      },
      "Action": "logs:PutSubscriptionFilter",
      "Resource": "arn:aws:logs:us-east-2:111111111111:destination:myDestination"
    }
  ]
}
  1. アクセスポリシーを CloudWatch の宛先に関連付けます。
aws logs put-destination-policy --destination-name "myDestination" --access-policy file://~/AccessPolicy.json --region us-east-2
  1. 宛先を検証するには、describe-destination コマンドを実行します。
aws logs describe-destinations --region us-east-2

ソースアカウントを設定する

注: ソースアカウントを設定するには、アカウントの IAM 管理者ユーザーまたは root ユーザーである必要があります。

次の手順を実行します。

  1. Amazon VPC フローログに、CloudWatch ロググループにデータを送信するためのアクセス許可を付与する信頼ポリシーを作成します。

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "",
          "Effect": "Allow",
          "Principal": {
            "Service": "vpc-flow-logs.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
  2. create-role コマンドを実行し、信頼ポリシーを指定します。

    aws iam create-role \
        --role-name PublishFlowLogs \
           --assume-role-policy-document file://~/TrustPolicyForVPCFlowLogs.json

    注: 後のステップで使用できるように、出力からロールの ARN を書き留めておきます。

  3. VPC Flow ログがソースアカウントで実行できるアクションを定義するには、アクセス許可ポリシーを作成します。

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Action": [
            "logs:CreateLogGroup",
            "logs:CreateLogStream",
            "logs:PutLogEvents",
            "logs:DescribeLogGroups",
            "logs:DescribeLogStreams"
          ],
          "Effect": "Allow",
          "Resource": "*"
        }
      ]
    }
  4. アクセス許可ポリシーをロールに関連付けるには、put-role-policy コマンドを実行します。

    aws iam put-role-policy --role-name PublishFlowLogs --policy-name Permissions-Policy-For-VPCFlowLogs --policy-document file://~/PermissionsForVPCFlowLogs.json
  5. フローログの宛先を設定するには、create-log-group コマンドを実行して CloudWatch ロググループを作成します。

    aws logs create-log-group --log-group-name vpc-flow-logs --region us-east-2
  6. VPC フローログを有効にするには、create-flow-logs コマンドを実行します。

    aws ec2 create-flow-logs --resource-type VPC --resource-ids vpc-12345678 --traffic-type ALL --log-group-name vpc-flow-logs --deliver-logs-permission-arn arn:aws:iam::222222222222:role/PublishFlowLogs --region us-east-2
  7. 宛先アカウントの Firehose に CloudWatch ロググループをサブスクライブさせるには、put-subscription-filter コマンドを実行します。

    aws logs put-subscription-filter --log-group-name "vpc-flow-logs" --filter-name "AllTraffic" --filter-pattern "" --destination-arn "arn:aws:logs:us-east-2:111111111111:destination:myDestination" --region us-east-2

    ログが発行されたことを確認するには、S3 バケットで新しいログを確認します。

関連情報

配信ストリームの説明

AWS公式
AWS公式更新しました 7ヶ月前
コメントはありません

関連するコンテンツ