CloudWatch Logs へのフローログの発行 - Amazon Virtual Private Cloud

CloudWatch Logs へのフローログの発行

フローログはフローログデータを直接 Amazon CloudWatch に発行できます。

フローログデータは、CloudWatch Logs に対して発行するときはロググループに発行され、各ネットワークインターフェイスにはロググループに一意のログストリームがあります。ログストリームにはフローログレコードが含まれます。同じロググループにデータを公開する複数のフローログを作成できます。同じネットワークインターフェイスが同じロググループの 1 つ以上のフローログに存在する場合、1 つの組み合わされたログストリームがあります。1 つのフローログで、拒否されたトラフィックをキャプチャし、別のフローログで、許可されたトラフィックをキャプチャするよう指定した場合、組み合わされたログストリームですべてのトラフィックがキャプチャされます。

CloudWatch Logs では、[timestamp] フィールドはフローログレコードでキャプチャされた開始時刻に対応します。[ingestionTime] フィールドは、CloudWatch Logs によってフローログレコードが受信された日時を示します。このタイムスタンプは、フローログレコードでキャプチャされた終了時刻より後です。

CloudWatch Logs の詳細については、「Amazon CloudWatch Logs ユーザーガイド」「CloudWatch Logs に送信されたログ」を参照してください。

料金

フローログを CloudWatch Logs に発行すると、提供されたログに対するデータの取り込み料金とアーカイブ料金が適用されます。詳細については、「Amazon CloudWatch 料金表」を開き、[Logs] (ログ) を選択して [Vended Logs] (提供されたログ) を参照してください。

CloudWatch Logs へのフローログ発行のための IAM ロール

フローログに関連付けられた IAM ロールには、CloudWatch Logs の指定されたロググループにフローログを発行するために十分なアクセス許可が必要です。IAM ロールは AWS アカウントに属している必要があります。

IAM ロールにアタッチされた IAM ポリシーには、少なくとも以下のアクセス許可が含まれている必要があります。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogGroups", "logs:DescribeLogStreams" ], "Resource": "*" } ] }

ロールに以下の信頼ポリシーがあることを確認します。これにより、フローログサービスがロールを引き受けることができます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "vpc-flow-logs.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

Confused Deputy Problem (混乱した使節の問題) から自分を守るために、aws:SourceAccount および aws:SourceArn の条件キーを使用することをお勧めします。例えば、前述の信頼ポリシーに次の条件ブロックを追加できます。ソースアカウントはフローログの所有者であり、ソース ARN はフローログ ARN です。フローログ ID が不明な場合は、ARN の不明部分をワイルドカード (*) に置き換え、フローログ作成後にポリシーを更新できます。

"Condition": { "StringEquals": { "aws:SourceAccount": "account_id" }, "ArnLike": { "aws:SourceArn": "arn:aws:ec2:region:account_id:vpc-flow-log/flow-log-id" } }

フローログの IAM ロールの作成

前述のように既存のロールを更新できます。また、以下の手順を使用してフローログで使用する新しいロールを作成することもできます。このロールは、フローログの作成時に指定します。

フローログの IAM ロールを作成するには

  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションペインで、[ポリシー] を選択します。

  3. [ポリシーの作成] を選択します。

  4. [ポリシーの作成] ページで、次の操作を行います。

    1. [JSON] を選択します。

    2. このウィンドウのコンテンツを、このセクションの冒頭にあるアクセス許可ポリシーに置き換えてください。

    3. [Next: Tags] (次へ: タグ)、[Next: Review] (次へ: 確認) の順に選択します。

    4. ポリシーの名前と説明 (省略可能) を入力し、[Create policy] (ポリシーの作成) を選択します。

  5. ナビゲーションペインで [Roles (ロール) ] を選択します。

  6. [Create role] を選択します。

  7. [Trusted entity type] (信頼されたエンティティのタイプ) で、[Custom trust policy] (カスタム信頼ポリシー) を選択します。[Custom trust policy] (カスタム信頼ポリシー) で、"Principal": {}, を次のように置き換え、[Next] (次へ) を選択します。

    "Principal": { "Service": "vpc-flow-logs.amazonaws.com" },
  8. [Add permissions] (アクセス許可の追加) ページで、この手順で先ほど作成したポリシーの横にあるチェックボックスを選択し、[Next] (次へ) を選択します。

  9. ロールの名前を入力し、オプションで説明を入力します。

  10. [ロールの作成] を選択します。

CloudWatch Logs にフローログを発行する IAM プリンシパルのアクセス許可

フローログに関連付けられた IAM ロール用に iam:PassRole アクションを使用するアクセス許可がユーザーに必要です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["iam:PassRole"], "Resource": "arn:aws:iam::account-id:role/flow-log-role-name" } ] }

