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

最終更新日: 2022 年 2 月 1 日

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 コンソールを開きます。
  2. 左側のナビゲーションペインで、[ログ] を選択してから、[ロググループ] を選択します。
  3. [ロググループの作成] を選択します。
  4. [ロググループ名]、[保持期間] の設定、およびオプションの KMS キー ARN に入力します。ここにタグを追加することもできます。
  5. [Create] (作成) を選択します。

CloudWatch Logs にフローログを発行する許可を持つ Identity and Access Management (IAM) ロールを作成する

  1. IAM コンソールを開きます。
  2. ナビゲーションペインの [アクセス管理] で、[ロール] を選択します。
  3. [ロールを作成] を選択し、新しい IAM ロールを作成します。
  4. IAM ロールにアタッチされた IAM ポリシーには、VPC フローログを CloudWatch に発行する許可が含まれている必要があり、フローログサービスがロールを引き受けることを許可する信頼関係が必要です

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

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

  1. Amazon EFS コンソールを開きます。
  2. [ファイルシステム] で、特定の Amazon EFS を選択し、[詳細の表示] を選択します。
  3. [Network] をクリックし、各マウントターゲットのネットワークインターフェイス ID を書き留めます。

フローログを作成する

  1. Amazon EC2 コンソールを開きます。
  2. [ネットワークとセキュリティ] を選択し、 [ネットワークインターフェイス] を選択します。
  3. マウントターゲットが使用しているすべての Elastic Network Interface を選択します。
  4. [アクション] メニューから [フローログを作成] を選択します。フローログを作成するときは、次の値を使用します。
    • 名前: 任意
    • フィルター: [All] (すべて) を選択
    • 最大集計間隔:デフォルトの 10 分または 1 分から選択します。
    • 送信先: [Send to CloudWatch Logs] (CloudWatch Logs に送信) を選択
    • 接続先ロググループ: 作成したロググループを選択します。
    • IAM ロール:作成した IAM ロールを選択します。
    • ログレコード形式:AWS のデフォルト形式またはカスタム形式から選択します。
    • タグ:オプション
  5. [Create] (作成) を選択します。
  6. フローログを作成した特定の Elastic Network Interface を選択して、フローログのステータスをモニタリングします。画面の下部にある [Flow logs] を選択します。[Status] (ステータス) が [Active] (アクティブ) であることを確認します。
  7. 最初のフローログは、約 10 分後に CloudWatch Logs にプッシュされます。

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

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

クエリを実行する

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

  1. CloudWatch コンソールで、 [ログ] を選択してから、[Logs Insights] を選択します。
  2. 作成したロググループをドロップダウンメニューから選択します。
  3. フローログを確認する期間 (5 分、30 分、1 時間、3 時間、12 時間、カスタム) を選択します。
  4. 以下のクエリを入力します。
| filter dstPort="2049" | stats count(*) as FlowLogEntries by srcAddr | sort FlowLogEntries desc

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

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

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

    #          srcAddr              FlowLogEntries
    1      111.22.33.44                 78
    2      111.55.66.77                36
    3      111.88.99.000                33

    AWS CLI を使用してクエリを実行する

    AWS CLI からクエリを実行するには、次の手順に従います。

    1. VPC フローログをセットアップしたら、AWS CLI コマンドを使用してクエリを実行できます。
    2. 以下のように、AWS CLI が最新バージョンに更新されていることを確認します。
    $ pip install --upgrade awscli
  • 以下のように、jq がインストールされていることを確認します。
  • yum install -y jq

     

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

    • log-group-name: 作成したロググループ名を入力します。
    • start-time/end-time: これらの値は Unix/Epoch 時間です。エポックコンバーターを使用して、人間が読めるタイムスタンプを Unix/Epoch タイムに変換します。
    • test.json: オプションで、このコマンドを実行するたびに json ファイル名を変更できます。名前を変更すると、以前の出力が新しい出力とマージされないようになります。
    • sleep: この値 (秒単位) は、CloudWatch Logs Insights クエリの実行中の遅延として使用されます。入力する値は、フローログを確認する期間によって異なります。数週間など、より長い期間ログを確認する場合は、スリープ時間を長くします。
    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

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


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