ACM講座

この講座では、AWSの証明書管理サービスであるACMについて学びます。

  • SSL/TLS証明書の役割と重要性
  • AWS Certificate Manager(ACM)の概要
  • 証明書の認証レベル(DV・OV・EV)
  • ACMでの証明書発行と自動更新
  • AWSサービスとの連携(ELB・CloudFront・API Gateway)

1. ACMとは

1.1 SSL/TLS証明書とは

SSL/TLS証明書とは、インターネット上でデータをやり取りする際に通信を「暗号化」し、かつ通信相手が「本物である」ことを証明するための電子的な身分証明書のことです。ブラウザのアドレスバーに表示される「鍵マーク」や、URLが http:// ではなく https:// で始まっているWebサイトは、この証明書が正しく導入されています。

この証明書には、大きく分けて2つの重要な役割があります。

1つ目は「盗聴や改ざんの防止」です。インターネットという開かれたネットワークにおいて、クレジットカード情報やパスワードなどの重要なデータをそのまま送るのは、透明な封筒で手紙を送るようなもので大変危険です。SSL/TLS証明書を使うことで、この通信経路を強力に暗号化し、第三者が中身を覗き見たり書き換えたりできないように保護します。

2つ目は「Webサイト運営者の身元保証」です。昨今は、本物の銀行やショッピングサイトに酷似した偽サイト(フィッシングサイト)による被害が後を絶ちません。信頼できる第三者機関(認証局)によって発行された証明書を持つことは、「このサイトは間違いなくその組織が運営している本物である」ということを客観的に証明するパスポートのような役割を果たし、ユーザに安心感を与えます。

なお、言葉の定義として「SSL」と「TLS」が併記されていますが、技術的には「SSL」はすでに古い規格であり、現在実際に使われているのはより安全な新しい規格である「TLS」です。しかし、長年使われてきた名残で、現在でも習慣的に「SSL」や「SSL/TLS」という名称が広く使われています。

1.2 AWS Certificate Manager (ACM) とは

AWS Certificate Manager(通称 ACM)は、AWS上でSSL/TLS証明書を「発行」「管理」「更新」するためのマネージドサービスです。

従来、WebサイトをHTTPS化するためには、外部の認証局に年間数万円の費用を払って証明書を購入し、複雑なコマンドを叩いてサーバにインストールする必要がありました。

さらに、エンジニアを最も悩ませていたのが「有効期限の管理」です。通常1年ごとにやってくる更新作業をうっかり忘れてしまい、「証明書の期限切れ」によって突然サイトに警告画面が表示され、サービスが停止してしまうという事故は、インフラ運用における典型的なトラブルの一つでした。

ACMは、これらの課題をすべて解決する画期的なサービスです。

まず、ACMで発行されるパブリック証明書は「無料」で利用できます。そして最大の特徴は、AWSが証明書の有効期限を自動で管理し、期限が近づくと勝手に「自動更新」してくれる点です。これにより、コストを削減できるだけでなく、更新忘れによるサービス停止のリスクから完全に解放されます。

また、ACMで発行した証明書は、ELB(ロードバランサー)やCloudFrontといったAWSのサービスに、管理画面から選択するだけで即座に取り付けることができます。Webサーバ(EC2)の内部に直接証明書ファイルを置くのではなく、その手前に立つAWSサービス側で暗号化の処理を肩代わりさせることで、運用の手間を極限まで減らしつつ、安全な通信環境を簡単に構築できるのが大きなメリットです。

2. 証明書の認証レベルとACMでの取り扱い

まず、一般的なSSL/TLS証明書には、発行時の審査の厳しさに応じて3つのグレード(認証レベル)が存在することを知っておく必要があります。

2.1 証明書のレベル

1つ目はドメイン認証(DV)です。これは「ドメインの持ち主であること」だけを機械的に確認する最も手軽なタイプです。発行スピードが速く安価ですが、運営元の組織が実在するかまでは確認しません。

