新機能VPC Sharing(Shared VPC)のドキュメントを読んでみる

記事タイトルとURLをコピーする

プロフェッショナルサービス課の杉村です。re:Invent 2018では数々のアップデートや新サービスが発表されましたね。 機械学習系のサービスやよりスマートに開発をするためのサービスが次々発表されましたが、多くのエンタープライズクラスのお客様とお付き合いをさせていただいている私には、AWS Control TowerAWS Transit Gatewayなど管理系・ネットワーク系の新サービスが大変魅力的に映りました。

ネットワーク系のリリースに関しては、下記のセッションの動画が分かりやすいですね。 https://www.youtube.com/watch?v=fnxXNZdf6ew

動画でも紹介されていますが、ちょっと地味ながらも光る新機能が発表されました。

Working with Shared VPCs https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpc-sharing.html

VPC SharingまたはShared VPCと呼ばれる、VPCの新機能です。 なんとあるAWSアカウント内のサブネットを別のAWSアカウントにシェアできる、という機能です。

あるAWSアカウントに存在するEC2やRDSに別のAWSアカウントからネットワーク的にアクセスするには、従来ですとVPC Peeringが必要でした。 2つ目のAWSアカウントにVPCを作ってPeeringするには、1つ目のAWSアカウントのVPCと被らないIPアドレス帯を払い出す必要があります。

しかしVPC Sharingの機能を使えば、下記のようにAWS Account間でVPC内のサブネットをシェアできるのです。

まだ詳細は未検証ですが、ドキュメントから読み取れる仕様をメモいたします。(英語版しかないので、備忘がてらに…)

前提

サブネットをシェアするには同じAWS Organizationsに所属している必要があります。 私たちのようなパートナー経由でAWSをご利用いただいているお客様は特に上記の点で注意が必要ですため、ご利用いただけるかどうかはパートナーにご相談ください。

またデフォルトVPC内のサブネットはシェアできません。

シェアする方法

まず AWS Resource Access Manager でResource Share(シェアの設定の概念)を作成します。ここでシェアする先のAWSアカウントやサブネットなどを指定します。 シェアするVPC・サブネットのオーナーAWSアカウントで、サブネットをシェアします。 (マネコンならVPC>Subnets>Actionsボタン>Share subnet) そしてResource Shareを選択してShare subnetを押下します。

これでシェアが完了です。 シェアした先のAWSアカウント(Participantとします)のVPCのサブネット一覧に表示されるはずです。 サブネットにはOwnerという属性が表示されるようになっており、親(Ownerとします)が誰かが分かります。

参考 AZについて

AWSではあるAWSアカウントの「us-east-1a」は別のAWSアカウントでは「us-east-1b」かもしれないという、AWSアカウントごとにAZ名と実態が異なる場合がある、という仕様があります。 そのためAWSアカウント間で正しくAZを特定するには、AZ IDというAZに固有なIDを使います。(このIDは以前は見えませんでしたが現在は表示されるようになりました)

できること

Ownerができること

当然ですがサブネットの作成・削除・変更、そしてRoute Table、IGW、NAT GW、VPC Peering、PrivateLinkなどの各種VPCレベルのリソースの作成・削除・変更ができます。 ただしシェアされたサブネットにParticipantが作ったSecurity Group、EC2、RDSなどのリソースは削除ができません。(閲覧はできます)

Participantができること

シェアされたサブネットの中で EC2, RDS, Redshift, Lambda などが利用できます。 当然他のParticipantのリソースは見えませんし触れません。 Route table や NACL は閲覧できますが、変更できません。(VPCレベルのリソースは触れない) Security Group IDを使えば、他のParticipantやOwnerのSecurity GroupをSGのレコード内で参照できます。 VPC Flow Logsの作成ができます。

料金について

EC2やRDSなど、作ったリソースの料金はParticipantにかかります。AZ間のdata transfer料金やVPC Peeringのdata transfer料金、Direct Connect gatewayのdata transfer料金もParticipantです。 一方でNAT Gateway、VGW、Transit Gateways、PrivateLink、VPC Endpointsの時間料金、データ容量やdata transfer料金はOwnerが払います。

対応していないサービス

シェアしたサブネットでは以下のサービスは利用できません。

Amazon Aurora Serverless AWS Cloud9 AWS CloudHSM AWS Glue Amazon EMR Network Load Balancer

制限

同じAWS Organizationに所属している必要があります。 default VPCはシェアできません。 Participantは他のParticipantやOwnerのSecurity Groupを使ってリソースをローンチできません。 ParticipantはDefault Security Groupを使ってリソースをローンチできません。

まとめ

エンタープライズクラスのAWSご利用者様の場合、IPアドレス帯の管理やセキュリティポリシーの関係で、AWSアカウントを分けてもその新しいアカウントの中にVPCを新規作成して既存のAWSアカウントとVPC Peeringで繋いで・・・ということにハードルがある場合があります。そんな場合にこの機能を使えば、既存のVPCを利用し、かつAWSアカウントとしての権限分離もできます。 検証をしてみたうえで、さらなる情報はまたブログにしようと思います。

杉村 勇馬 (記事一覧)

サーバーワークス → 株式会社G-gen 執行役員CTO

2021 Japan APN Ambassadors / 2021 APN All AWS Certifications Engineers

マルチAWSアカウント管理運用やネットワーク関係のAWSサービスに関するブログ記事を過去に執筆。

2021年09月から株式会社G-genに出向、Google Cloud(GCP)が専門に。G-genでもGoogle Cloud (GCP) の技術ブログを執筆中。