クロスアカウントVPCピアリングを CloudFormation でやってみた
こんにちは、森田です。
この記事では、VPCピアリングをクロスアカウントで行う方法を図を使ってまとめてみました。
VPC ピアリング
通常 Amazon VPC では、その内部のみでしか通信を行うことができません。
他の Amazon VPC と通信する方法としていつかの方法がありますが、その1つにVPC ピアリングがあります。(詳しくは以下をご参照ください)
VPC ピアリング接続は、プライベート IPv4 アドレスまたは IPv6 アドレスを使用して 2 つの VPC 間でトラフィックをルーティングすることを可能にするネットワーク接続です。どちらの VPC のインスタンスも、同じネットワーク内に存在しているかのように、相互に通信できます。VPC ピアリング接続は、お客様の VPC 間や、他の AWS アカウントの VPC との間に作成できます。VPC は複数の異なるリージョンに存在できます (これはリージョン間 VPC ピアリング接続とも呼ばれます)。
引用 : https://docs.aws.amazon.com/ja_jp/vpc/latest/peering/what-is-vpc-peering.html
別AWSアカウントへ1、 2つのVPCピアリング程度であれば、AWSコンソールから行っても良いですが、
3つ以上VPCピアリングとなると、それぞれの接続で承諾を行う必要があり、非常に面倒となります。
このようなケースでは、CloudFormationを使用することで楽にVPCピアリングを行うことができます。
CloudFormationを使用したVPCピアリング
まず、VPCピアリングの操作を許可するロールの作成を行います。
操作は別のアカウントに対して許可させるために、クロスアカウントアクセスロールを作成します。
入力パラメータでは、別のAWSアカウントIDを指定します。
AWSTemplateFormatVersion: "2010-09-09" Description: VPC Peering Inviter Parameters: AccountId: Type: String Description: Peering Account Resources: VPCPeeringRole: Type: AWS::IAM::Role Properties: RoleName: VPCPeeringRole AssumeRolePolicyDocument: Statement: - Effect: Allow Action: sts:AssumeRole Principal: AWS: !Ref AccountId Policies: - PolicyName: 'AcceptVpcPeering' PolicyDocument: Statement: - Effect: Allow Action: 'ec2:AcceptVpcPeeringConnection' Resource: '*' Outputs: RoleARN: Value: !GetAtt - VPCPeeringRole - Arn
作成したロールのARNと接続を許可するVPC ID、アカウントIDを別アカウントからCFnを実行させる際に必要となります。
続いて、先ほどロールを作成したアカウントと別のアカウントで、VPCピアリングのリクエストと承諾の両方を行います。
下記のCFnの入力パラメータとして、接続先のアカウントID、VPC ID、ロールのARNを指定し、実行します。
AWSTemplateFormatVersion: "2010-09-09" Description: VPC Peering Inviter Parameters: MyVPCId: Type: String Description: My VPC ID RemoteVPCId: Type: String Description: VPC ID to Connect AccountId: Type: String Description: Peering Account PeerRoleArn: Type: String Description: Peering IAM ARN Resources: VPCPeer: Type: AWS::EC2::VPCPeeringConnection Properties: VpcId: !Ref MyVPCId PeerVpcId: !Ref RemoteVPCId PeerOwnerId: !Ref AccountId PeerRoleArn: !Ref PeerRoleArn
CFnが正常に実行されると、VPCピアリングが正常に確立されていることが確認できます。
最後に
今回のように、別のアカウントより複数のVPCをピアリングする際には、CloudFormationを使用すると非常に便利です。
一方で、もっとVPCが増える場合は、ネットワークが複雑になり、管理が大変になるので Transit Gateway を利用した方が良いです。