Amazon WorkSpaces Personalでストリーミング用のPrivateLinkがサポートされていたので試してみた
しばたです。
2か月ほど前の話になるのですがAmazon WorkSpaces Personalでストリーミング用のPrivateLinkがサポートされました。
AWSからのアナウンスとブログはこちらになります。
更新内容と制限事項
このPrivateLinkによりWorkSpacesの利用(ストリーミング)をVPC内に作成したVPC Endpointから行える様になります。
他サービスのPrivateLink同様に通信経路に制限がある場合に採用することになるのですが、結構な数の制限事項があり採用のハードルが高めです。
制限1 : 環境の制限
まず最初に本日時点でこのPrivateLinkを使えるのはAmazon WorkSpaces Personalだけです。
Amazon WorkSpaces Poolsは対象外です。
制限2 : 通信の制限
続けてこのPrivateLinkを使えるのはAmazon DCVプロトコル(旧WSPプロトコル)のWorkSpace環境のみとなります。
PCoIP環境に対してはWorkSpacesのディレクトリ設定から「インターネット越しの通信を許可する」or「一切通信不可」のどちらかを選ぶ形となります。
そして、あくまでも ストリーミング の通信だけがPrivateLinkの対象であり、認証の通信に対しては常にインターネットアクセスを必要とします。
この仕様は以前(2019年)からPrivateLinkをサポートしているAmazon AppStream 2.0と同じです。
完全閉域環境でAmazon WorkSpacesを使えるわけではないのでご注意ください。
認証の通信は所定のドメインのTCP 443とUDP 443番ポートに対して許可しておく必要があります。
制限3 : 機能の制限
その他機能面での制限が以下のドキュメントに記載されています。
上述した制限以外のものを挙げると、
- Amazon DCVプロトコル環境におけるVPC Endpointを利用した通信は(インターネット経由の通信と)排他的関係になります
- VPC Endpointを利用した場合インターネット経由の通信は遮断されます
- 現時点ではIPv4のみのサポートです
- クライアント環境からVPC Endpointまでルーティング可能になっている必要があります
- FIPS暗号化は未サポート
- AWS Global Accelerator (AGA) の利用はできません
- VPC Endpointの設定を行うとIPアクセスントロールグループ設定が無効化されます[1]
となります。
試してみた
ここから実際にPrivateLinkを試していきます。
0. 検証環境
今回は検証用AWSアカウントの東京リージョンに接続元となるVPC(VPC1)とAmazon WorkSpaces Personal用のVPC(VPC2)の2つのVPCを作成します。
接続元VPCには日本語版Windows Server 2025 EC2を1台用意し最新のAmazon WorkSpaces Clientアプリケーションをインストールしておきます。
インターネットアクセスはNAT Instanceから行う様にし、このNAT Instanceを起動/停止することでインターネットアクセス許可を制御します。
Amazon WorkSpaces Personal環境は以前公開したCloudFormationテンプレートから作成します。
各種リソースの構築手順は割愛します。
1. 事前準備 (セキュリティグループ)
最初にVPC Endpoint用のセキュリティグループを作成します。
セキュリティグループのルールでは以下の通信を許可する必要があります。
- インバウンド通信
- TCP 443, 4195を許可
- UDP 443, 4195を許可
- アウトバウンド通信
- VPC Endpoint用なのでルール無し(全通信ブロック)でOK
インバウンド通信を許可するソースに関しては環境に応じたCIDRを指定します。
インバウンドルールではTCP, UDP両方の443, 4195ポートの通信を許可
アウトバウンドルールは設定なしでOK
2. VPC Endpointの作成
次にVPC Endpointの作成を行います。
VPCのマネジメントコンソールから新規にエンドポイントの作成を行い、
AWSのサービスからcom.amazonaws.<リージョン名>.highlander
のエンドポイントを選択します。
workspaces
ではなくhighlander
の名が付くエンドポイントですのでご注意ください。
エンドポイント名に注意
ネットワーク設定は環境に合わせた形にします。
「DNS名を有効化」のチェックは付けたままにしてください。
セキュリティグループに事前準備で作成したものを選び「エンドポイントを作成」してやります。
しばらく待ってステータスが「使用可能」になれば完成です。
3. Amazon WorkSpacesディレクトリの設定
最後にこのVPC EndpointをAmazon WorkSpacesのディレクトリと紐づけてやります。
Amazon WorkSpacesのディレクトリ設定から「VPCエンドポイント」欄の編集ボタンをクリックします。
編集画面の「ストリーミングエンドポイント」に作成したVPC Endpointを指定します。
PCoIPのストリーミングを許可するか否かは環境に応じて設定してやります。
編集後エンドポイント設定が反映されているのを確認してすべての作業が完了となります。
4. 接続確認
ここから接続確認をしていきます。
4-1. NAT Instanceが落ちている場合 (完全閉域環境の場合)
最初にNAT Instanceを落として完全閉域となったVPCからの接続を試みます。
構成図中には記載してませんが接続用EC2へはEC2 Instance Connect Endpoint経由で接続しています。
この状態でWorkSpaces Clientを起動しネットワーク状態を確認すると、下図の通り、インターネットアクセス不可の状態の結果になっています。
先述の通り認証にインターネットアクセスが必要なのでここから接続を試みても失敗してしまいます。
インターネットアクセス不可のため登録コードの登録時点でエラーになる
4-2. NAT Instanceを起動している場合 (最低限のインターネットアクセスが許可されている場合)
次にNAT Instaceを起動してインターネットアクセス可能にしてみます。
このNAT InstanceではHTTPS(TCP 443)、UDP 443番ポートのみアウトバウンド通信を許可しています。
この場合WorkSpaces Clientのネットワーク状態は下図の様になりました。
全てOKが出るのかと思ったのですがアウトバウンド通信の確立に失敗した旨のエラーが出ています。
部分的にOKになっているネットワーク状態
クライアントのログを確認するとネットワーク状態の確認ではパブリックなエンドポイントに対するチェックを行っている様でした。
この状態でWorkSpaceへの接続を行うとエラーなく登録コードを設定でき、WorkSpace環境の利用までできました。
エラーなくWorkSpace環境に接続できている
いい感じです。
クライアントのログをチェックしたところ、ディレクトリ設定でVPC Endpointを使う設定にした場合はPrivateな接続エンドポイント情報が与えられそこに対して接続を試みる形になっていました。
#
# ・・・省略・・・
#
# セッション開始時にPrivateなエンドポイントが与えられている
2025-08-28T04:29:37.292Z { Version: "5.29.1.5595" }: [INF] Starting WSP session using SessionId: prod-ap-northeast-1-7f73a8ab-a674-49a0-81e8-465b2e99c9f1, endpoints:
hostname: privatelink.prod.ap-northeast-1.WSP.aws.a2z.com, transport: QUIC, port: 4195, gatewayType: NLB, ipVersion: IPv4, additionalEndpointAttributes:
hostname: privatelink.prod.ap-northeast-1.WSP.aws.a2z.com, transport: QUIC, port: 443, gatewayType: NLB, ipVersion: IPv4, additionalEndpointAttributes:
hostname: privatelink.prod.ap-northeast-1.WSP.aws.a2z.com, transport: TCP, port: 4195, gatewayType: NLB, ipVersion: IPv4, additionalEndpointAttributes:
hostname: privatelink.prod.ap-northeast-1.WSP.aws.a2z.com, transport: TCP, port: 443, gatewayType: NLB, ipVersion: IPv4, additionalEndpointAttributes:
# 与えられたPrivateなエンドポイントに対する接続チェックが試行されている
2025-08-28T04:29:38.634Z { Version: "5.29.1.5595" }: [INF] Initializing session: prod-ap-northeast-1-7f73a8ab-a674-49a0-81e8-465b2e99c9f1
2025-08-28T04:29:38.635Z { Version: "5.29.1.5595" }: [DBG] Protocol new State: Initializing
2025-08-28T04:29:38.638Z { Version: "5.29.1.5595" }: [DBG] Protocol new State: Connecting
2025-08-28T04:29:38.638Z { Version: "5.29.1.5595" }: [INF] Supported endpoint: "hostname: privatelink.prod.ap-northeast-1.highlander.aws.a2z.com, transport: QUIC, port: 4195, gatewayType: NLB, ipVersion: IPv4, additionalEndpointAttributes: ", session ID: prod-ap-northeast-1-7f73a8ab-a674-49a0-81e8-465b2e99c9f1
2025-08-28T04:29:38.638Z { Version: "5.29.1.5595" }: [INF] Supported endpoint: "hostname: privatelink.prod.ap-northeast-1.highlander.aws.a2z.com, transport: QUIC, port: 443, gatewayType: NLB, ipVersion: IPv4, additionalEndpointAttributes: ", session ID: prod-ap-northeast-1-7f73a8ab-a674-49a0-81e8-465b2e99c9f1
2025-08-28T04:29:38.638Z { Version: "5.29.1.5595" }: [INF] Supported endpoint: "hostname: privatelink.prod.ap-northeast-1.highlander.aws.a2z.com, transport: TCP, port: 4195, gatewayType: NLB, ipVersion: IPv4, additionalEndpointAttributes: ", session ID: prod-ap-northeast-1-7f73a8ab-a674-49a0-81e8-465b2e99c9f1
2025-08-28T04:29:38.638Z { Version: "5.29.1.5595" }: [INF] Supported endpoint: "hostname: privatelink.prod.ap-northeast-1.highlander.aws.a2z.com, transport: TCP, port: 443, gatewayType: NLB, ipVersion: IPv4, additionalEndpointAttributes: ", session ID: prod-ap-northeast-1-7f73a8ab-a674-49a0-81e8-465b2e99c9f1
2025-08-28T04:29:38.723Z { Version: "5.29.1.5595" }: [DBG] Session window deactivated
2025-08-28T04:29:38.769Z { Version: "5.29.1.5595" }: [DBG] Reachable endpoints after probing:
2025-08-28T04:29:38.769Z { Version: "5.29.1.5595" }: [DBG] hostname: privatelink.prod.ap-northeast-1.highlander.aws.a2z.com, transport: QUIC, port: 4195, gatewayType: NLB, ipVersion: IPv4, additionalEndpointAttributes:
2025-08-28T04:29:38.769Z { Version: "5.29.1.5595" }: [DBG] hostname: privatelink.prod.ap-northeast-1.highlander.aws.a2z.com, transport: QUIC, port: 443, gatewayType: NLB, ipVersion: IPv4, additionalEndpointAttributes:
2025-08-28T04:29:38.769Z { Version: "5.29.1.5595" }: [DBG] hostname: privatelink.prod.ap-northeast-1.highlander.aws.a2z.com, transport: TCP, port: 4195, gatewayType: NLB, ipVersion: IPv4, additionalEndpointAttributes:
2025-08-28T04:29:38.769Z { Version: "5.29.1.5595" }: [DBG] hostname: privatelink.prod.ap-northeast-1.highlander.aws.a2z.com, transport: TCP, port: 443, gatewayType: NLB, ipVersion: IPv4, additionalEndpointAttributes:
2025-08-28T04:29:38.769Z { Version: "5.29.1.5595" }: [INF] Reachable endpoint: "hostname: privatelink.prod.ap-northeast-1.highlander.aws.a2z.com, transport: QUIC, port: 4195, gatewayType: NLB, ipVersion: IPv4, additionalEndpointAttributes: ", session ID: prod-ap-northeast-1-7f73a8ab-a674-49a0-81e8-465b2e99c9f1
2025-08-28T04:29:38.769Z { Version: "5.29.1.5595" }: [INF] Reachable endpoint: "hostname: privatelink.prod.ap-northeast-1.highlander.aws.a2z.com, transport: QUIC, port: 443, gatewayType: NLB, ipVersion: IPv4, additionalEndpointAttributes: ", session ID: prod-ap-northeast-1-7f73a8ab-a674-49a0-81e8-465b2e99c9f1
2025-08-28T04:29:38.769Z { Version: "5.29.1.5595" }: [INF] Reachable endpoint: "hostname: privatelink.prod.ap-northeast-1.highlander.aws.a2z.com, transport: TCP, port: 4195, gatewayType: NLB, ipVersion: IPv4, additionalEndpointAttributes: ", session ID: prod-ap-northeast-1-7f73a8ab-a674-49a0-81e8-465b2e99c9f1
2025-08-28T04:29:38.769Z { Version: "5.29.1.5595" }: [INF] Reachable endpoint: "hostname: privatelink.prod.ap-northeast-1.highlander.aws.a2z.com, transport: TCP, port: 443, gatewayType: NLB, ipVersion: IPv4, additionalEndpointAttributes: ", session ID: prod-ap-northeast-1-7f73a8ab-a674-49a0-81e8-465b2e99c9f1
# Privateなエンドポイントに対して接続
2025-08-28T04:29:38.779Z { Version: "5.29.1.5595" }: [INF] Connecting with extended endpoint configurations
2025-08-28T04:29:38.780Z { Version: "5.29.1.5595" }: [INF] Attempting to establish connection to DCV WorkSpace endpoint "hostname: privatelink.prod.ap-northeast-1.highlander.aws.a2z.com, transport: QUIC, port: 4195, gatewayType: NLB, ipVersion: IPv4, additionalEndpointAttributes: ", session ID: prod-ap-northeast-1-7f73a8ab-a674-49a0-81e8-465b2e99c9f1, is reconnection: false
2025-08-28T04:29:38.782Z { Version: "5.29.1.5595" }: [INF] Connecting WorkSpace using QUIC
#
# ・・・省略・・・
#
ログに出てきたprivatelink.prod.ap-northeast-1.highlander.aws.a2z.com
に対して名前解決を試みるとちゃんと作成したVPC EndpointのIPアドレスを返してくれます。
# Privateなエンドポイントに対する名前解決
PS C:\> nslookup privatelink.prod.ap-northeast-1.highlander.aws.a2z.com
サーバー: ip-10-0-0-2.ap-northeast-1.compute.internal
Address: 10.0.0.2
権限のない回答:
名前: privatelink.prod.ap-northeast-1.highlander.aws.a2z.com
Address: 10.0.21.217
4-3. AWS外環境からの接続
この状態で私の自宅から接続を試みるとネットワーク状態に一切問題が無いのにも関わらず接続が中断されます。
自宅からの接続は中断される様に
これは「制限3 : 機能の制限」で述べた排他関係のためインターネット経由の接続が不可となったためです。
クライアントのログを見るとPrivateなエンドポイントへの接続を試みて接続不可の判定がされていることが分かります。
#
# ・・・省略・・・
#
2025-08-28T05:05:17.127Z { Version: "5.29.1.5595" }: [DBG] Protocol new State: Initializing
2025-08-28T05:05:17.129Z { Version: "5.29.1.5595" }: [DBG] Protocol new State: Connecting
2025-08-28T05:05:17.129Z { Version: "5.29.1.5595" }: [INF] Supported endpoint: "hostname: privatelink.prod.ap-northeast-1.highlander.aws.a2z.com, transport: QUIC, port: 4195, gatewayType: NLB, ipVersion: IPv4, additionalEndpointAttributes: ", session ID: prod-ap-northeast-1-af1a279d-fefe-4a61-ad99-ae0c5534d9ad
2025-08-28T05:05:17.129Z { Version: "5.29.1.5595" }: [INF] Supported endpoint: "hostname: privatelink.prod.ap-northeast-1.highlander.aws.a2z.com, transport: QUIC, port: 443, gatewayType: NLB, ipVersion: IPv4, additionalEndpointAttributes: ", session ID: prod-ap-northeast-1-af1a279d-fefe-4a61-ad99-ae0c5534d9ad
2025-08-28T05:05:17.129Z { Version: "5.29.1.5595" }: [INF] Supported endpoint: "hostname: privatelink.prod.ap-northeast-1.highlander.aws.a2z.com, transport: TCP, port: 4195, gatewayType: NLB, ipVersion: IPv4, additionalEndpointAttributes: ", session ID: prod-ap-northeast-1-af1a279d-fefe-4a61-ad99-ae0c5534d9ad
2025-08-28T05:05:17.129Z { Version: "5.29.1.5595" }: [INF] Supported endpoint: "hostname: privatelink.prod.ap-northeast-1.highlander.aws.a2z.com, transport: TCP, port: 443, gatewayType: NLB, ipVersion: IPv4, additionalEndpointAttributes: ", session ID: prod-ap-northeast-1-af1a279d-fefe-4a61-ad99-ae0c5534d9ad
# Privateなエンドポイントへ接続不可
2025-08-28T05:05:17.238Z { Version: "5.29.1.5595" }: [WRN] No endpoints are reachable. A connection may not be able to be established.
#
# ・・・省略・・・
#
4-4. PCoIP環境への接続
今回はPCoIP環境への接続を拒否する設定にしました。
この状態でPCoIP環境へ接続を試みると直ちに「無効な状態エラー」となりました。
自宅環境から接続を試みた場合も同じエラーになりPCoIP環境へは一切接続できないことが確認できました。
クライアントのログにわかりやすいものは無かったのですが、おそらく下記の部分で「接続先リソースが無い」形になり無効になる様です。
# PCoIP接続を許可しない場合、接続先リソースが無い形になるっぽい
2025-08-28T05:29:49.187Z { Version: "5.29.1.5595" }: [DBG] PerformResourceActionRequest Type: CONNECT, Protocol: PCOIP, Session-Id: d6df764d-65e9-4abd-8882-98d2bfd6cbbc, Amzn-id: 6a775665-f37c-4930-a493-563d5f76ac35
2025-08-28T05:29:49.307Z { Version: "5.29.1.5595" }: [DBG] Received Http AllocateResourceResponse(Url: $https://ws-broker-service.ap-northeast-1.amazonaws.com/) with ()
2025-08-28T05:29:49.308Z { Version: "5.29.1.5595" }: [ERR] WorkSpacesClient.Common.UseCases.CommonGateways.WsBroker.PerformResourceAction.AllocateResourceResponse Error. Code: RESOURCE_NOT_FOUND; Message: Resource was not found.; Type: com.amazonaws.wsbrokerservice#ResourceNotFoundException
2025-08-28T05:29:49.309Z { Version: "5.29.1.5595" }: [ERR] Error while calling PerformResourceActionConnect: RESOURCE_NOT_FOUND
4-5. 各種設定を無効化した場合
せっかくなので既存の接続がある状態で各種設定を無効化した場合どうなるのか確認してみました。
最初にインターネット経由のPCoIP接続を許可して接続がある状態でPCoIP接続を無効にしたところ、既存の接続はそのまま利用可能で無効化以後の新規接続が拒否される形になりました。
次に既存のAmazon DCV接続がある状態でAmazon WorkSpacesとVPC Endpointの関連付けを解除したところ、こちらも既存の接続はそのまま利用可能で新規接続がインターネット経由になりました。
最後に既存のAmazon DCV接続がある状態で関連付けを解除してさらにVPC Endpoint事態を削除したところ、さすがにこの場合はVPC Endpointの削除と同時に既存の接続が切断されました。
ここまでの結果から基本的に既存の接続は維持されることが分かります。
余談 : ちょっとややこしいAmazon WorkSpaces関連のVPC Endpoint
おまけとしてAmazon WorkSpacesに関連するVPC Endpoint(名前にworkspaces
を含むもの)が少しわかりにくいので表にまとめてみました。
サービス名 | エンドポイント名 | 特記事項 |
---|---|---|
Amazon WorkSpaces Stream | com.amazonaws.<リージョン名>.highlander | 今回追加されたエンドポイント。名前が workspaces でなく highlander |
Amazon WorkSpaces API操作 | com.amazonaws.<リージョン名>.workspaces | AWS環境操作API用エンドポイント |
Amazon WorkSpaces Instances | com.amazonaws.<リージョン名>.workspaces-instances | Amazon WorkSpaces Core関連の機能 |
Amazon WorkSpaces Secure Browser API操作 | com.amazonaws.<リージョン名>.workspaces-web | エンドポイント名は旧称(WorkSpaces Web)ベースとなる |
Amazon Managed Service for Prometheus API操作 | com.amazonaws.<リージョン名>.aps-workspaces | 別サービス用 |
workspaces
という名称がAmazon WorkSpaces以外のサービスでも使われることがあるのでご注意ください。
終わりに
以上となります。
PrivateLink自体が利用者・利用環境を選ぶ機能ですし本機能を使う方は正直かなり少ないでしょう。
もしAmazon WorkSpacesにおいてPrivateLinkの採用を検討している方がいればこの記事の内容が参考になると嬉しいです。
インターネット経由の通信と排他なのである意味当然とも言える ↩︎