2つ目は企業認証(OV)です。ドメインの所有権に加え、法的な書類などで「運営組織が実在するか」までを審査します。

3つ目はEV認証です。最も厳格な審査基準をクリアした組織にのみ発行され、銀行や金融機関などでよく利用されます。かつてはブラウザのアドレスバーが緑色になることで知られていました。

これらを踏まえた上で、AWS Certificate Manager (ACM) で扱える証明書について解説します。

2.2 ACMで利用できる証明書

ACMで利用できる証明書は大きく分けてパブリック証明書プライベート証明書インポートした証明書の3種類があります。

最も一般的に利用されるのがパブリック証明書です。これは先ほど説明したグレードのうち、「ドメイン認証(DV)」に該当します。誰でも無料で発行でき、自動更新にも対応しているため、通常のWebサイト運営であればこれで十分です。

ただし、ACMで発行できるのはこのDVのみであり、よりグレードの高いOVやEVを直接発行することはできません。

次に「プライベート証明書」です。これはAWS Private CAという別のサービスと連携して発行するもので、インターネットには公開しない社内システムや、IoT機器同士の通信など、閉じたネットワーク内で使用するためのものです。こちらは有料となります。

最後に、もしどうしてもACMで「企業認証(OV)」や「EV認証」を使いたい場合は、「インポート」という機能を使います。外部の認証局でお金を払って購入した証明書ファイルをACMに持ち込む(アップロードする)ことで、ELBやCloudFrontで使用できるようになります。ただし、持ち込んだ証明書はACMの自動更新機能が働かないため、期限が切れる前に手動で更新作業を行う必要がある点に注意が必要です。

3. ACMと連携する代表的なAWSサービス

ACMで発行した証明書は、実はEC2インスタンス(Webサーバ)の中に直接インストールして使うわけではありません。基本的には、サーバの手前に立って通信を受け付ける「マネージドサービス」に紐付けて使用します。ここでは、特に利用頻度の高い3つのサービスとの連携について説明します。

ACM証明書と各サービスの連携構成を以下の図に示します。

graph TB
    ACM["ACM<br>証明書発行・自動更新"]

    ACM -->|証明書を適用| ELB["ELB<br>(ALB)"]
    ACM -->|証明書を適用| CF["CloudFront<br>※バージニア北部で発行"]
    ACM -->|証明書を適用| APIGW["API Gateway"]

    User["ユーザ<br>(ブラウザ/アプリ)"]

    User -->|HTTPS| ELB
    User -->|HTTPS| CF
    User -->|HTTPS| APIGW

    ELB -->|HTTP| EC2["EC2<br>(Webサーバ)"]
    CF -->|HTTP| S3["S3<br>(静的コンテンツ)"]
    APIGW -->|HTTP| Lambda["Lambda<br>(バックエンド処理)"]

3.1 ELB

まず、最も代表的なのが「Elastic Load Balancing (ELB)」、特にALBとの連携です。

Webサーバへのアクセスを振り分けるロードバランサーにACM証明書をセットすることで、ユーザからALBまでの区間をHTTPSで暗号化します。ここでの重要なポイントは、ALBが暗号化された通信を受け取り、そこで暗号を解除(復号)してから、背後のEC2にはHTTP(平文)でデータを渡すという処理を行ってくれる点です。これをSSLオフロードと呼びます。これにより、EC2側で重たい暗号化処理をする必要がなくなり、サーバのCPU負荷を大幅に下げられるほか、サーバが何十台に増えても証明書の管理はALBの一箇所だけで済むため、運用が劇的に楽になります。

SSLオフロードの仕組みを以下の図に示します。

graph LR
    User["ユーザ"]
    ALB["ALB<br>(ACM証明書を設定)<br>暗号化を解除"]
    EC2A["EC2-A"]
    EC2B["EC2-B"]

    User -->|"HTTPS(暗号化)"| ALB
    ALB -->|"HTTP(平文)"| EC2A
    ALB -->|"HTTP(平文)"| EC2B

