【新機能】PrivateLinkで独自エンドポイントを作ってアプリをプライベート公開する #reinvent
コンニチハ、千葉です。
まず、PrivateLinkについてはこちらから。
今までは、AWS公式としてEC2やKinesis StreamなどのエンドポイントへPrivateLinkを介しVPCからインターネットを介さずに接続することができていました。
今回このPrivateLinkのエンドポイントを自分で作れるようになりました。つまり、PrivateLinkのエンドポイントを作って公開することで、独自アプリケーションを特定のVPCへ公開することができます。このアーキテクチャは例えばVPCを数百作成し、マイクロサービスを提供するということが実現できるようになります。
アーキテクチャ
現在PrivateLinkで指定できるエンドポイントはNLB(Network Loadbalancer)になります。公開するアプリケーションはNLBを介して、PrivateLinkのエンドポイントとして提供されます。
使い分け
ここで、VPC間通信なのでVPCピアリングでもいいんじゃない?という疑問が出てきます。が、PrivateLinkを利用するときのユースケースを考えてみました。
- PrivateLinkを利用すると、特定のNLBのみ公開できるのでアクセスを限定できる。逆にVPCピアリングだとセグメントレベルでの共有になるので、アクセス制限を意識する必要がある
- 相手側ネットワークのセグメントを意識する必要がない。VPCピアリングだと、ネットワークセグメントがかぶるとそもそもピアリングができない
- マーケットプレイスが用意されます。2018に公開されるとのことです。APIのエンドポイントをサブスクリプション形式で買って利用することができるようになります
注意ポイントとしては、NLBを利用するのでTCPの利用が可能です。
やってみた
前提としてNLBを事前に作成しておく必要がります。今回は、NLBとEC2を事前に作成済みとして進めます。
VPCのインベントリに「エンドポイントのサービス」という項目が増えています。こちらから作成していきます
作成したNLBが表示されるので選択して、サービス作成をクリックします。
PrivateLinkエンドポイントを作成できました。VPCエンドポイント作成時に使うのでサービス名をメモっておきます。
次にVPCエンドポイントを作成します。
「サービス名を名前で検索」を指定して、先ほど作成したPrivateLinkエンドポイントのサービス名をを入力します。検証をクリックしサービスが見つかればokです。あとはアタッチするVPCとセキュリティグループを選択し作成します。今回は、NLBを作成したVPCと別のVPCを作成し指定しています。
作成したPrivateLinkエンドポイントにVPCエンドポイントからの承認依頼がくるので承認します。エンドポイントのサービス > エンドポイント接続タブ > アクションより承認します。
少し時間がかかったあとに利用可能になります
VPCエンドポイント経由で対向側のNLBにアクセスできるか確認してみます。
[ec2-user@ip-172-32-11-68 ~]$ curl vpce-0517fc33abd2d9b13-tzl6hwzg.vpce-svc-096b71c7455b79b04.ap-northeast-1.vpce.amazonaws.com <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <title>Test Page for the Nginx HTTP Server on the Amazon Linux AMI</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <style type="text/css"> /*<![CDATA[*/ body { background-color: #fff; color: #000; font-size: 0.9em; font-family: sans-serif,helvetica; margin: 0; padding: 0; } :link { color: #c00; ・・・
おまけ
EC2から見たソースIPについて
NLB はその動作の特性上、ターゲットをインスタンス ID で指定した場合は、直接クライアントの IP アドレスがターゲット(EC2 インスタンス)に伝わります。しかし IP アドレスで指定した場合は一般的な LB と同じように、NLB のプライベート側の IP アドレスが通知されてしまうので、そのような際には必要になる機能・プロトコルかと思われます。
だったんですが、PrivateLink利用時はターゲットタイプがインスタンスでも、NLBのIPアドレスで受信します。 おそらくPrivateLinkを利用すると、対抗のVPCが複数ありネットワークセグメントも被る可能性があるため不整合が起きないようにこうなってるのではないかと推測しています。
EC2のセキュリティグループは以下を意識しないとはまります。
- VPCエンドポイントにアタッチするセキュリティグループ > クライアントからのアクセス許可できているか?
- EC2にアタッチするセキュリティグループ > NLBからのアクセス許可がされているか?
それぞれ意識して設定しましよう!
最後に
PrivateLinkエンドポントを作れるようになるアップデートでした。ピアリング以外のVPC間接続のサポート、マーケットプレイスによるサーボパーティアプリケーションとプライベート接続が可能になります。 マーケットプレイスでどのようなアプリが提供されるのか楽しみです。