AWS CDKによる【ACM】の構築

皆様こんにちは。
AWS CDKを利用してマルチAZ3層アーキテクチャ構築をしていきます。
この記事ではACMの作成を行います。

目次はこちら

1.ACMとは

AWS Certificate Manager (ACM) は、Amazon Web Services (AWS) のサービスで、SSL/TLS証明書の管理と発行を簡単にするためのツールです。ACMを使用することで、ウェブサイトやアプリケーションのセキュリティを強化し、HTTPSプロトコルを利用して安全な通信を確保できます。

機能

  1. 証明書の発行

    • ACMは、AWSが提供する無料のSSL/TLS証明書を発行します。これにより、HTTPS経由での安全な通信が可能になります。
    • 証明書の発行には、ドメインの所有権を確認するための検証プロセスが必要です。これにはDNS検証やメール検証が含まれます。
  2. 証明書の管理

    • ACMは証明書の更新や失効を自動的に管理します。証明書の有効期限が切れる前に、ACMは自動的に証明書を更新します。
    • 証明書の管理作業をAWSが代行するため、ユーザーは証明書の有効期限や更新を気にする必要がありません。
  3. 証明書の配布

    • ACMで発行した証明書は、AWSのサービス(例えば、Amazon CloudFront、Elastic Load Balancing、Amazon API Gatewayなど)に簡単にアタッチできます。
    • ACMは、これらのAWSサービスに証明書を自動的にデプロイし、HTTPS通信を有効にします。
  4. 証明書の検証

    • 証明書を発行する際には、ドメインの所有権を証明するための検証プロセスが行われます。ACMはDNS検証またはメール検証のオプションを提供します。
    • DNS検証では、指定されたDNSゾーンにCNAMEレコードを追加することで所有権を確認します。
    • メール検証では、指定されたメールアドレスに送信された確認メールに応答することで所有権を確認します。

ACMのメリット

  1. 簡単な管理
    • 証明書の発行、管理、更新が簡単に行えます。
  2. 自動更新
    • 証明書の有効期限が切れる前に自動的に更新されるため、手動での管理が不要です。
  3. 無料証明書
    • AWSが提供する証明書は無料で利用でき、コストを削減できます。
  4. AWSとの統合
    • AWSの多くのサービスと統合されており、証明書のデプロイが簡単に行えます。

ACMは、ウェブサイトやアプリケーションのセキュリティを強化するために非常に便利なサービスです。
詳細は公式ドキュメントを参照ください。

2.目的

HTTPSでの通信を可能にするためにACM証明書の作成をする。

3.構成図

4.全体構築ソースコード

        # 既存のホストゾーンをインポート
        hosted_zone = route53.HostedZone.from_hosted_zone_attributes(self, "MyHostedZone",
            hosted_zone_id="ホストゾーンID",
            zone_name="ドメイン名"
        )

        # ACM証明書の作成
        certificate = acm.Certificate(self, "MyCertificate",
            domain_name="ドメイン名",
            validation=acm.CertificateValidation.from_dns(hosted_zone)
        )
        Tags.of(certificate).add("Name", "kitaya-acm")

5.ソースコード詳細

5-1.既存のホストゾーンをインポート

既存のRoute 53ホストゾーンをCDKスタック内で参照できるようにするために使用します。インポートされたホストゾーンは、後続のリソース(ACM証明書のDNS検証やRoute 53レコードセットの作成)で使用されます。

  • "route53.HostedZone.from_hosted_zone_attributes"を使用
    論理ID(テンプレート内で一意)の指定をしたのち、詳細のプロパティを指定しています。

プロパティは下記

使用するプロパティ 設定値 説明
hosted_zone_id 任意のホストゾーンID インポートするホストゾーンのID
zone_name 任意のドメイン名 インポートするホストゾーンの名前(ドメイン名)
  • ソースコード
        # 既存のホストゾーンをインポート
        hosted_zone = route53.HostedZone.from_hosted_zone_attributes(self, "MyHostedZone",
            hosted_zone_id="ホストゾーンID",
            zone_name="ドメイン名"
        )

5-2.ACM証明書の作成

ドメインのACM証明書を作成し、DNS検証を設定します。

※DNS検証とは
ドメイン所有者が特定のドメインの証明書をリクエストする権利を証明するために使用される方法です。具体的には、ドメイン名システム(DNS)に特定のレコードを追加することで、証明書を発行しようとしている人がそのドメインを制御していることを証明します。

  • "acm.Certificate"を使用
    論理ID(テンプレート内で一意)の指定をしたのち、詳細のプロパティを指定しています。

プロパティは下記

使用するプロパティ 設定値 説明
domain_name 任意のドメイン名 証明書を発行するドメイン名
validation acm.CertificateValidation.from_dns(hosted_zone) DNS検証を使用し、指定したホストゾーンを基に証明書を検証
  • "Tags.of()"メソッドを使用してNameタグをつけます(書式は下記)
    Tags.of("リソース名").add("キー", "値")

  • ソースコード

        # ACM証明書の作成
        certificate = acm.Certificate(self, "MyCertificate",
            domain_name="ドメイン名",
            validation=acm.CertificateValidation.from_dns(hosted_zone)
        )
        Tags.of(certificate).add("Name", "kitaya-acm")

6.検証

マネジメントコンソールで作成されていることを確認できました。

6.感想

ACMの作成は初めてだったので良い経験になった。
また、仕組みの復習ができてよかった。

Last modified: 2024-08-14

Author