1本のDirect Connect回線を複数のAWSアカウントで利用する

# はじめに
検証環境などで「すでにDirect Connect回線を引いてAWSとオンプレミスのネットワークはあるけど、別のAWSアカウントもDirect Connect接続をしたい」と思ったことは無いでしょうか。AWSアカウントが増えるたびにDirect Connect回線を敷設していてはコストが嵩んでしまいます。本記事では、すでにあるDirect Connect回線を活用して別のAWSアカウントとのDirect Connect接続を実現する方法を紹介します。
# 構成
以下の構成があるとします。既存AWSアカウントとオンプレミスはすでにDirect Connect回線によって接続されています。ここで、新たに別のAWSアカウントを用意し、既存ネットワークとは分離されたAWS～オンプレミス間の検証環境を用意する必要が出てきたとします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3731465/bf8a11d4-2594-4f2b-bad5-6b0d37f27faa.png)
この課題は既存のDirect Connect回線を新規アカウントにシェアすることで解決できます。ゴールは以下のトポロジーとなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3731465/51218a62-7483-4bf3-b3a9-b2342808506b.png)

# 必要なもの
1. 既存の占有型Direct Connect回線
今回はユーザが自由な設定でVIFを作成できる占有型のDirect Connect回線を用意している前提で話を進めます。
1. L2SW
既存のDirect Connect回線用ONUのLAN側インターフェースにL2SWを配置し、オンプレミスの中で既存AWSアカウントと通信するネットワークと、新規AWSアカウントと通信するネットワークを論理的に分離します。
1. 新規オンプレミスルータ
新規AWSアカウントとのBGPピアとなるオンプレミスルータを用意します。本記事ではFortiGateの設定を紹介します。
1. 既存AWSアカウントへのログインID/パスワード
新規AWSアカウントへシェアするVIFは既存Direct Connect接続のオーナアカウント側で作成する必要があります。
# 新規AWSアカウントでDirect Connect Gatewayを作成する
事前準備として新しいVIFを新規AWSアカウントへ収容するためのDirect Connect Gatewayを作成しておきます。Direct Connect GatewayはVPCが1つであれば無くてもいいですが、無料かつ拡張性が高いため現時点で不要であっても積極的に構成することをお勧めします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3731465/b7b4dbe8-61b5-4360-8933-22c2177508f5.png)
名前とAS番号を設定すれば完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3731465/20306472-ff19-4a74-9ac7-4c042e5e8b31.png)
# 既存AWSアカウントで新規AWSアカウント用のVIFを作成する
既存AWSアカウント上で新規AWSアカウント用のVIFを新規作成します。今回はプライベートVIFとします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3731465/02639621-06ea-4d50-b0bc-1e027ac62751.png)
「仮想インターフェースの所有者」に新規AWSアカウントIDを記入します。オンプレミスルータに設定する802.1Q VLAN IDとBGPのAS番号を記入します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3731465/46f60599-2792-42a1-9efc-797381d58326.png)
トポロジーを参考に、オンプレミスルータとAWSのBGPスピーカIPアドレスを記入します。あとの設定はお好みでかまいません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3731465/ba18d4d5-488b-4ca3-8fbd-fa13971b1556.png)
# 新規AWSアカウントでVIFを承認する
既存AWSアカウントでVIFを作成すると新規AWSアカウントに表示されますので、承諾します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3731465/f0590677-626f-430c-b3e9-e517f6f4ef51.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3731465/364b88f9-b7b5-4350-8563-0cf5421fd3f1.png)
画面下部にBGPピアリングの状態が表示されていますが、少し経つとpendingからavailableに遷移します。これで新規AWSアカウントにおいてVIFが利用できるようになります。
なお、VIFの作成時に設定したASNとDirect Connect GatewayのASNは以下のエラーとなり重複することができませんので注意しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3731465/890ed136-015f-4910-b9bd-d25b651ddffb.png)
# VPCにVGWを作成する
新規AWSアカウントのVPCにVGWを作成し、Direct Connect Gatewayと関連付けることでオンプレミスとVPC間の通信が可能な構成にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3731465/5074bda9-1037-4b7f-9fcb-8e6d3797c5bb.png)
VGWはAS番号を設定するだけで作成可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3731465/6d46bc09-63b9-43eb-a78b-a5ec91e8bccd.png)
作成したVGWをVPCにアタッチします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3731465/50fd52d6-240f-461e-bd06-8af08aac3631.png)
VPCのルートテーブルでVGWからのルートを自動的に伝搬するように設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3731465/45f8385d-f2f1-418c-85e1-8893c6cbd312.png)
作成したVGWをDirect Connect Gatewayに関連付けます。このとき、オンプレミスにBGPでアドバタイズするCIDRを設定することができます。今回はVPC CIDRを設定しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3731465/d525b9ee-9b93-4481-a79b-c784eaa465ab.png)
ここまででAWS側の設定は完了です。
# オンプレミスFortiGateで802.1Q VLANインターフェースとBGPを設定する
オンプレミス側の作業です。まず準備作業として、既存Direct Connect回線用ONUのLAN側インターフェースにL2SWを接続し、既存オンプレミスネットワークとFortiGateのネットワークをVLANで論理的に分離します。
##### L2SW（Cisco Catalyst）の設定
~~~
#ONU接続インターフェース
interface fastethernet 0/xx
switchport mode trunk
switchport trunk encapsulation dot1Q
switchport trunk allowed vlan xxxx(既存AWSアカウント用VLAN ID),1100

#FortiGate接続インターフェース
interface fastethernet 0/xx
switchport mode trunk
switchport trunk encapsulation dot1Q
switchport trunk allowed vlan 1100
~~~
次にFortiGateで802.1Q VLAN IDとBGPの設定をします。
~~~
config system interface
 edit "vif-vlan1100"
        set vdom "root"
        set ip 10.250.1.1 255.255.255.0
        set allowaccess ping
        set type vlan
        set interface "wan"
        set vlanid 1100
    next
end

config router bgp
    set as 65010
    set keepalive-timer 10
    set holdtime-timer 30
    config neighbor
        edit "10.250.1.2“
            set remote-as 65012
            set password *******
        next
    end
    config network
        edit 1
            set prefix 192.168.3.0 255.255.255.0
    next
    end
end
~~~
これでオンプレミスのPCからVPCのEC2インスタンスにPingなどの通信が可能になります。以上で作業は完了です。

# まとめ
本記事では1本のDirect Connect回線を複数のAWSアカウントで利用する方法として、占有型のDirect Connect回線でVIFを作成し別のAWSアカウントにシェアする方法を紹介しました。ポイントとしては作業前にきちんとトポロジーを書くことと、その際に各コンポーネントが持つAS番号を確実に認識し、設定する際に記入を誤ったりしないようにするところかなと思いました。単純なネットワーク構成ですがオンプレミスからVPCに到達するまでに意外と設定する画面が多いので、今自分がどのコンポーネントをどう設定しようとしているのかを意識しながら作業することが大事だと思います。