##Privatelink (VPC Interface Endpoint) へ閉域接続する構成をBeanstalkで簡単作成してみます
###この構成を考えた理由
- AWSへの閉域網アクセスのリクエストが意外に多い
- でも、AWSへの閉域網接続を検討する場合こんな悩みが
- APN パートナーが提供する Direct Connect は確実だけどイニシャルとランニングコストが若干高め
- AWS のVPN 接続を使う手もあるがクラウドHUBとして動くので、異なる組織を収容するマルチテナントには向かない
###Privatelink (VPC Interface Endpoint) を利用した場合に解決できること
- Direct Connect や VPNで接続するVPCの中に接続用エンドポイントが作成されるので、オンプレミス拠点からの接続が可能
- 異なるAWSアカウントのVPC間でも接続できる(クロスアカウント構成)
- PlivateLink エンドポイントと接続先を収容するNetwork Load Blancer(NLB)の間は双方向NATの様な動きをするため、サービスを利用する側のVPCとサービスを提供する側のVPCでアドレス帯が重複していても接続可能
####1. NLBとBeanstalk Web Tierを作成します
- EB CLIの環境設定や eb init でのEB環境設定は完了しているものとします
- 検証用に下記のEB環境を使用
- Elastic Beanstalk 開発者ガイド
- AWSマネジメントコンソール を使用した複数コンテナの Docker 環境
- https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/create_deploy_docker_ecstutorial.html
- ELBはNLBで作成するため「--elb-type network」を指定します
- ELBはInternalに設定するので「--vpc.elbpublic」は外しています
- VPC IDや各種subnetのIDはご自身の環境に合わせてください
eb create eb-privatelink `
--elb-type network `
--cname eb-privatelink-oreg `
--tags project=eb-privatelink `
--vpc.id vpc-0a1d806e `
--vpc.ec2subnets subnet-97aa55cf,subnet-d7d47fa1 `
--vpc.elbsubnets subnet-97aa55cf,subnet-d7d47fa1 `
--vpc.dbsubnets subnet-cc097594,subnet-710c0107 `
--vpc.securitygroups sg-1d12c87b `
--instance_profile aws-elasticbeanstalk-ec2-role `
--instance_type t2.small `
--vpc.publicip `
--tier webserver `
--timeout 30
####2. エンドポイントサービスの作成(サービス提供側)
Beanstalkで作成したNLBが表示されるのでPrivatelinkのサービスを作成します
####3. ホワイトリストにプリンシパルを追加する(サービス提供側)
エンドポイントサービスを利用するAWSアカウントを登録します
arn:aws:iam::サービスを利用するAWSアカウントID:root
####4. エンドポイントサービスのサービス名を確認します(サービス提供側)
####5. エンドポイントサービスするAWSアカウントでエンドポイントを作成します(サービス利用側)
「サービスを名前で検索」を選択して4.でコピーしたサービス名を入力します
####6. エンドポイントを作成するVPCとセキュリティグループを選択します(サービス利用側)
####7. エンドポイントサービスで接続するエンドポイントを承認します(サービス提供側)
承諾の保留中 → 利用可能 になるまで少し待ちます
####8. エンドポイントのDNS名を確認します(サービス利用側)
PrivateLinkのDNS名はSplit-horizonで解決されるので一番上のDNS名でOKです
####9. エンドポイントを作成したAWSアカウントで起動したWorkspacesでサービスへアクセスします(サービス利用側)
R53のプライベートゾーン レコードセットにエンドポイントDNS名のCNAMEを分かりやすい名前で登録するとアクセスが楽になります(サービス利用側)
###試しにマネージド VPN接続のオンプレ環境からアクセスしてみた
- PrivteLink サービス提供側 と サービス利用側 のVPC IPプレフィックスは同じ
- エンドポイントを作成したサービス利用側VPCに作成したVGWとオンプレ環境のpfSenseをIPSec接続
- R53プライベートゾーンにエンドポイントDNS名を登録
- workspaces に付帯しているSinpleAD DNSをオンプレ拠点のリゾルバとして参照
- SinpleADやエンドポイントのセキュリティグループにオンプレ拠点IPプレフィックスが接続元の通信を許可設定
オンプレ拠点からエンドポイントDNS名の名前解決はできているが、エンドポイントへのHTTP接続はできなかった。
この構成が可能になると、VPN閉域網でのサービス提供の選択肢が広がるので早く実現してほしいです。
(Sep 25, 2018 更新 PrivateLink で AWS VPN を経由したアクセスがサポートされました!)
-
参考文献
-
Amazon Web Services ブログ
- AWS PrivateLinkのアップデート – お客様のアプリケーション&サービス向けのVPCエンドポイント
- AWS PrivateLink で AWS VPN を経由したアクセスをサポート
-
Developers.IO(クラスメソッドさん)