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

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

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

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

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

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

CloudWatch Logs の詳細については、「Amazon CloudWatch Logs ユーザーガイド」「CloudWatch 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. ナビゲーションペインで [Roles] (ロール)、[Create role] (ロールの作成) の順に選択します。

  3. 信頼できるエンティティの種類の選択 で、AWS サービス を選択します。[ユースケース] で、[EC2] を選択します。[Next: Permissions (次へ: アクセス許可)] を選択します。

  4. [アクセス権限ポリシーをアタッチする] ページで、[Next: Review (次へ: レビュー)] を選択し、オプションでタグを追加します。[Next: Review] を選択します。

  5. ロールの名前を入力し、オプションで説明を入力します。[ロールの作成] を選択します。

  6. ロールの名前を選択します。[アクセス許可] で [インラインポリシーの追加]、[JSON] の順に選択します。

  7. CloudWatch Logs へのフローログ発行のための IAM ロール」から最初のポリシーをコピーして、ウィンドウに貼り付けます。[ポリシーの確認] を選択します。

  8. ポリシーの名前を入力し、[ポリシーの作成] を選択します。

  9. ロールの名前を選択します。[Trust relationships] で、[Edit trust relationship] を選択します。既存のポリシードキュメントで、サービスを ec2.amazonaws.com から vpc-flow-logs.amazonaws.com に変更します。[Update Trust Policy] を選択します。

  10. [Summary] ページで、ロールの ARN を書き留めます。フローログを作成するときに、この ARN が必要になります。

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 アクションを使用するアクセス許可があることを確認してください。詳細については、「IAM ユーザーがロールを渡すためのアクセス許可」を参照してください。

前提条件

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

コンソールを使用してネットワークインターフェイスのフローログを作成するには

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

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

  3. 1 つ以上のネットワークインターフェイスのチェックボックスにチェックを入れ、[Actions] (アクション)、[Create flow log] (フローログの作成) の順に選択します。

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

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

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

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

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

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

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

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

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

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

コンソールを使用して VPC またはサブネットのフローログを作成するには

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

  2. ナビゲーションペインで、[Your VPCs] (VPC) または [Subnets] (サブネット) を選択します。

  3. 1 つ以上の VPC またはサブネットのチェックボックスにチェックを入れ、[Actions] (アクション)、[Create flow log] (フローログの作成) の順に選択します。

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

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

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

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

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

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

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

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

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

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

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

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

次の AWS CLI の例では、サブネット subnet-1a2b3c4d の許可されたすべてのトラフィックをキャプチャするフローログが作成されます。フローログは、IAM ロール my-flow-logs を使用し、アカウント 123456789101 内で、publishFlowLogs と呼ばれる CloudWatch Logs 内のロググループに配信されます。

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 で収集された他のログイベントのように、フローログレコードを操作できます。ログデータとメトリクスフィルタのモニタリングの詳細については、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. [フィルターパターン] で、次のように入力します。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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