3.2 CloudFront

次に、「Amazon CloudFront」との連携です。

CloudFrontを使って独自ドメインでコンテンツ配信を行う際、ACM証明書を利用することで、世界中のエッジロケーションとユーザとの間の通信をHTTPS化します。これはWebサイト全体の高速化とセキュリティを両立させるための鉄板構成です。

📝 証明書のリージョン制限
CloudFrontで使用する証明書は、必ず「米国東部(バージニア北部)リージョン」で発行する必要があります。東京リージョンで発行した証明書はCloudFrontでは使用できません。

3.3 API Gateway

最後に、「Amazon API Gateway」との連携です。

サーバレスアーキテクチャでAPIを構築する際、デフォルトのURLではなく api.example.com のような独自のカスタムドメインでAPIを公開したい場合にACMを利用します。スマホアプリやフロントエンドからの通信を安全にAPI Gatewayで受け止め、認証やルーティングを行った上で、Lambdaなどのバックエンド処理へと繋ぐ役割を果たします。

これらのサービスに共通しているのは、面倒な暗号化の処理や証明書の管理を、AWSのマネージドサービス側(入り口)で一手に引き受けてくれるという点です。

4. 主なユースケース

ACMは、AWSでHTTPS通信を実現するための証明書管理サービスです。以下に代表的なユースケースを紹介します。

4.1 WebサイトのHTTPS化

ALBやCloudFrontにACM証明書を適用して、Webサイト全体をHTTPS化します。ブラウザの警告表示を防ぎ、ユーザに安心してサービスを利用してもらえる環境を構築できます。証明書の自動更新により、期限切れの心配がありません。

4.2 APIエンドポイントのセキュア化

API GatewayにACM証明書を適用して、モバイルアプリやSPAからのAPI通信を暗号化します。独自ドメインでAPIを公開することで、ブランドイメージの統一とセキュリティの両立が可能です。

4.3 複数ドメイン・サブドメインの一括管理

ワイルドカード証明書(*.example.com)を発行することで、1つの証明書で複数のサブドメインに対応できます。新しいサブドメインを追加する際も、証明書の追加発行が不要で運用が簡素化されます。

5. 設計のポイント

ACMを利用する際の主要な設計検討項目を以下にまとめます。

設計項目 検討内容 推奨・注意事項
証明書タイプ パブリック/プライベート インターネット公開はパブリック(無料)、内部システムはプライベート
検証方法 DNS検証/メール検証 DNS検証を推奨(自動更新が確実に動作)
発行リージョン 証明書を作成するリージョン CloudFront用は必ずバージニア北部(us-east-1)で発行
ドメイン指定 単一/複数/ワイルドカード 将来のサブドメイン追加を見越してワイルドカードも検討
証明書の認証レベル DV/OV/EV ACM発行はDVのみ。OV/EVが必要な場合は外部取得してインポート
インポート証明書 外部証明書の利用 自動更新されないため、期限管理を確実に行う
関連付け ELB/CloudFront/API Gateway SSLオフロードでサーバ側の負荷を軽減

6. まとめ

この講座では、AWSの証明書管理サービスであるACMについて学びました。

  • SSL/TLS証明書は通信の暗号化とWebサイト運営者の身元保証を行うための電子証明書
  • ACMはパブリック証明書を無料で発行でき、自動更新により期限切れのリスクを解消する
  • 証明書にはDV(ドメイン認証)、OV(企業認証)、EV認証の3つのレベルがあり、ACMで発行できるのはDVのみ
  • ACM証明書はELB、CloudFront、API Gatewayなどのマネージドサービスに紐付けて使用する
  • CloudFrontで使用する証明書は、必ず米国東部(バージニア北部)リージョンで発行する必要がある