【Amazon QuickSight】PrivateLink対応の効果検証（2024.4.15アップデート）

## はじめに
こんにちは。株式会社ジールの[@RizumuUEDA](https://qiita.com/RizumuUEDA)です。
今回は、2024年4月にアップデートされた「[AWS PrivateLinkがAmazon QuickSightのサポートを開始](https://aws.amazon.com/jp/about-aws/whats-new/2024/04/aws-privatelink-supports-quicksight/)」についての検証結果をご紹介します。

## 1. 背景・目的
### 1-1. AWS PrivateLinkとは
AWS PrivateLinkは、AWSサービス間のプライベートな接続を提供するサービスです。実体は「サービス提供側のサービス」と「サービス利用側のインターフェースVPCエンドポイント」の2つのセットで提供されます。
![AWS PrivateLinkの概要](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856575/0c115bb2-4bf4-5cef-f0cb-76a1db0f938e.png)
図1. AWS PrivateLinkの概要（EC2間の接続を行う場合の一例）

情報漏洩やサイバー攻撃への懸念が高まる中、オンプレミスとクラウドの接続においても安全なデータ通信が必要となり、PrivateLinkの利用が推奨されています。

### 1-2. 何を検証するのか
今回のアップデートにより、以下の点が変化しました。
1. ユーザーがQuickSightウェブサイトへVPC経由でプライベートに接続可能となった
2. 従来の接続元IP制限に加え接続元VPC/VPCエンドポイント制限が加わり制御の柔軟性が向上した

企業内ネットワーク環境からQuickSightへの接続がセキュアになったため、企業内データの可視化ニーズがさらに増加すると考えられます。​本記事では、PrivateLinkを用いたQuickSightへの接続によるセキュリティ、パフォーマンス、導入コストの有効性を評価した結果を報告します。

## 2. 検証方法
以下の４つの手順で検証を行いました。

### 2-1. 環境構築
以下の構成図に示すアーキテクチャ（以下、検証システム）を構築します。このとき、QuickSightのアクセス制御設定でEC2インスタンスに対してIP接続制限とVPC接続制限をそれぞれ設定します。
![検証システムの構成図](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856575/68d9bc4d-aa96-5c84-5510-039d83c2a8fa.png)
図2. 検証システムの構成図

### 2-2. アクセス制御の動作確認
検証システムに対して下図の3パターンからアクセスを試みます。2-1の設定より①②でアクセス成功、③でアクセス失敗となることを期待します。
![アクセス制御の設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856575/0d9502c7-b90e-44c1-92f4-bf9d51724a07.png)
図3. アクセス制御の設定（①からのアクセス時にQuickSightのアドレスの名前解決が必要なためRoute 53を配置、詳細は後段にて説明）

### 2-3. 動作確認
検証システムに対して、QuickSightで作成したダッシュボードの読み込み等を①PrivateLink経路と②直接経路のアクセス方法で比較します。

#### ⅰ. パフォーマンス比較
数ギガバイトサイズのCSVデータから作成した分析画面のダッシュボード読み込み速度を、Google Chromeの拡張機能である[Page Load Time](https://chromewebstore.google.com/detail/page-load-time/fploionmjgeclbkemipmkogoaohcdbig)を用いて比較します。

#### ⅱ. S3上の画像データ表示
S3上に配置した画像データをダッシュボードで表示した際に、アクセスの問題が生じずに表示されるかを確認します。

#### ⅲ. CSVデータのエクスポート
ダッシュボードからビジュアルのデータをエクスポートした際に、破損なく保存できているかを確認します。

## 3. 検証結果
### 3-1. 環境構築
以下の手順で検証システムを構築しました。

1.**VPCエンドポイントの作成**
VPCのエンドポイントメニューから、AWSのサービスからQuickSight（サービス名：`com.amazonaws.ap-northeast-1.quicksight-website`）を選択し、配置するパブリックサブネットにチェックを入れてインターフェースエンドポイントを作成しました。
<details><summary>設定画面キャプチャ</summary>

![QS用エンドポイントの作成1](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856575/c1caf2c2-3eba-191b-2fd4-c5ac71677cca.png)
![QS用エンドポイントの作成2](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856575/85081c23-2296-3940-9176-ac14e0e93864.png)
図4. QuickSight接続用のVPCエンドポイントの作成<br>
</details>

2.**プライベートホストゾーンの作成**
ここで、1で選択したサービス名（`com.amazonaws.ap-northeast-1.quicksight-website`）が通常QuickSightにアクセスする際のアドレス（`ap-northeast-1.quicksight.aws.amazon.com`）と異なるため、プライベートIPアドレスへ名前解決を行う必要がありました。
Route 53からプライベートホストゾーンとエイリアスレコードを作成し、VPCへの関連付けを行いました。また、QuickSightの接続元IP制限、接続元VPC制限を行いました。
<details><summary>設定画面キャプチャ</summary>

![プライベートホストゾーン作成1](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856575/223f4616-8acf-f008-38f9-091e3b17d699.png)
![プライベートホストゾーン作成2](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856575/734af075-f1fd-fa89-1307-64927e45c240.png)
図6. プライベートホストゾーンの作成<br>
![エイリアスレコード作成](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856575/a9b9da14-a4bf-78b6-d0cd-5fb4491ccda4.png)
図7. エイリアスレコードの作成<br>
![QS接続元制限](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856575/339d8468-3085-7843-5619-b2da7118d702.png)
図8. Quicksightの接続元制限
</details>

以上の設定で検証システムを実装しました。QuickSight用のエンドポイントを作成するだけでなく周辺のネットワーク設定も行う必要があったため、PrivateLink経由のアクセス制御を実現するには想定より多くの時間を要しました。

### 3-2. アクセス制御の動作確認
図3の①～③のそれぞれについて、QuickSightのURLを押下した際の挙動は以下のようになり、図3のアクセス制御を実現することができました。

①PrivateLink経由でEC2(Web client)からの接続は成功しました。
![VPC経由接続](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856575/56a612bb-9e98-cb45-d1d6-545d532eb0dc.png)
図9. EC2(Web client)からQuickSightへのPrivateLink接続

②PrivateLinkを経由しないEC2(Web client)からの接続も成功しました。
![VPN経由接続](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856575/cb137c7e-fcff-ae11-bf69-0079e30f5f6b.png)
図10. EC2(Web client)からQuickSightへの直接接続

③個人PCからの接続は失敗しました。
![インターネット経由接続](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856575/d2df53ba-f25f-8921-6add-76d1e31177a4.png)
図11. 個人PCからQuickSightへの接続

### 3-3. 動作確認
#### ⅰ. パフォーマンス比較
検証データとして、正規分布に基づく乱数を浮動点小数として格納した2.1GB（100列×2億行相当）のCSVファイルを作成しS3上に配置しました。
検証データを用いて、以下のようなダッシュボードを作成しました。
![ダッシュボード画面1](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856575/08329ff1-158a-6517-1e30-abb415329439.png)
図12. パフォーマンス比較用のダッシュボード

このダッシュボードのWebページを読み込み、Page Load Timeで計測された表示までの時間[秒]は下表のようになりました。①PrivateLink経路ではより早い時間でレスポンスが得られる結果となりました。

||①PrivateLink経路|②直接経路|
|:---:|:---:|:---:|
|図12|4.3|7.2|

※今回はt3.smallのEC2をリモートデスクトップとして利用した。

#### ⅱ. S3上の画像データ表示
64KBのPNG画像データ（1340×750ピクセル）をS3上に配置しました。カスタムコンテンツビジュアルを用いて以下のようなダッシュボードを作成しました。
![ダッシュボード画面2](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856575/c32a66c7-d22b-f093-423f-4bc05542dfef.png)
図13. 画像データ表示ダッシュボード

①PrivateLink経路のアクセスでも問題なく表示できました。
![ダッシュボード画面2_リモデ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856575/dd70aa0d-4439-dff9-de59-fe7537560998.png)
図14. ①PrivateLink経路で閲覧した画像データ表示ダッシュボード

#### ⅲ. CSVデータのエクスポート
検証データとして、1.8KB（3列×100行相当）のCSVファイルを作成しS3上に配置しました。10人の人物それぞれの10科目のテストの得点を記録した形となっており、ピボットテーブルビジュアルを用いて以下のダッシュボードを作成しました。
![ダッシュボード画面3](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856575/8f58b2fd-c0ae-f80f-e664-a1cb818359df.png)
図15. エクスポート用ダッシュボード

①PrivateLink経路でアクセスし、ビジュアルの「CSVへエクスポート」機能を用いてデータをローカルへエクスポートしました。
S3上の元データと比較するとフォーマットや改行コード、文字コードの違いから2.1KBとファイルサイズは異なりましたが、これらを統一しPowerShellで比較したところ、実質的に差異はないことが確認できました。

![データ比較](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856575/9fd603fd-8e08-83b3-f3c0-1faaaa102eef.png)
図16. 元データ（左、export_test.csv）とエクスポートデータ（右、得点分布_~.csv）

![データ比較2](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856575/09ee2391-cc94-555e-0719-a6c7d5eafa36.png)
図17. diff（2つのファイルの内容が異なる行を表示するコマンド）による差異表示

以上より、①PrivateLink経路でも従来と同様にQuickSightの機能（S3上の画像データを含むダッシュボードの表示、エクスポート）を使用できることを確認しました。

## おわりに
今回はAmazon QuickSightのAWS PrivateLink対応について検証を行いました。
従来のIPアドレス制限に加えVPC単位でのアクセス制限を実現できる点は、アクセス可能なユーザをより緻密に制御できセキュリティ面で効果的だと感じました。その反面、システムの構築には細かなネットワーク設定も必要であり、導入にはネットワークに対する知見といった技術的なハードルもあるように感じました。ダッシュボードの表示等の機能においては差は見られず、ページ表示の速度は従来よりも早い結果となりました。
PrivateLinkは、セキュリティ要件に応じて導入を検討する手段として有効と考えられます。

## 参考
[1] [AWS PrivateLinkがAmazon QuickSightのサポートを開始](https://aws.amazon.com/jp/about-aws/whats-new/2024/04/aws-privatelink-supports-quicksight/)
[2] [AWS PrivateLink の概念](https://docs.aws.amazon.com/ja_jp/vpc/latest/privatelink/concepts.html)
[3] [[アップデート] Amazon QuickSight が VPC エンドポイントがサポートされ Direct Connect や VPN からのみアクセスさせたいというユースケースにも対応出来るようになりました](https://dev.classmethod.jp/articles/quicksight-interface-endpoint/)

## 
株式会社ジールでは、「ITリテラシーがない」「初期費用がかけられない」「親切・丁寧な支援がほしい」「ノーコード・ローコードがよい」「運用・保守の手間をかけられない」などのお客様の声を受けて、オールインワン型データ活用プラットフォーム「ZEUSCloud」を月額利用料にてご提供しております。

ご興味がある方は是非下記のリンクをご覧ください：

https://www.zdh.co.jp/products-services/cloud-data/zeuscloud/?utm_source=qiita&utm_medium=referral&utm_campaign=qiita_zeuscloud_content-area