この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、森田です。
この記事では、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を指定します。
accept-iam.yml
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を指定し、実行します。
requester.yml
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 を利用した方が良いです。