Amazon EFS に接続されている Amazon EC2 インスタンスのリストを表示する方法を教えてください。

最終更新日: 2021 年 2 月 17 日

Amazon Elastic File System (Amazon EFS) をマウントした Amazon Elastic Compute Cloud (Amazon EC2) インスタンスのリストを確認したいと考えています。どうすればよいですか?

簡単な説明

各 Amazon EFS マウントターゲットの Elastic Network Interface 上のトラフィックは、VPC フローログを使用して追跡します。フローログは Amazon CloudWatch Logs にプッシュできます。CloudWatch Logs Insights を使用すると、マウントターゲットの Elastic Network Interface 上のトラフィックフローがフィルタリングされ、特定のタイムスタンプで Amazon EFS をマウントした Amazon EC2 インスタンスのリストが提供されます。

解決方法

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください

次の手順を 1 回実行します。これらの手順を完了した後、Amazon EFS をマウントしているクライアントの IP アドレスをリストするたびに、クエリを実行して現在のリストを作成します。

ロググループを作成する

1.   CloudWatch コンソールを開き、[Logs] (ログ) を選択します。
2.   [Actions] (アクション) メニューを選択し、[Create Log Group] (ロググループを作成) を選択します。
3.   [Log Group Name] (ロググループ名) を入力し、[Create Log Group] (ロググループを作成) を選択します。

CloudWatch Logs にフローログを発行するアクセス権限を持つ Identity and Access Management (IAM) ロールを作成する

Amazon EFS のマウントターゲットで使用する Elastic Network Interface のリストを取得する

注: Amazon EFS には、アベイラビリティーゾーンごとに異なるマウントターゲットがあります。

1.   Amazon EFS コンソールを開きます。
2.   特定の Amazon EFS を選択し、各マウントターゲットの Network Interface ID を書き留めます。

フローログを作成する

1.   Amazon EC2 コンソールを開いてから、[Network Interface] (ネットワークインターフェイス) を選択します。
2.   マウントターゲットで使用されている、ステップ 3 でメモしたすべての Elastic Network Interface を選択します。
3.   [Actions] (アクション) メニューを選択し、[Create flow log] (フローログを作成) をクリックします。フローログを作成するときは、次の値を使用します。

      フィルター: [All] (すべて) を選択
      送信先: [Send to CloudWatch Logs] (CloudWatch Logs に送信) を選択    
      接続先ロググループ: ステップ 1 で作成したロググループを選択します。
      IAM ロール: ステップ 2 で作成した IAM ロールを選択します。

4.   [Create] (作成) を選択します。
5.   フローログを作成した特定の Elastic Network Interface を選択して、フローログのステータスをモニタリングします。画面の下部で、[フローログ] を選択します。[Status] (ステータス) が [Active] (アクティブ) であることを確認します。
6.   最初のフローログは約 10 分で CloudWatch Logs にプッシュされるはずです。

フローログが CloudWatch Logs にあることを確認する

1.   CloudWatch コンソールを開き、[Logs] (ログ) を選択します。
2.   ステップ 1 で作成した [Log Group] (ロググループ) を選択します。
3.   ステップ 4 で作成されたすべてのログストリームが表示されることを確認します。各 Elastic Network Interface には異なるログストリームがあります。

クエリを実行する

CloudWatch Logs Insights でクエリを実行するには、次の手順に従います。

1.   CloudWatch コンソールで、[Insights] を選択します。
2.   ドロップダウンメニューから、ステップ 1 で作成したロググループを選択します。
3.   フローログを確認する期間を選択します (直近 15 分、30 分、1 時間)。
4.   次のクエリを入力します。

filter dstPort="2049" | stats count(*) as FlowLogEntries by srcAddr | sort FlowLogEntries desc

注: 上記のクエリは、すべてのマウントターゲットに対して生成されたすべてのフローログを確認し、送信先ポートが Port=2049 に設定されたログをフィルタリングします (Amazon EFS クライアントは NFS ポート 2049 でマウントターゲットに接続します)。すべての一意のソース IP (Amazon EFS クライアント IP) は、最もアクティブなクライアント接続によって取得およびソートされます。アクティビティは、フローログのエントリの数によって決まります。

5.   [Run Query] (クエリの実行) を選択します。出力には、Amazon EFS をマウントしたすべての Amazon EC2 インスタンスのプライベート IP のリストが含まれます。

以下は、クエリ出力の例です。

#          srcAddr              FlowLogEntries
1      172.31.12.60                 78
2      172.31.57.233                36
3      172.31.53.144                33
4      172.31.74.79                 30
5      172.31.23.86                 26
6      172.31.63.215                25

AWS コマンドラインインターフェイス (AWS CLI) からクエリを実行するには、次の手順に従います。

1.   VPC フローログをセットアップしたら、AWS CLI コマンドを使用してクエリを実行できます。

2.   以下のように、AWS CLI が最新バージョンに更新されていることを確認します。

$ pip install --upgrade awscli

3.   以下のように、jq がインストールされていることを確認します。

yum install -y jq

4.   これらのクエリパラメータを使用して、次の AWS CLI クエリを使用します。

log-group-name: 手順 1 で作成したロググループ名を入力します。

start-time/end-time: これらの値は Unix/Epoch 時間です。epochconverter.com にあるコンバーターを使用して、人間が読み取れるタイムスタンプを Unix/Epoch 時間に変換します。

test.json: オプションで、このコマンドを実行するたびに json ファイル名を変更できます。名前を変更すると、以前の出力が新しい出力とマージされないようになります。

sleep: この値 (秒単位) は、CloudWatch Logs Insights クエリの実行中の遅延として使用されます。入力する値は、フローログを確認する期間によって異なります。数週間など、より長い期間ログを確認する場合は、スリープ時間を長くします。

aws logs start-query --log-group-name EFS-ENI-logs --start-time 1549002413 --end-time 1553063276 --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

この記事はお役に立ちましたか?


請求に関するサポートまたは技術的なサポートが必要ですか?