こんにちは。
カスタマーサクセス部の山本です。
お客様からの要望で、「Amazon Managed Grafana ダッシュボードの IP アドレスを固定したい」というものがありました。
Amazon Managed Grafana には、ダッシュボードの IP アドレスを固定する機能はありません。
そのため、何らかの工夫をして解決する必要がありました。
私の力では解決できず、お客様に出して頂いた案で、解決することができました。
学びになったので、記事として残すことにしました。
Amazon Managed Grafana ダッシュボードの IP アドレスを固定する(前提条件付き)
- 前提条件
- 接続元の端末の hosts ファイルや、端末の利用している DNS サーバーに、レコードの追加が必要です。
- 詳細:Grafana WorkSpace の ホスト名 が、Network Load Balancer のEIP に解決するようにhosts / DNS を設定します。
- 接続元の端末の hosts ファイルや、端末の利用している DNS サーバーに、レコードの追加が必要です。
構成図
ユーザーが Grafana Workspaces の URL (xxxx.grafana-workspace.region.amazonaws.com) にアクセスします。
すると、Network Load Balancer (以下、NLB) の 固定 IP アドレスである Elastic IP (以下、EIP) に通信します。
その後、NLB がターゲットグループに登録した VPC エンドポイントの IP アドレスの 443 ポートに転送します。
VPC エンドポイント経由で、 Grafana のダッシュボードに到達します。
Grafana のダッシュボードでは、該当の VPC エンドポイントからのみ接続するように、ネットワークアクセスコントロールを設定します。
VPC エンドポイント
VPC エンドポイントを作成します。
com.amazonaws.<リージョン>.grafana-workspace
VPC エンドポイントの IP アドレスをメモします。
NLB
ターゲットグループ
プロトコル : ポート を TCP 443 とします。
ターゲットタイプを IP アドレスにします。
さきほどメモした VPC エンドポイントの IP アドレスを登録します。
ロードバランサー
NLB をインターネット向けスキームで作成し、固定のパブリック IP アドレスである EIP を NLB に割り当てます。
EIP は事前に取得しておいてください。
参考:Elastic IP アドレス - Amazon Elastic Compute Cloud
リスナーは、プロトコル:TCP、ポート:443 を指定し、上で作成したターゲットグループを指定します。
ロードバランサーのセキュリティグループは、接続元の端末のパブリック IP などをご登録ください。
Grafana の設定
Grafana のダッシュボードでは、該当の VPC エンドポイントからのみ接続するように、ネットワークアクセスコントロールを設定します。
hosts の設定
私の端末の hosts に以下のエントリを追加しました。 34.208.126.117、54.202.130.136 は NLB に関連付けした EIP です。
34.208.126.117 xxxxxxxx.grafana-workspace.us-west-2.amazonaws.com 54.202.130.136 xxxxxxxx.grafana-workspace.us-west-2.amazonaws.com
確認
xxxxxxxx.grafana-workspace.us-west-2.amazonaws.com
に接続した際に、NLB に関連付けした EIP 経由で対象の Grafana Workspace に接続できました。
まとめ
NLB に関連付けした EIP を利用して、Grafana のダッシュボードの IP アドレスを固定できました。
余談
はじめは、以下のような構成を考えて検証したものの、不可でした。
上記構成では 自分で取得したパブリックドメインへのアクセスを Grafana に転送します。
Grafana の grafana.ini
に、自分で取得したパブリックドメインを記載しておかないと、表示してくれませんでした。
エラー画面です。
grafana.ini
の編集は Amazon Managed Grafana ではサポートしていません。
参考:AWS Managed Grafana: Change grafana.ini feature toggles?
そのため、ここで一旦諦めました。
当然、自分で取得したパブリックドメインなので、 hosts などに記載する必要がないのが利点だと考えていました。しかし、上記の制約があり、不可でした。
hosts に記載する形式であれば、この記事に記載したシンプルな NLB + VPC エンドポイントの構成で完結します。
Grafana Workspaces の URL (xxxx.grafana-workspace.region.amazonaws.com)へのリクエストを、NLB の EIP に転送して、VPC エンドポイント経由で接続できます。
最初に私が考えていた構成と似た公式ブログ
以下のブログ記事の内容は最初に私が考えていた構成と一緒です。
参考:AWS Global Accelerator が提供する静的 IP アドレス経由で AWS API Gateway にアクセスする
構成図の抜粋:
面白い点として、ブログ記事内では、Global Accelerator にパブリックなドメイン名(apidemo.labs~~
)を付与しています。
また、プライベートな API Gateway にも同じドメイン名(apidemo.labs~~
)をカスタムドメイン名として付与し、VPC エンドポイントと関連付けしています。
この構成では、利用者が apidemo.labs~~
のドメインにアクセスした際には、まず最初に、Global Accelerator に到達します。
次に、Global Accelerator と関連付けした ALB が、ターゲットグループ内の VPC エンドポイントにリクエストを転送します。
VPC エンドポイントと関連付いている プライベートな API Gateway に同じドメイン名(apidemo.labs~~
)が付いているため、最後には API Gatetway にリクエストが到達します。
私が検証した際に、この プライベートな API Gateway のドメイン名を、Global Acceleratorに付与したパブリックなドメイン名と一致させるという部分ができてなくて通信ができませんでした。
証明書をワイルドカードで取得していて、同じドメインで別なホスト名を付与しており、通信できなかったのです。
ここを同一ドメインにすると通信ができ、理解としてもスッキリしました。
余談でした。
山本 哲也 (記事一覧)
カスタマーサクセス部のエンジニア。2024 Japan AWS Top Engineers に選んでもらいました。
今年の目標は Advanced Networking – Specialty と Machine Learning - Specialty を取得することです。
山を走るのが趣味です。今年の目標は 100 km と 100 mile を完走することです。 100 km は Gran Trail みなかみで完走しました。残すは OSJ koumi 100 で 100 mile 走ります。実際には 175 km らしいです。「草 100 km / mile」 もたまに企画します。
基本的にのんびりした性格です。座右の銘は「いつか着く」