AWS Certificate Manager
SSL/TLS 証明書のプロビジョニング、管理、自動更新を行うサービスで、CloudFront や ALB での HTTPS 化を無料の証明書で実現する
概要
AWS Certificate Manager (ACM) は、SSL/TLS 証明書の発行、管理、デプロイ、自動更新を提供するサービスです。ACM が発行するパブリック証明書は無料で、CloudFront、Elastic Load Balancing、API Gateway などの AWS サービスにワンクリックで関連付けできます。DNS 検証またはメール検証によるドメイン所有権の確認後、証明書が自動的に発行され、有効期限前に自動更新されるため、証明書の期限切れによるサービス障害を防止します。
証明書の発行フローと DNS 検証の仕組み
ACM でパブリック証明書を発行するには、まず対象のドメイン名 (例: example.com、*.example.com) を指定してリクエストを作成します。ドメインの所有権を証明するために DNS 検証またはメール検証を選択しますが、DNS 検証が強く推奨されます。DNS 検証では、ACM が指定する CNAME レコードをドメインの DNS に追加するだけで検証が完了し、このレコードが存在する限り証明書の自動更新も自動的に行われます。Route 53 を使用している場合は、ACM のコンソールからワンクリックで CNAME レコードを追加できます。メール検証はドメインの管理者メールアドレスに確認メールを送信する方式で、更新のたびにメール承認が必要になるため運用負荷が高くなります。ワイルドカード証明書 (*.example.com) を発行すれば、サブドメインごとに個別の証明書を管理する必要がなくなります。ACM が発行する証明書は Amazon Trust Services が認証局 (CA) として署名しており、主要なブラウザとオペレーティングシステムで信頼されています。Let's Encrypt も無料の証明書を提供していますが、ACM は AWS サービスとの統合と自動更新の信頼性で優位です。
AWS サービスへの証明書デプロイと自動更新の運用
ACM で発行した証明書は、CloudFront ディストリビューション、Application Load Balancer (ALB)、Network Load Balancer (NLB)、API Gateway のカスタムドメインに関連付けて使用します。CloudFront で使用する証明書は us-east-1 リージョンで発行する必要がある点は、よくある落とし穴です。ALB や NLB では証明書をリスナーに関連付け、HTTPS ターミネーションをロードバランサーで行う構成が標準です。1 つのリスナーに複数の証明書を関連付けることも可能で、SNI (Server Name Indication) により適切な証明書が自動選択されます。SSL 証明書の関連書籍 (Amazon) では、TLS の仕組みと証明書管理のベストプラクティスが解説されています。自動更新は証明書の有効期限の 60 日前から開始され、DNS 検証の CNAME レコードが正しく設定されていれば、人手の介入なしに更新が完了します。更新の成否は ACM のコンソールや EventBridge イベントで確認でき、更新失敗時にアラートを発報する仕組みを構築しておくことが推奨されます。
プライベート証明書と EC2 での証明書利用
ACM Private CA (Certificate Authority) を使うと、組織内部で使用するプライベート証明書を発行できます。マイクロサービス間の mTLS (相互 TLS) 認証、社内システムの HTTPS 化、IoT デバイスの証明書管理など、パブリック証明書では対応できないユースケースに対応します。プライベート CA の運用には月額料金が発生しますが、大量の証明書を一元管理できるメリットがあります。EC2 インスタンス上の Web サーバー (Nginx、Apache) で ACM の証明書を直接使用することはできません。EC2 で HTTPS を終端する場合は、ALB を前段に配置して ACM 証明書を ALB に関連付けるか、Nitro Enclaves 用の ACM 統合を利用する必要があります。CloudFormation での証明書管理では、AWS::CertificateManager::Certificate リソースで証明書を宣言的に定義できますが、DNS 検証の CNAME レコード作成は別途 Route 53 のリソースとして定義する必要があります。証明書の ARN をスタック間で共有する場合は、SSM Parameter Store にエクスポートしておくと、リージョンをまたいだ参照が容易になります。