YAMAHA RTX830 で AWS と VPN
概要
YAMAHA RTX830 を買ったので、AWS と VPN 接続をしたのでその備忘録です。 基本的には次の公式とクラメソのを見てもらえれば解決すると思います。
CFn テンプレート
VPN 接続するに当たって AWS 側の必要なリソースは次が挙げられます。
- プライベートゲートウェイ
- AWS 側のマネージドな VPN エンドポイント(冗長化のためトンネルが 2 つ作成される)
- カスタマーゲートウェイ
- クライアント側の VPN エンドポイント
- AmazonVPCReadOnlyAccess ポリシーがアタッチされた IAM ユーザ
- RTX830 の簡単設定で使用する
本テンプレートでは、VPC、プラベートサブネット、ルートテーブルまで作成しています。そのため、YAMAHA RTX830 と AWS 側で VPN 接続が完了した場合には、EC2 インスタンスを立てるだけで接続可能となっています。(ルートテーブルなどベット作成不要!)
パラメータの CustomerGatewayIpAddress
に RTX830 側のグローバル IP アドレスを指定ください。
AWSTemplateFormatVersion: "2010-09-09"
Description: YAMAHA RTX830
Parameters:
CustomerGatewayIpAddress:
Type: String
AllowedPattern: (\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})
VpcCidr:
AllowedPattern: ^(\d|[01]?\d\d|2[0-4]\d|25[0-5])\.(\d|[01]?\d\d|2[0-4]\d|25[0-5])
Default: "10.0"
Description: VPC CIDR (*.*.0.0/16)
Type: String
Resources:
### VPC AND SUBNETS RESOURCES
Vpc:
Type: AWS::EC2::VPC
Properties:
CidrBlock: !Sub ${VpcCidr}.0.0/16
Tags:
- Key: Name
Value: !Ref AWS::StackName
PrivateSubnet01:
Type: AWS::EC2::Subnet
Properties:
CidrBlock: !Sub ${VpcCidr}.1.0/24
AvailabilityZone: !Select
- 0
- !GetAZs
Ref: AWS::Region
VpcId: !Ref Vpc
Tags:
- Key: Name
Value: !Sub ${AWS::StackName}-private-subnet-1
PrivateSubnet02:
Type: AWS::EC2::Subnet
Properties:
CidrBlock: !Sub ${VpcCidr}.2.0/24
AvailabilityZone: !Select
- 1
- !GetAZs
Ref: AWS::Region
VpcId: !Ref Vpc
Tags:
- Key: Name
Value: !Sub ${AWS::StackName}-private-subnet-2
RouteTableForPrivateSubnets:
Type: AWS::EC2::RouteTable
Properties:
VpcId: !Ref Vpc
Tags:
- Key: Name
Value: !Sub ${AWS::StackName}-route-table
PrivateSubnetRouteTableAssociation01:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
RouteTableId: !Ref RouteTableForPrivateSubnets
SubnetId: !Ref PrivateSubnet01
PrivateSubnetRouteTableAssociation02:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
RouteTableId: !Ref RouteTableForPrivateSubnets
SubnetId: !Ref PrivateSubnet02
### VPN RESOURCES
VpnGateway:
Type: AWS::EC2::VPNGateway
Properties:
Type: ipsec.1
Tags:
- Key: Name
Value: !Ref AWS::StackName
VpnGatewayAttachment:
Type: AWS::EC2::VPCGatewayAttachment
Properties:
VpcId: !Ref Vpc
VpnGatewayId: !Ref VpnGateway
CustomerGateway:
Type: AWS::EC2::CustomerGateway
Properties:
Type: ipsec.1
BgpAsn: 65000
IpAddress: !Ref CustomerGatewayIpAddress
Tags:
- Key: Name
Value: !Ref AWS::StackName
VpnConnection:
Type: AWS::EC2::VPNConnection
Properties:
Type: ipsec.1
CustomerGatewayId: !Ref CustomerGateway
VpnGatewayId: !Ref VpnGateway
Tags:
- Key: Name
Value: !Ref AWS::StackName
VpnGatewayRoutePropagation:
DependsOn: VpnConnection
Type: AWS::EC2::VPNGatewayRoutePropagation
Properties:
RouteTableIds:
- !Ref RouteTableForPrivateSubnets
VpnGatewayId: !Ref VpnGateway
### VPN IAM USER AND SECRETKEY RESOURCES
VpnUser:
Type: AWS::IAM::User
Properties:
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AmazonVPCReadOnlyAccess
AccessKey:
Type: AWS::IAM::AccessKey
Properties:
UserName: !Ref VpnUser
Outputs:
AccessKeyID:
Description: IAM User Access Key
Value: !Ref AccessKey
SecretAccessKey:
Description: IAM User Access Secret Key
Value: !GetAtt AccessKey.SecretAccessKey
VpnConnectonID:
Description: VPN Connection ID
Value: !Ref VpnConnection
VpcID:
Description: VPC ID, Private Gawateay exists
Value: !Ref Vpc
Export:
Name: !Sub ${AWS::StackName}-vpcid
デプロイ
グルーバル IP の確認
curl inet-ip.info
xxx.xxx.xxx.xxx
デプロイ
aws cloudformation deploy --stack-name rtx830-vpn --template template.yaml --capabilities CAPABILITY_IAM --parameter-overrides CustomerGatewayIpAddress=xxx.xxx.xxx.xxx
テスト
作成した VPC のプライベートサブネットに EC2 インスタンスを立てる(パブリック IP アドレスなし)。セキュリティグループに自宅のローカル LAN からのアクセスのみ許可します。 きっと EC2 インスタンスのプライベート IP アドレスに対して ssh できるはずです。