AWS

ACM証明書で、独自ドメイン通信をSSL化する

ACM証明書を使用して、HTTPSで独自ドメインにアクセスする構成

以下のページで、Route 53で取得した独自ドメインを使って、ALBにアクセスする構成をご紹介しました。

ただし上記の構成では、SSL化されていないHTTP通信でのみアクセス可能です。そこで今回は、ACMで取得した証明書を使用して、HTTPSでアクセスできるように設定します。

構築する環境

Amazon.co.jp: AWS認定資格試験テキスト AWS認定ソリューションアーキテクト - アソシエイト 改訂第2版 : NRIネットコム株式会社, 佐々木 拓郎, 林 晋一郎, 金澤 圭: 本
Amazon.co.jp: AWS認定資格試験テキスト AWS認定ソリューションアーキテクト - アソシエイト 改訂第2版 : NRIネットコム株式会社, 佐々木 拓郎, 林 晋一郎, 金澤 圭: 本
Diagram of on ssl your own doamin using ACM certificate.

基本的な構成は、先述ご紹介したページと同一です。今回はRoute 53で取得したドメイン(awstut.net)へのアクセスを、ACM証明書を使ってSSL化することを目的とします。

CloudFormationテンプレートファイル

上記の構成をCloudFormationで構築します。以下のURLにCloudFormationテンプレートを配置してます。

awstut-fa/023 at main · awstut-an-r/awstut-fa
Contribute to awstut-an-r/awstut-fa development by creating an account on GitHub.

テンプレートファイルのポイント解説

本ページでは、ACMやSSL化に関する解説のみを行います。プライベートサブネット内のEC2をALBにアタッチする方法や、Route 53に関しては、以下のページをご確認ください。

ACM証明書を取得する

fa-023-acm.yamlでACMリソースを定義しています。

Resources:
  Certificate:
    Type: AWS::CertificateManager::Certificate
    Properties:
      DomainName: !Ref DomainName
      DomainValidationOptions:
        - DomainName: !Ref DomainName
          HostedZoneId: !Ref HostedZoneId
      ValidationMethod: DNS
Code language: YAML (yaml)

DomainNameプロパティに、証明書を取得するドメイン名を設定します。今回は「awstut.net」を指定します。ACMで証明書を取得する場合、そのドメインの所有権を検証を経る必要があります。

Amazon 認証局 (CA) がサイトの証明書を発行する前に、 AWS Certificate Manager (ACM) は、ユーザーがリクエストで指定したすべてのドメイン名の所有者または管理者であることを証明する必要があります。所有権を証明するには、ドメインネームシステム (DNS) 検証を使用するか、証明書をリクエストした時点で E メール検証を使用することを選択できます。

一般的に、次の理由により、E メール検証よりも DNS 検証を使用することをお勧めします。

ドメインの所有権の検証

今回は推奨に従い、DNS検証を使用します。ValidationMethodプロパティに「DNS」を設定し、DNS検証を指定します。DomainValidationOptionsプロパティで、DNS検証に必要なパラメータを設定できます。DomainNameおよびHostedZoneIdプロパティで、関連づけるドメインの情報を設定します。「awstut.net」のドメイン名とホストゾーンIDとを指定します。

ALBに443番ポートでリッスンさせる

通信をSSL化するためのポイントはポート番号です。今回の構成では、下図の通りに通信が発生します。

Port 443 from the Internet to the ALB, and port 80 from the ALB to the EC2 instance.

ALBに443番ポートで待ち受けさせるためには、2点に気を付ける必要があります。

ALBのセキュリティグループ

1点目はALBに適用するセキュリティグループです。セキュリティグループはfa-023-vpc.yamlに定義しています。

Resources:
  ALBSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupName: !Sub "${Prefix}-ALBSecurityGroup"
      GroupDescription: Allow HTTPS Only.
      VpcId: !Ref VPC
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: !Ref HTTPSPort
          ToPort: !Ref HTTPSPort
          CidrIp: 0.0.0.0/0
Code language: YAML (yaml)

FromPortおよびToPortプロパティに「443」を設定します。これでHTTPS通信のみを許可するということになります。加えてCidrIpプロパティに「0.0.0.0/0」と設定することで、送信元を制限せず、インターネットからの通信を許可するということになります。

ALBリスナー

2点目はALBリスナーです。ALB関係のリソースはfa-023-alb.yamlに定義しています。

Resources:
  ALBListener:
    Type: AWS::ElasticLoadBalancingV2::Listener
    Properties: 
      Certificates:
        - CertificateArn: !Ref Certificate
      DefaultActions: 
        - TargetGroupArn: !Ref ALBTargetGroup
          Type: forward
      LoadBalancerArn: !Ref ALB
      Port: !Ref HTTPSPort
      Protocol: HTTPS
Code language: YAML (yaml)

Protocolプロパティを「HTTPS」を、Portプロパティに「443」を指定します。これでALBリスナーとしても、HTTPS通信を待ち受けることができるようになります。

ALBにACM証明書をアタッチする

改めてALBリスナーを確認します。

Resources:
  ALBListener:
    Type: AWS::ElasticLoadBalancingV2::Listener
    Properties: 
      Certificates:
        - CertificateArn: !Ref Certificate
      ...
Code language: YAML (yaml)

ALBにACM証明書をアタッチするためには、Certificatesプロパティを設定します。先述の証明書のIDを指定します。

環境構築

CloudFormationを使用して、本環境を構築し、実際の挙動を確認します。

CloudFormationスタックを作成し、スタック内のリソースを確認する

CloudFormationスタックを作成します。スタックの作成および各スタックの確認方法については、以下のページをご確認ください。

各スタックのリソースを確認した結果、今回作成された主要リソースの情報は以下の通りです。

  • インスタンス1のID:i-0e050ebec2df09db5
  • インスタンス2のID:i-02470fc6eacfe5a6f
  • ALBのID:fa-023-ALB
  • Route 53のレコード:awstut.net
  • ACM証明書のID:413e0700-093b-4783-9dee-575c9d345fe8

AWS Management Consoleからも、リソースの作成状況を確認します。まずRoute 53レコードの作成状況を確認します。

Domain name and ALB are registered in Route 53.

独自ドメイン「awstut.net」にALBが関連づいていることがわかります。次にACMを確認します。

An ACM certificate for your own domain has been created.

「awstut.net」用の証明書が作成されていることが確認できます。Associated resourcesの項目を見ると、この証明書がALBに関連づいていることもわかります。続いてALBを確認します。

The ACM certificate is attached to the ALB listener, and it is listening on 443.

ALBリスナーを見ると、テンプレートで設定した通り、HTTPS(443)で受け付けることと、先述のACMがアタッチされていることがわかります。

Two EC2 instances are registered in the ALB target group.

ALBターゲットグループを見ると、作成した2つのEC2インスタンスが登録されていることがわかります。

HTTPSでALBにアクセスする

準備が整いましたので、ブラウザから、HTTPSで独自ドメインにアクセスします。

It is possible to access the ALB via HTTPS 1.
It is possible to access the ALB via HTTPS 2.

HTTPSでALBにアクセスすることができました。以上より、独自ドメインを使用したALBへのアクセスを、SSL化することができました。

まとめ

ACM証明書を使用して、ALBへのアクセスをSSL化する方法を確認しました。

HTTPSでALBにアクセスするためには、ALBのセキュリティグループおよびALBリスナーの設定に注意する必要があることを確認しました。

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