ベストプラクティス - AWS Certificate Manager

ベストプラクティス

ベストプラクティスは、AWS Certificate Manager (AWS Certificate Manager) をより効果的に使用するのに役立つ推奨事項です。次のベストプラクティスは、現在の ACM クライアントの実際の経験に基づいています。

AWS CloudFormation

AWS CloudFormation では、使用する AWS リソースを説明するテンプレートを作成できます。AWS CloudFormation は、ユーザーに代わってこのリソースをプロビジョニングして設定します。AWS CloudFormation では、Elastic Load Balancing、Amazon CloudFront や Amazon API Gateway など ACM がサポートしているリソースをプロビジョニングできます。詳細については、「AWS Certificate Manager と統合されたサービス」を参照してください。

AWS CloudFormation を使用して複数のテスト環境を迅速に作成および削除する場合は、環境ごとに個別の ACM 証明書を作成しないことが推奨されます。これを行うと、証明書のクォータをすぐに使い切ってしまいます。詳細については、「Quotas」を参照してください。代わりに、テストに使用しているすべてのドメイン名をカバーするワイルドカード証明書を作成します。例えば、<version>.service.example.com などの、バージョン番号だけ異なるドメイン名に対して ACM 証明書を繰り返し作成する場合は、代わりに <*>.service.example.com のワイルドカード証明書を 1 つ作成します。AWS CloudFormation がテスト環境の作成に使用するテンプレートにワイルドカード証明書を含めます。

証明書の固定化

証明書ピニング (SSL ピンニングとも呼ばれる) は、アプリケーションで、ホストに証明書階層ではなく X.509 証明書またはパブリックキーを直接関連付けることによって、リモートホストを検証するのに使用できるプロセスです。したがって、アプリケーションでは、ピニングを使用して SSL/TLS 証明書チェーンの検証をバイパスします。一般的な SSL 検証プロセスでは、ルート認証局 (CA) 証明書から下位 CA 証明書 (存在する場合) まで、証明書チェーン全体の署名をチェックします。また、階層の最下位にあるリモートホストの証明書もチェックします。その代わりに、アプリケーションは、証明書をピニングすることにより、リモートホストに、ルート証明書またはチェーン内の他のものではなく、その証明書のみが信頼できるということを伝えられます。リモートホストの証明書またはパブリックキーを開発中にアプリケーションに追加できます。または、最初にホストに接続する際にアプリケーションが証明書またはキーを追加することができます。

警告

アプリケーションでは、ACM 証明書をピニングしないことをお勧めします。&CM は、ACM 証明書のマネージド更新 を実行し、Amazon 発行の SSL/TLS 証明書を有効期限が切れる前に自動的に更新します。証明書を更新するために ACM は新しいパブリックキーとプライベートキーのペアを生成します。アプリケーションが ACM 証明書をピン留めし、証明書が新しいパブリックキーで正常に更新された場合、アプリケーションはドメインに接続できない可能性があります。

証明書をピンすることを決定した場合は、次のオプションを選択しても、アプリケーションのドメインへの接続が妨げられることはありません。

  • 保持する証明書を ACM にインポートし、アプリケーションをインポートした証明書に固定化します。ACM はインポートした証明書を自動的に更新しようとはしません。

  • パブリック証明書を使用している場合は、アプリケーションを利用可能なすべての Amazon ルート証明書に固定化します。プライベート証明書を使用している場合は、アプリケーションを CA のルート証明書に固定化します。

ドメイン検証

Amazon 認証局 (CA) がサイトの証明書を発行する前に、 AWS Certificate Manager (ACM) は、ユーザーがリクエストで指定したすべてのドメインの所有者または管理者であることを確認する必要があります。E メールまたは DNS のいずれかを使用して検証を実行できます。詳細については、「DNS での検証」および「E メール検証」を参照してください。

ドメイン名の追加または削除

既存の ACM 証明書からドメイン名を追加または削除することはできません。代わりに、修正済みのドメイン名のリストから新しい証明書をリクエストする必要があります。たとえば、証明書に 5 つのドメイン名があり、さらに 4 つを追加する場合は、9 つのドメイン名すべてで新しい証明書をリクエストする必要があります。新しい証明書と同様に、元の証明書に対して事前に検証済みの名前を含むリクエスト内のすべてのドメイン名の所有権を検証する必要があります。

E メール検証を使用する場合、ドメインごとに最大で 8 件の検証 E メールメッセージが送信され、そのうち少なくとも 1 件を 72 時間以内に処理する必要があります。たとえば、5 つのドメイン名で証明書をリクエストすると、最大で 40 件の検証メッセージが送信され、そのうち少なくとも 5 件を 72 時間以内に処理する必要があります。証明書リクエストのドメイン名の数が増えると、E メールを使用してドメインの所有権を検証するために必要な作業も増えます。

