Amazon Elastic File System (Amazon EFS) ファイルシステムを Amazon Elastic Compute Cloud (Amazon EC2) インスタンスにマウントしました。Amazon EC2 インスタンスのリストを表示したいです。
簡単な説明
各 Amazon EFS マウントターゲットのネットワークインターフェイスのトラフィックを追跡するには、Amazon Virtual Private Cloud (Amazon VPC) フローログを使用します。フローログを Amazon CloudWatch Logs に公開します。次に、CloudWatch Logs Insights を使用して、マウントターゲットのネットワークインターフェイス上のトラフィックフローをフィルタリングします。CloudWatch Logs Insights は特定のタイムスタンプを使用して、EFS ファイルシステムがマウントされている EC2 インスタンスを識別します。
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
ロググループを作成します。
次の手順を実行します。
- Amazon CloudWatch コンソールを開きます。
- ナビゲーションペインで [ログ] を選択し、次に [ロググループ] を選択します。
- [ロググループを作成] を選択します。
[ロググループ名] に名前を入力します。
[保持の設定] に、保持設定を入力します。
(オプション) AWS Key Management Service (AWS KMS) キー Amazon リソースネーム (ARN) とタグを追加します。
- [作成] を選択します。
フローログを CloudWatch Logs に公開するアクセス許可を持つ IAM ロールを作成する
次の手順を実行します。
- AWS Identity and Access Management (IAM) コンソールを開きます。
- [アクセス管理] で [ロール] を選択します。
- [ロールを作成] を選択し、新しい IAM ロールを作成します。
- ロールの IAM ポリシーで、アクセス許可を追加し、サービスがロールを引き受けるための信頼ポリシーを含めます。
Amazon EFS ファイルシステムのマウントターゲットネットワークインターフェイスを取得する
注: EFS には、アベイラビリティーゾーンごとに異なるマウントターゲットがあります。
次の手順を実行します。
- EFS コンソールを開きます。
- [ファイルシステム] で EFS ファイルシステムを選択し、[詳細を表示] を選択します。
- [ネットワーク] を選択し、各マウントターゲットのネットワークインターフェイス ID を書き留めます。
フローログを作成する
次の手順を実行します。
- EC2 コンソールを開きます。
- [ネットワークとセキュリティ] を選択し、[ネットワークインターフェイス] を選択します。
- マウントターゲットが使用するネットワークインターフェイスを選択します。
- [アクション] メニューで [フローログの作成] を選択します。
- 以下の値を入力します。
(オプション) [名前] に、フローログ名を入力します。
[フィルター] で [すべて] を選択します。
[最大集約間隔] で、デフォルトの [10 分] または [1 分] を選択します。
[送信先] で [CloudWatch Logs に送信] を選択します。
[送信先ロググループ] で、ロググループを選択します。
[IAM ロール] で IAM ロールを選択します。
[ログレコード形式] には、[AWS デフォルト形式] または [カスタム形式] のいずれかを選択します。
(オプション) [タグ] にタグを追加します。
- [作成] を選択します。
- フローログのステータスをモニタリングするには、ネットワークインターフェイスを選択し、次に [フローログ] を選択します。[ステータス] が [アクティブ] であることを確認します。
注: フローログシステムは、約 10 分後に最初のログを CloudWatch Logs に公開します。
フローログが CloudWatch Logs にあることを確認する
次の手順を実行します。
- CloudWatch コンソールを開きます。
- ナビゲーションペインで [ロググループ] を選択します。
- [ロググループ] で、ロググループを選択します。
- すべてのログストリームが表示されることを確認します。
注: 各ネットワークインターフェイスには異なるログストリームがあります。
CloudWatch Logs Insights を使用してクエリを実行する
次の手順を実行します。
- CloudWatch コンソールを開きます。
- ナビゲーションペインで [ログ] を選択し、[Logs Insights] を選択します。
- ロググループを選択します。
- 次の期間値のいずれかを選択します。 [5 分]、[30 分]、[1 時間]、[3 時間]、[12 時間]、[カスタム]
- 次のクエリを実行します。
fields @timestamp, @message | filter dstPort="2049" | stats count(*) as FlowLogEntries by srcAddr | sort FlowLogEntries desc
前述のクエリは、すべてのマウントターゲットのすべてのフローログを確認します。このクエリは、送信先ポートが Port=2049 に設定されているログをフィルタリングします。EFS クライアントは NFS ポート 2049 のマウントターゲットに接続します。このクエリは、一意の EFS クライアントの IP アドレスをすべて取得し、最もアクティブなクライアント接続順に並べ替えます。フローログのエントリ数によってアクティビティレベルが決まります。
クエリ出力には、EFS ファイルシステムがマウントされているすべてのインスタンスのプライベート IP アドレスのリストが含まれます。
クエリ出力の例:
# srcAddr FlowLogEntries1 111.22.33.44 782 111.55.66.77 36
3 111.88.99.000 33
クエリ開始コマンドを実行する
jq がインストールされていることを確認します。
yum install -y jq
次の start-query コマンドを実行します。
aws logs start-query --log-group-name EFS-ENI-Flowlogs --start-time 1643127618 --end-time 1643128901 --query-string 'filter dstPort="2049" | stats count(*) as FlowLogEntries by srcAddr | sort FlowLogEntries desc' > test.json && sleep 10 && jq .queryId test.json | xargs aws logs get-query-results --query-id
コマンドで、次のパラメータを設定します。
- log-group-name には、ロググループ名を入力します。
- start-time と end-time には、開始時間と終了時間を入力します。
注: これらの値は Unix エポック時間です。読み取り可能なタイムスタンプに変換するには、Epoch コンバーターのウェブサイトにある Epoch および Unix タイムスタンプ変換ツールを使用してください。
- (オプション) test.json では、コマンドを実行するたびに JSON ファイル名を変更できます。名前を変更しても、以前の出力は新しい出力とマージされません。
- sleep には、クエリの実行中にフローログを確認するには、遅延時間を秒単位で指定します。
現在 EFS ファイルシステムをマウントしているクライアントの IP アドレスを表示するには、新しいクエリを実行します。