BFT名古屋 TECH BLOG

日々の業務で得た知識を所属するエンジニアたちがアウトプットしていきます。

【AWS】プライベートサブネットにあるインスタンスのログをCloudWatchに出力する方法/CloudWatch用エンドポイントの作成


2023/1/11 一部の文章を修正・更新しています。


こんにちは!
BFT名古屋支店の佐野です。

さて、これまで以下2つの記事でEC2インスタンスのログをCloudWatchに出力する方法をOS別に紹介してきました。

bftnagoya.hateblo.jp

bftnagoya.hateblo.jp

この中で「プライベートサブネットのインスタンスからCloudWatchにログを出力するにはVPCエンドポイントの設定が必要とお伝えしました。 そこで今回は短めではありますが、プライベートサブネットからCloudWatchへの出口となるVPCエンドポイントの設定についてお送りします。


はじめに

S3に関する記事でも触れていますが、VPCエンドポイントとはすなわち
「インターネットを経由せずにAWSサービスにアクセスするための出入口」になります。
筆者としてはAWS内の通用口あるいは連絡路というイメージを持っています。

図にすると以下のような形です。

図ではVPCエンドポイントは1つとなっていますが、実際には各AWSサービスに対応したエンドポイントが存在し、それをプライベートサブネットやルートテーブルに関連付けていくことでインターネットを介さない形でAWSサービスへのアクセスが可能となります。


エンドポイント用のセキュリティグループの設定

今回作成するエンドポイントはセキュリティグループの影響を受けるため、エンドポイント用のセキュリティグループを作成して対象となるインスタンスとの疎通が許可されている状態にしなければなりません。
同様にインスタンス側のセキュリティグループにおいても今回作成するエンドポイント用セキュリティグループへの疎通を許可する旨の設定を行なう必要があります。
セキュリティグループの作成については以下公式のドキュメントを参照ください。

docs.aws.amazon.com

さて今回のエンドポイント用のセキュリティグループへの設定は以下のように行ないます。
※インバウンドルールのみの設定で問題ありません。

通信方向 タイプ プロトコル ポート 送信元
インバウンド HTTPS TCP 443 接続先のインスタンス
セキュリティグループIDを指定

同時に送信元となるインスタンスのセキュリティグループの設定にも以下を追加する必要があります。
※アウトバウンドルールのみの設定で問題ありません。

通信方向 タイプ プロトコル ポート 送信先
アウトバウンド HTTPS TCP 443 エンドポイント用の
セキュリティグループIDを指定

CloudWatchへアクセスするためのエンドポイントの作成

では実際にプライベートサブネットのEC2インスタンスおよびその中に入っているCloudWatchエージェントがCloudWatchへアクセスを行なう為のVPCエンドポイントを設定してみましょう。
この手順においてはインスタンスのOSの種類は関係ありません。LinuxWindows共通の手順になります。

まずCloudWatchにアクセスし、ログを出力するためのエンドポイント(おびサービス名)は以下の3種類が必要となります。
これらを同時に作成することはできませんので、手順を繰り返して1つずつ作成していくことになります。

  • com.amazonaws.ap-northeast-1.monitoring
    CloudWatchのエンドポイント
  • com.amazonaws.ap-northeast-1.ec2
    EC2のエンドポイント。
    CloudWatchエージェントが初期化の際にEC2へのアクセスを行なう。
  • com.amazonaws.ap-northeast-1.logs
    CloudWatch Logsのエンドポイント。
    CloudWatchへログを送信する際に必要。

ではまずマネジメントコンソールから「VPC」コンソールに入り、左側メニューより「エンドポイント」を選択、さらに「エンドポイントの作成」を選択します。
そして「エンドポイントの作成」画面となったらサービスカテゴリで「AWSサービス」を選択し、サービス名で必要となるエンドポイントに対応するサービス名を探して選択します。
(サービス名は先程挙げた3種類と同じとなります)

AWSサービスの選択後、このエンドポイントを作成するサブネットを選択します。
ここでは今回ログをCloudWatchに出力したいインスタンスがあるプライベートサブネットを選択しています。

次に「Enable DNS name」にチェックが入っていることを確認し、その後「セキュリティグループ」で今回作成するエンドポイント用のセキュリティグループを選択します。

最後にポリシーで「フルアクセス」を選択し、タグにおいては任意のタグを入力(しなくてもOK)して、「エンドポイントの作成」を選択します。

ここまでがエンドポイントの作成の一連の手順になります。
この手順を繰り返して3種類のエンドポイントを作成したら、プライベートサブネットにあるインスタンスからCloudWatchへログを出力するための準備は完了となります。
この状態でプライベートサブネットにあるインスタンスのCloudWatchエージェントを起動ないし再起動するとCloudWatchへのログ出力が行えるようになっているはずです。


最後に

今回は簡単ではありましたがプライベートサブネットにあるインスタンスからCloudWatchへログを出力する方法を紹介しました。
またこの手順を行なうことで、ログと同時にメトリクスの収集も行えます。
(多くの場合はそっちが本命かもしれませんが……)

業務であると特にプライベートサブネットにインスタンスを置くことも多く、その監視でハマってしまう方は多いと思いますので、同じくプライベートサブネットからAWSサービスへのアクセスについてを扱った「【AWS】S3バケットの内容をプライベートなインスタンスから閲覧・操作する方法」記事同様、お役立ていただければ嬉しく思います。