代わりに DNS 検証を使用する場合は、検証する FQDN のデータベースに対して新しい DNS レコードを 1 つ書き込む必要があります。ACM はレコードを送信してデータベースを作成し、後でそのデータベースに対してクエリを実行してレコードが追加されたかどうかを判断します。レコードの追加によって、お客様がドメインの所有者または管理者であることがアサートされます。前述の例では、5 つのドメイン名で証明書をリクエストした場合、5 つの DNS レコードを作成する必要があります。可能な場合は、DNS 検証を使用することをお勧めします。

証明書の透明性ログ記録のオプトアウト

重要

証明書の透明性のログ記録を無効にするために実行するアクションにかかわらず、証明書のバインド先のパブリックエンドポイントまたはプライベートエンドポイントにアクセスできるクライアントまたは個人によって、証明書が引き続きログに記録される場合があります。ただし、証明書には署名付き証明書タイムスタンプ (SCT) は含まれません。発行元の CA のみが、証明書に SCT を埋め込むことができます。

2018 年 4 月 30 日に、Google Chrome は証明書の透明性ログに記録されていないパブリック SSL/TLS 証明書の信頼を停止しました。したがって、2018 年 4 月 24 日から Amazon CA は、すべての新しい証明書と更新を少なくとも 2 つの公開ログに公開するようになりました。証明書がログに記録されると、削除することはできません。詳細については、「証明書の透明性ログ記録」を参照してください。

ログ記録は、証明書をリクエストするとき、または証明書が更新されたときに自動的に実行されますが、オプトアウトすることもできます。その一般的な理由には、セキュリティとプライバシーに関する懸念があります。たとえば、内部ホストドメイン名のログ記録により、それ以外の場合には公開されない内部ネットワークについての情報が潜在的な攻撃者に提供されます。さらに、ログ記録により、新規または未リリース製品やウェブサイトの名前が漏洩する可能性があります。

証明書をリクエストするときに、透明性ログを出力しないようにするには、request-certificate AWS CLIコマンド、または RequestCertificateAPI オペレーションの options パラメータを使用します。証明書が 2018 年 4 月 24 日より前に発行され、更新中にログに記録されないようにする場合は、 コマンド、または UpdateCertificateOptions API オペレーションを使用してオプトアウトすることができます。

Limitations

  • コンソールを使用して、透明性ログを有効または無効にすることはできません。

  • 証明書が更新期間に入った後 (通常は証明書の有効期限が切れる 60 日前) にロギング状態を変更することはできません。ステータスの変更が失敗しても、エラーメッセージは生成されません。

証明書がログに記録されると、ログから削除することはできません。その時点でオプトアウトしても効果はありません。証明書をリクエストしたときにログ記録を停止して、後でオプトインするように選択すると、証明書は更新されるまでログに記録されません。証明書をすぐにログに記録する場合は、新しい証明書を発行することをお勧めします。

次の例では、新しい証明書をリクエストするときに request-certificate コマンドを使用して証明書の透明性を無効にする方法を示しています。

aws acm request-certificate \ --domain-name www.example.com \ --validation-method DNS \ --options CertificateTransparencyLoggingPreference=DISABLED \ --idempotency-token 184627

上記のコマンドは、新しい証明書の ARN を出力します。

{ "CertificateArn": "arn:aws:acm:region:account:certificate/12345678-1234-1234-1234-123456789012" }

証明書がすでにある場合、証明書が更新されたときに記録されないようにするには、update-certificate-options コマンドを使用します。このコマンドは値を返しません。

aws acm update-certificate-options \ --certificate-arn arn:aws:acm:region:account:\ certificate/12345678-1234-1234-1234-123456789012 \ --options CertificateTransparencyLoggingPreference=DISABLED

AWS CloudTrail をオンにする

ACM の使用を開始する前に、CloudTrail のログ記録を有効にします。CloudTrail では、アカウントの AWS API コールの履歴を取得して、AWS デプロイをモニタリングすることができます。これには AWS マネジメントコンソール、AWS SDK、AWS Command Line Interface、および高レベルの Amazon Web Services を介して行われる API コールが含まれます。また、履歴では、ACM API を呼び出したユーザーとアカウント、呼び出し元のソース IP アドレス、および呼び出しの発生日時を特定できます。API を使用して CloudTrail をアプリケーションに統合したり、組織用の証跡作成を自動化したり、証跡の状態を確認したり、CloudTrail のログ記録のオン/オフを管理者が切り替える方法を制御したりすることもできます。詳細については、「証跡の作成」を参照してください。ACM アクションの証跡の例については、「AWS Certificate Manager での CloudTrail の使用」を参照してください。