【新機能】PrivateLinkで独自エンドポイントを作ってアプリをプライベート公開する #reinvent

2017.12.01

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

コンニチハ、千葉です。

まず、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 アドレスが通知されてしまうので、そのような際には必要になる機能・プロトコルかと思われます。

NLB (Network Load Balancer) が Proxy Protocol に対応しました

だったんですが、PrivateLink利用時はターゲットタイプがインスタンスでも、NLBのIPアドレスで受信します。 おそらくPrivateLinkを利用すると、対抗のVPCが複数ありネットワークセグメントも被る可能性があるため不整合が起きないようにこうなってるのではないかと推測しています。

EC2のセキュリティグループは以下を意識しないとはまります。

  • VPCエンドポイントにアタッチするセキュリティグループ > クライアントからのアクセス許可できているか?
  • EC2にアタッチするセキュリティグループ > NLBからのアクセス許可がされているか?

それぞれ意識して設定しましよう!

AWS Network Load Balancer(NLB)のソースIPとターゲットのセキュリティグループ留意点まとめ

最後に

PrivateLinkエンドポントを作れるようになるアップデートでした。ピアリング以外のVPC間接続のサポート、マーケットプレイスによるサーボパーティアプリケーションとプライベート接続が可能になります。 マーケットプレイスでどのようなアプリが提供されるのか楽しみです。

参考

https://aws.amazon.com/jp/blogs/aws/aws-privatelink-update-vpc-endpoints-for-your-own-applications-services/