Global Accelerator を導入し ACM の証明書と Route53 を使用して独自ドメインでアクセスする

記事タイトルとURLをコピーする


コーヒーが好きな木谷映見です。

先日、AWS Global Accelerator の概要と、Global Accelerator を作成する CloudFormation テンプレートを紹介するブログを書きました。

blog.serverworks.co.jp

今回は AWS Certificate Manager (ACM) の証明書と Amazon Route53 を使用して独自ドメインで Global Accelerator 経由の https アクセスをする方法を検証しましたので手順をご紹介します。

検証

今回の構成図は以下です。 ACM の証明書と Route53 を使用して独自ドメインで https アクセスします。

事前準備

  • 独自ドメインを取得し Route53 でホストゾーンに登録しておく

blog.serverworks.co.jp

  • VPC 関連リソースの作成
    • ALB を作成するため、AZ をまたがるパブリックサブネットを二つ以上準備
    • EC2 インスタンスに Systems Manager フリートマネージャーで RDP 接続するため、NAT Gateway を構築
  • Web サーバー機能を有効にした EC2 インスタンスを作成
    • 今回は EC2 インスタンスで Windows Server 2022(ami-0ae001189e222cd97)を起動
    • Systems Manager フリートマネージャーで EC2 インスタンスに RDP 接続し、IIS の機能を有効化

ACM でパブリック証明書を作成

ACM でパブリック証明書を作成し、Route53 でドメイン認証まで実施します。

ACM コンソール画面を開きパブリック証明書をリクエストします。

  • 証明書をリクエスト
    • 証明書タイプ:パブリック証明書をリクエスト
    • ドメイン名:(例)hoge.swx.emiki.jp
      • ※アクセスに使用する完全修飾ドメイン名(FQDN)を入力
    • 検証方法:DNS 認証
    • キーアルゴリズム:RSA 2048

パブリック証明書をリクエストすると、ステータスが「保留中の検証」状態になります。 「Route53 でレコードを作成」をクリックします。

レコードを作成する画面が表示されるので「レコードを作成」をクリックします。

「DNS レコードが正常に作成されました」と表示されれば OK です。 画面を再読み込みすると、ステータスが「成功」になっています。

Route53 のコンソール画面を確認すると、証明書の CNAME レコードが登録されています。

ALB の作成

ALB を作成します。

ターゲットグループの作成

EC2 コンソール画面を開き [ロードバランシング] - [ターゲットグループ] - [ターゲットグループの作成]をクリックします。

  • グループの詳細の指定
    • 基本的な設定
      • ターゲットタイプの選択:インスタンス
      • ターゲットグループ名:(例)tg
      • プロトコル:HTTP
      • ポート:80
        • ※ALB で通信は復号されるため ALB~EC2 インスタンス間は HTTP
      • VPC:作成した VPC を選択
      • プロトコルバージョン:HTTP1
    • ヘルスチェック
      • ヘルスチェックプロトコル:HTTP
      • ヘルスチェックパス:/
      • ヘルスチェックの詳細設定
        • ポート:トラフィックポート
        • 正常のしきい値:5
        • 非正常のしきい値:2
        • タイムアウト:5 秒
        • 間隔:30 秒
        • 成功コード:200
  • ターゲットの登録
    • 「使用可能なインスタンス」で Web サーバーである EC2 インスタンスにチェックし「保留中として以下を含める」をクリックする

「ターゲットグループの作成」をクリックしてターゲットグループの作成は完了です。

ALB の作成

EC2 コンソール画面を開き [ロードバランシング] - [ロードバランサー] - [ロードバランサーの作成]をクリックします。 「ロードバランサータイプ」では ALB の欄で「作成」をクリックします。

  • 基本的な設定
    • ロードバランサー名:(例)alb
    • スキーム:インターネット向け
    • IP アドレスタイプ:IPv4
  • ネットワークマッピング
    • VPC:作成した VPC を選択
    • AZ をまたがるパブリックサブネットを二つ選択
    • セキュリティグループ:HTTPS ポート 443 のインバウンドアクセスを許可したセキュリティグループを設定
  • リスナーとルーティング
    • プロトコル:HTTPS
    • ポート:443
    • デフォルトアクション:作成したターゲットグループを選択
  • セキュアリスナーの設定
    • セキュリティポリシー:ELBSecurityPolicy-TLS-1-2-2017-01
    • デフォルトの SSL/TLS 証明書:ACM から作成した証明書を選択

ALB を作成してすぐは状態が「Provisioning」になっています。
少し待つと状態が「Active」になります。

ブラウザで https://ALB の DNS 名 を開くと、警告が出ますが IIS のトップページが表示されます。

Global Accelerator の作成で使用するので、ALB の ARN をコピーして控えておいてください。

Route53 で A レコード(エイリアスレコード)を登録する

Route53 で ALB の名前解決をするように、A レコード(エイリアスレコード)を登録します。

Route53 で該当のホストゾーンを選択し、「レコードを作成」をクリックします。

  • レコード名:(例)hoge
  • レコードタイプ:A
  • エイリアス:チェックする
  • トラフィックのルーティング先
    • Application Load Balancer と Classic Load Balacer へのエイリアス
    • リージョン:(例)アジアパシフィック(東京)
    • 作成した ALB を選択

レコードを作成し、ブラウザで https://独自ドメイン名 を開くと、IIS のトップページが表示されます。

nslookup で名前解決してみると、現在の ALB のグローバル IP アドレスは以下のようになっている模様です。

C:\Users\user>nslookup hoge.swx.emiki.jp
サーバー:  dns.google
Address:  8.8.8.8

権限のない回答:
名前:    hoge.swx.emiki.jp
Addresses:  52.68.45.68
          13.231.34.100


