AWSIaC

AWSのCloudFormationでIaCを実践(8) – Route53 Resolver

AWS

前回はRoute53 PrivateHostedZoneを作成してレコードを登録しました。

前回(第7回) – Route53 HostedZone 
https://syachiku.net/awscloudformationiac6-trail/

最終的にVPC内のインスタンスであれば名前解決できましたが、VPC外部(VPNなどで接続した自宅PCなど)では名前解決ができずに失敗しました。

そこで、今回はその対応として「R53リゾルバー」をCloudFormationで構築し、VPC外部であるVPN経由でも正しく名前解決ができることを確認します。

ちなみにVPNサーバは以下の記事で構築しています。

AWS上のEC2でOpenVPNサーバを構築する
https://syachiku.net/ec2openvpn-1/

※今回実施する内容は少額ですが利用料金が発生します。あくまで自己責任でお願いします。

AWSのCloudFormationでIaCを実践してみる(すべての記事一覧)
第1回 – VPC  https://syachiku.net/awscloudformationiac1-vpc/
第2回 – Role  https://syachiku.net/awscloudformationiac2-iam-role/
第3回 – SecurityGroup  https://syachiku.net/awscloudformationiac3-sg/
第4回 – EC2  https://syachiku.net/awscloudformationiac4-ec2/
第5回 – VPC FlowLogs https://syachiku.net/awscloudformationiac5-flowlogs/
第6回 – CloudTrail https://syachiku.net/awscloudformationiac6-trail/
第7回 – R53 HostedZone https://syachiku.net/awscloudformationiac7-r53-hosted/

AWSではじめるインフラ構築入門 安全で堅牢な本番環境のつくり方

AWSではじめるインフラ構築入門 安全で堅牢な本番環境のつくり方

中垣健志
2,970円(09/21 22:45時点)
発売日: 2021/02/10
Amazonの情報を掲載しています

1. 前提条件

  • AWSアカウントが取得できていること
  • 適切な権限(=Admin相当)をもったIAMユーザーを作成していること
  • ルーティングなどの最低限のネットワークの知識があること
  • YAMLの書きかたを知っていること(CloudFormationはjsonもしくはyamlで書けますが、今回はyamlで書いていきます。)

2. 今回作成するAWS環境

  • Route 53 Resolver
    • AmazonVPCとオンプレ間の名前解決を簡単にしてくれるサービスです。
    • 構成するために最低2つのNetworkInterfaceが必要です。
    • 今回はPrivateSubnetの2つのAZに対して「インバウンドエンドポイント」を構築します
  • セキュリティグループ
    • 作成する「インバウンドエンドポイント」ようにセキュリティグループも作成します
    • TCP/UDPの53番ポートへのインバウンドアクセスをVPN接続時に割り当てられるNetworkである192.168.10.0/24に対して許可します。
    • VPNサーバに割り当てているセキュリティグループで10.1.0.0/16へのport53アクセスがない場合には追加しておいてください。
  • 追加設定
    • VPNサーバで割り当てている Push DNSを作成後の「インバウンドエンドポイント」に変更します。

3. 構成図

以下のような感じとなります。

R53 ResolverとSecurityGroupのところをCloudFormatinoスタックで構築します。

4. CloudFormation Template

こちらになります。

AWSTemplateFormatVersion: '2010-09-09'
Description:
  route53 resolver

Parameters:
  ProjectName:
    Type: String
    Default: "aws-infra"
  VpcID:
    Type: String
    Default: vpc-xxxx
  VpnCidrIp:
    Type: String
    Default: 192.168.10.0/24
  SubnetId01:
    Type: String
    Default: subnet-xxxx
  SubnetId02:
    Type: String
    Default: subnet-xxxx