CloudWatch Logs に発行するフローログの作成

VPCs、サブネット、またはネットワークインターフェイスのフローログを作成できます。これらのステップを IAM ユーザーとして実行する場合は、iam:PassRole アクションを使用するアクセス許可があることを確認してください。詳細については、「CloudWatch Logs にフローログを発行する IAM プリンシパルのアクセス許可」を参照してください。

前提条件

  • 送信先ロググループを作成します。CloudWatch コンソールで [Log groups] (ロググループ) のページを開き、[Create log group] (ロググループの作成) を選択します。ロググループの名前を入力し、[Create] (作成) を選択します。

  • CloudWatch Logs へのフローログ発行のための IAM ロール」の説明に従って IAM ロールを作成します。

コンソールを使用してフローログを作成するには

  1. 次のいずれかを実行します。

    • Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。ナビゲーションペインで、[Network Interfaces] を選択します。ネットワークインターフェイスのチェックボックスをオンにします。

    • Amazon VPC コンソール (https://console.aws.amazon.com/vpc/) を開きます。画面左枠のナビゲーションペインで、[Your VPCs] を選択します。VPC のチェックボックスをオンにします。

    • Amazon VPC コンソール (https://console.aws.amazon.com/vpc/) を開きます。ナビゲーションペインで、[Subnets] (サブネット) を選択します。サブネットのチェックボックスをオンにします。

  2. [Actions]、[Create flow log] を選択します。

  3. [Filter] (フィルター) で、ログに記録するトラフィックの種類を指定します。承認および拒否されたトラフィックを記録するには [All] (すべて)、拒否されたトラフィックだけをログ記録するには [Reject] (拒否)、承認されたトラフィックだけをログ記録するには [Accept] (承認) を選択します。

  4. [Maximum aggregation interval] で、フローがキャプチャされ、1 つのフローログレコードに集約される最大期間を選択します。

  5. [送信先] で、[Send to CloudWatch Logs (CloudWatch ログへの送信)] を選択します。

  6. [Destination log group] (送信先ロググループ) で、作成した送信先ロググループの名前を選択します。

  7. [IAM ロール] で、ログを CloudWatch Logs に発行できるアクセス許可があるロールの名前を指定します。

  8. [Log record format] (ログレコードの形式) で、フローログレコードの形式を選択します。

    • デフォルトの形式を使用するには、[AWS default format] (AWS のデフォルト形式) を選択します。

    • カスタム形式を使用するには、[Custom format] (カスタム形式) を選択し、[Log format] (ログ形式) からフィールドを選択します。

  9. (オプション) フローログにタグを適用するには、[Add new tag] (新規タグを追加) を選択します。

  10. [フローログの作成] を選択します。

コマンドラインを使用してフローログを作成するには

以下のいずれかのコマンドを使用します。

次の AWS CLI の例では、指定したサブネットの許可されたすべてのトラフィックをキャプチャするフローログが作成されます。フローログは、指定されたロググループに配信されます。--deliver-logs-permission-arn パラメータは、CloudWatch Logs への発行に必要な IAM ロールを指定します。

aws ec2 create-flow-logs --resource-type Subnet --resource-ids subnet-1a2b3c4d --traffic-type ACCEPT --log-group-name my-flow-logs --deliver-logs-permission-arn arn:aws:iam::123456789101:role/publishFlowLogs

フローログレコードを表示する

CloudWatch Logs コンソールを使用して、フローログレコードを表示できます。フローログを作成してからコンソールに表示されるまでに、数分かかる場合があります。

コンソールを使用して CloudWatch Logs に対して発行されたフローログレコードを表示するには

  1. CloudWatch コンソール (https://console.aws.amazon.com/cloudwatch/) を開きます。

  2. ナビゲーションペインで、[Logs (ログ)]、[Log groups (ロググループ)] の順に選択します。

  3. フローログを含むロググループの名前を選択して、その詳細ページを開きます。

  4. フローログレコードを含むログストリームの名前を選択します。詳細については、「フローログレコード」を参照してください。

コマンドラインを使用して CloudWatch Logs に対して発行されたフローログレコードを表示するには

フローログレコードの検索

CloudWatch Logs コンソールを使用して、CloudWatch Logs に発行されたフローログレコードを検索できます。メトリクスフィルタを使用すると、フローログレコードをフィルタリングできます。フローログレコードはスペースで区切られます。

CloudWatch Logs コンソールを使用してフローログレコードを検索するには

  1. CloudWatch コンソール (https://console.aws.amazon.com/cloudwatch/) を開きます。

  2. ナビゲーションペインで、[Logs (ログ)]、[Log groups (ロググループ)] の順に選択します。

  3. フローログを含むロググループを選択し、検索するネットワークインターフェイスが分かっている場合は、ログストリームを選択します。または、[Search log group] (ロググループの検索) を選択します。ロググループに多数のネットワークインターフェイスがある場合、または選択した時間範囲によっては、この処理に時間がかかる場合があります。

  4. [イベントをフィルター] で、次の文字列を入力します。これは、フローログレコードで デフォルトの形式が使用されていることを前提としています。

    [version, accountid, interfaceid, srcaddr, dstaddr, srcport, dstport, protocol, packets, bytes, start, end, action, logstatus]
  5. 必要に応じてフィールドの値を指定して、フィルタを変更します。次の例では、特定の送信元 IP アドレスでフィルタリングします。

    [version, accountid, interfaceid, srcaddr = 10.0.0.1, dstaddr, srcport, dstport, protocol, packets, bytes, start, end, action, logstatus] [version, accountid, interfaceid, srcaddr = 10.0.2.*, dstaddr, srcport, dstport, protocol, packets, bytes, start, end, action, logstatus]

    次の例では、送信先ポート、バイト数、およびトラフィックが拒否されたかどうかでフィルタリングします。

    [version, accountid, interfaceid, srcaddr, dstaddr, srcport, dstport = 80 || dstport = 8080, protocol, packets, bytes, start, end, action, logstatus] [version, accountid, interfaceid, srcaddr, dstaddr, srcport, dstport = 80 || dstport = 8080, protocol, packets, bytes >= 400, start, end, action = REJECT, logstatus]

CloudWatch Logs でのフローログレコードの処理

CloudWatch Logs で収集された他のログイベントのように、フローログレコードを操作できます。ログデータとメトリクスフィルタのモニタリングの詳細については、Amazon CloudWatch ユーザーガイドの「ログデータの検索およびフィルタリング」を参照してください。

例: フローログの CloudWatch メトリクスフィルタとアラームの作成

この例では、eni-1a2b3c4d のフローログがあります。1 時間以内の期間に TCP ポート 22 (SSH) 経由でインスタンスに接続しようとする試みが 10 個以上拒否された場合に、アラームを作成するとします。最初に、アラームを作成するトラフィックのパターンと一致するメトリクスフィルタを作成する必要があります。次に、メトリクスフィルタのアラームを作成できます。

拒否された SSH トラフィックのメトリクスフィルタを作成し、フィルタのアラームを作成するには

  1. CloudWatch コンソール (https://console.aws.amazon.com/cloudwatch/) を開きます。

  2. ナビゲーションペインで、[Logs (ログ)]、[Log groups (ロググループ)] の順に選択します。

  3. ロググループのチェックボックスをオンにしてから、[Actions」、[Create metric filter] を選択します。

  4. [Filter pattern] (フィルターパターン) で、次の文字列を入力します。

    [version, account, eni, source, destination, srcport, destport="22", protocol="6", packets, bytes, windowstart, windowend, action="REJECT", flowlogstatus]
  5. [テストするログデータの選択] で、ネットワークインターフェイスのログストリームを選択します。(オプション) フィルタパターンと一致するログデータの行を表示するには、[テストパターン] を選択します。

  6. 準備ができたら、[次へ] を選択します。

  7. フィルター名、メトリクス名前空間、およびメトリック名を入力します。メトリクス値を 1 に設定します。完了したら、[次へ] を選択し、その後 [Create metric filter] を選択します。

  8. ナビゲーションペインで、[アラーム]、[すべてのアラーム] の順に選択します。

  9. [アラームの作成] を選択します。

  10. 作成したメトリクスフィルターの名前空間を選択します。

    新しいメトリクスがコンソールに表示されるまでに数分かかる場合があります。

  11. 作成したメトリクス名を選択し、その後 [Select metric] を選択します。

  12. アラームを以下のように設定して、[Next] (次へ) をクリックします。

    • [統計] で、[合計] を選択します。これにより、指定された期間のデータポイントの総数をキャプチャしていることを確認できます。

    • [期間] で、[1 時間] を選択します。

    • [Whenever] で、[Greater/Equal] を選択し、しきい値は「10」と入力します。

    • [追加設定]、[Datapoints to alarm] はデフォルトの「1」のままにしておきます。

  13. [Notification] で、既存の SNS トピックを選択するか、[Create new topic] を選択して新しいトピックを作成します。[Next] を選択します。

  14. 次のページで、アラームの名前と説明を入力し、[次へ] を選択します。

  15. アラームの設定が終わったら、[Create alarm] を選択します。