C:\Users\user>

Global Accelerator の作成(CloudFormation)

CloudFormation で作成してみました。 以下のテンプレートを使用します。

AWSTemplateFormatVersion: "2010-09-09"
Description: Create a Global Accelerator.

Parameters:
  GAName:
    Type: String
    Description: (Required) Enter Global Accelerator Name.
    Default: ga-https
  EndpointId:
    Type: String
    Description: (Required) Enter Global Accelerator EndpointId (ALB ARN).
    Default: arn:aws:elasticloadbalancing:ap-northeast-1:~~~ # ALB ARN
  EndpointRegion:
    Type: String
    Description: (Required) Enter Region.
    Default: ap-northeast-1

Metadata:
  AWS::CloudFormation::Interface:
    ParameterGroups:
      -
        Label:
          default: "Configuration"
        Parameters:
          - "GAName"
          - "EndpointId"
          - "EndpointRegion"

Resources:
  GA:
    Type: AWS::GlobalAccelerator::Accelerator
    Properties: 
      Enabled: true
      IpAddressType: "IPV4"
      Name: !Ref GAName
      Tags:
        - Key: "Name"
          Value: !Ref GAName

  GAListener:
    Type: AWS::GlobalAccelerator::Listener
    Properties: 
      AcceleratorArn: !Sub ${GA} # Get the ARN of the accelerator
      ClientAffinity: "NONE"
      PortRanges: 
        - FromPort: 443
          ToPort: 443
      Protocol: "TCP"

  GAEndpoint:
    Type: AWS::GlobalAccelerator::EndpointGroup
    Properties: 
      EndpointConfigurations: 
        - ClientIPPreservationEnabled: false
          EndpointId: !Ref EndpointId
          Weight: 128
      EndpointGroupRegion: !Ref EndpointRegion
      HealthCheckIntervalSeconds: 30
      HealthCheckPath: "/"
      HealthCheckPort: 80
      HealthCheckProtocol: "HTTP"
      ListenerArn: !Ref GAListener
      ThresholdCount: 3
      TrafficDialPercentage: 100.0

前回のブログとはリスナーのポートが 443 になっているところが違います。

スタック作成

スタック作成時はパラメータで以下の値を入力してください。

パラメータ 入力値 備考
GAName 例)ga-https アクセラレータの名前
EndpoitId 例)arn:aws:elasticloadbalancing:ap-northeast-1:123456789012:loadbalancer/app/alb/f56174ee63e60413 ALB の ARN
EndpointRegion 例)ap-northeast-1 Web サーバーのエンドポイント(ALB)が存在するリージョン

約 1 分ほどでデプロイが完了しました。
Global Accelerator のコンソールを見てみると、静的パブリック IP アドレスが二つ発行されているのが分かります。

今回発行された以下の静的グローバル IP アドレス二つに https アクセスすると、警告は出ますがアクセスできることが分かります。

  • 13.248.216.174
  • 76.223.73.23

Global Accelerator の DNS 名でも、警告は出ますがアクセスできることが分かります。

設定値について簡単に補足します。

リスナー設定 AWS::GlobalAccelerator::Listener

項目 設定値 説明
ClientAffinity:
クライアントアフィニティ
NONE 特定のクライアントを同じエンドポイントに送信する設定。デフォルトは無効
PortRanges:
ポート
443 Global Acceleratorが受け付けるポート。ALB のリスナー設定に準拠
Protocol:
プロトコル
TCP Global Acceleratorが受け付けるプロトコル。ALB のリスナー設定に準拠

エンドポイントグループ AWS::GlobalAccelerator::EndpointGroup

エンドポイントグループ AWS::GlobalAccelerator::EndpointGroup をご参照ください。

Route53 で A レコード(エイリアスレコード)を編集する

Route53 で Global Accelerator の名前解決をするように、 A レコード(エイリアスレコード)を編集します。

Route53 のコンソール画面で該当のホストゾーンを選択し、A レコードにチェックすると、画面右にレコードの詳細が表示されます。
「レコードを編集」をクリックします。

レコード名とレコードタイプは変更せず、以下項目を変更します。

  • トラフィックのルーティング先
  • Global Accelerator へのエイリアス
  • 作成した Global Accelerator を選択

設定を保存します。
これで、独自ドメインの名前解決先が Global Accelerator に変更されました。

ブラウザで https://独自ドメイン名 を開くと、IIS のトップページが表示されます。

nslookup で名前解決してみると、Global Accelerator が発行した二つの静的グローバル IP アドレスが返ってきます。

C:\Users\user>nslookup hoge.swx.emiki.jp
サーバー:  dns.google
Address:  8.8.8.8

権限のない回答:
名前:    hoge.swx.emiki.jp
Addresses:  13.248.216.174
          76.223.73.23


C:\Users\user>

Route53 で A レコード(非エイリアスレコード)を編集する

試しに Global Accelerator が発行した二つの静的グローバル IP アドレスを、エイリアスレコードではなく普通の A レコードとして登録してみます。
エイリアスレコードの登録時とは有効期限 (TTL) を設定可能な点が異なります。

変わらず https://独自ドメイン名 でアクセス可能で、nslookup でも Global Accelerator が発行した二つの静的グローバル IP アドレスが返ってきます。

C:\Users\user>nslookup hoge.swx.emiki.jp
サーバー:  dns.google
Address:  8.8.8.8

権限のない回答:
名前:    hoge.swx.emiki.jp
Addresses:  76.223.73.23
          13.248.216.174


C:\Users\user>

参考

blog.serverworks.co.jp

docs.aws.amazon.com

emi kitani(執筆記事の一覧)

AS部LX課。2022/2入社、コーヒーとサウナが好きです。執筆活動に興味があります。AWS認定12冠。