コーヒーが好きな木谷映見です。
先日、AWS Global Accelerator の概要と、Global Accelerator を作成する CloudFormation テンプレートを紹介するブログを書きました。
今回は AWS Certificate Manager (ACM) の証明書と Amazon Route53 を使用して独自ドメインで Global Accelerator 経由の https アクセスをする方法を検証しましたので手順をご紹介します。
検証
今回の構成図は以下です。 ACM の証明書と Route53 を使用して独自ドメインで https アクセスします。
事前準備
- 独自ドメインを取得し Route53 でホストゾーンに登録しておく
- 自身で任意のレジストラから独自ドメインを取得している場合、Route53 に独自ドメインのホストゾーンを作成しておく
- 独自ドメインを持っておらず Route53 で新規独自ドメインを取得する場合、以下ブログを参考に 新規ドメインの登録手順 の最初から 17. ホストゾーンのデフォルトの状態を把握する まで実施しておく
- 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>
参考
emi kitani(執筆記事の一覧)
AS部LX課。2022/2入社、コーヒーとサウナが好きです。執筆活動に興味があります。AWS認定12冠。