Resources:
  ResolverEndpointSG:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupName: !Sub "${ProjectName}-resolver-endpoint-sg"
      GroupDescription: Security group for resolver endpoint.
      SecurityGroupIngress:
        - CidrIp: !Ref VpnCidrIp
          FromPort: 53
          ToPort: 53
          IpProtocol: tcp
        - CidrIp: !Ref VpnCidrIp
          FromPort: 53
          ToPort: 53
          IpProtocol: udp
      SecurityGroupEgress:
        - IpProtocol: '-1'
          CidrIp: 0.0.0.0/0
      Tags:
        - Key: Name
          Value: !Sub "${ProjectName}-resolver-endpoint-sg"
      VpcId: !Ref VpcID

  ResolverEndpoint:
    Type: AWS::Route53Resolver::ResolverEndpoint
    Properties:
      Direction: INBOUND # VPN->AWSへの問い合わせ
      IpAddresses:
        - SubnetId: !Ref SubnetId01
        - SubnetId: !Ref SubnetId02
      Name: !Sub "${ProjectName}-esolver-endpoint"
      SecurityGroupIds:
        - !Ref ResolverEndpointSG

5. スタックの作成

それでは先ほど作成したコードを使って、リソースを作成していきます。

マネージメントコンソールにログオンしてCloudFormationを開きます。
「スタックの作成」→「新しいリソースを使用」を選択します。「テンプレートファイルをアップロード」からコードのファイルを選択してアップします。

スタックの名称やパラメータを入力(デフォルトから変更したい場合には変更してください)してスタックの作成まで進めます。

6. 作成されたリソースの確認

しばらくするとステータスが「CREATE_COMPLETE」となりスタック作成が完了します。

それでは作成されたリソースを確認してみます。

6.1. Route53 Resolver

想定した通りに構築できています。

6.2. SecurityGroup

7. VPNのPush DNSサーバの変更

インバウンドエンドポイントに割り当てられたIPアドレスをDNSサーバとして参照するようにVPNの構成を変更します。

もし、継続して利用するならばEIPを使って固定した方が良いですね。

# vi /etc/openvpn/server.conf
push "dhcp-option DNS 10.1.100.4"
push "dhcp-option DNS 10.1.200.144"

# systemctl restart openvpn@server

設定が終わったら、再度、自宅PCからVPN接続します。

8. 動作確認

それでは自宅から名前解決ができることを確認したいと思います。
問題なく名前解決ができています。

PS C:\Users\user> ping vpn.aws-infra.local

vpn.aws-infra.local [10.1.10.160]に ping を送信しています 32 バイトのデータ:
10.1.10.160 からの応答: バイト数 =32 時間 =291ms TTL=255
10.1.10.160 からの応答: バイト数 =32 時間 =129ms TTL=255

これで自宅や会社などからVPN接続した状態でもAWS内のPrivateZoneの名前解決ができるようになりました。

9. まとめ

「R53リゾルバー」をCloudFormationで構築して、想定した通り自宅や会社などからVPN接続した状態でもAWS内のPrivateZoneの名前解決ができるようになりました。

AWSを効率的に学習する方法

私がAWSを学習するために使った学習材料は「Udemy」だけです。

まずは座学を行ってAWSプラクティショナー もしくは ソリューションアーキテクト試験を取得することを目標にしました。

具体的にはUdemyで以下の2つの商材を購入して学習しました。AWS公式が提供している模擬試験も受けていません。

Udemyは世界最大級のオンライン学習プラットフォームで、世界中の学びたい人と教えたい人をオンラインでつなぐサービスです。 Udemyは米国Udemy,Inc.が運営するプラットフォームで日本ではベネッセが事業パートナーとして協業をしています。 C2C(consumer to consumer)により生まれる豊富で多彩な講座により個人の学習ニーズに応じた学びをみつけることができます。

これだけでOK! AWS 認定ソリューションアーキテクト – アソシエイト試験突破講座(SAA-C02試験対応版)
【SAA-C02版】AWS 認定ソリューションアーキテクト アソシエイト模擬試験問題集(6回分390問)

今回は以上となります。

コメント

タイトルとURLをコピーしました