カスタム・ドメイン・マッピングの処理
ドメインマッピングは、プロジェクト内の Code Engine アプリケーションまたは機能への URL ルートを提供します。 Code Engine を使用すると、アプリケーションをデプロイしたり関数を作成するたびに、これらのマッピングがデフォルトで自動的に作成されます。 ただし、 Code Engine アプリケーションまたは機能に独自のカスタムドメインをマッピングすることは可能です。 このオプションは、カスタム URL からのリクエストをアプリケーションまたは関数にルーティングします。 Code Engine コンソールまたはCLIを使用することができます。
所有するドメインを使用して Code Engine アプリケーションまたは関数をターゲットにする場合は、カスタム・ドメイン・マッピングを使用できます。 Code Engine でカスタムドメインマッピングを設定する際には、お客様の完全修飾ドメイン名(FQDN)とプロジェクト内の Code Engine アプリケーションまたは機能との1対1のマッピングを定義します。
カスタム・ドメイン・マッピングは、1 つの Code Engine アプリケーションまたは関数のみを指す必要があります。 ただし、単一のアプリケーションまたは機能に対して複数のドメイン・マッピングを構成することができます。
Code Engineでカスタム・ドメイン・マッピングを操作するには、以下の手順を実行します。 一部のステップは Code Engineの外部で実行されることに注意してください。
- Code Engine を確認してください。
- カスタム・ドメインをドメイン・レジストラーから取得します (* Code Engine*)。
- Code Engine で、 アプリケーション または 機能 ごとにカスタムドメインマッピングを設定します *( Code Engine コンソールまたは CLI *から )。
- ドメインレジストラでカスタムドメインの設定を完了してください ( Code Engine 以外 )。
ドメインレジストラでカスタムドメインの設定を完了し、 Code Engine でアプリケーションまたは機能のドメインマッピングを設定したら、ドメインマッピングをテストします。
Code Engineで、アプリケーションまたは関数へのドメイン・マッピングを 表示、 更新、または 削除 できます。
Code Engine でカスタム・ドメイン・マッピングを使用する前の考慮事項
Code Engineでカスタム・ドメイン・マッピングを実装する前に、以下の考慮事項に注意してください。
- SSL/TLS証明書で保護されているドメインには、カスタムドメインマッピングのみを使用してください。この証明書は、一般に信頼されている認証局(CA)が署名したものです。
- パブリック・ドメイン・ネームを指すカスタム・ドメイン・マッピングを定義できます。
- お客様のドメイン名が非公開のドメイン名システム(DNS)のみで解決できる場合は、ドメイン名を記載し、信頼された公開認証機関が署名した証明書をご用意ください。
- カスタムドメインに対応する証明書から始まり、ルート証明書に至るまでのすべての中間証明書を含む、証明書の全チェーンを提供してください。
- 自己署名証明書は使用できません。
- 非トラステッドまたは非パブリック・エンタープライズ CA によって署名された証明書を使用することはできません。
- 証明書には、有効期限日付が設定されている必要があります。
カスタム・ドメインとその TLS 証明書および秘密鍵の取得
Code Engineでカスタム・ドメイン・マッピングを構成する前に、まず、ドメイン登録機関 (* Code Engine*) からカスタム・ドメインを取得する必要があります。
- ドメイン・レジストラーからカスタム・ドメイン (例えば、
www.example.com
) を取得します。 - カスタムドメイン用のSSL/TLS 証明書を取得する:
-
Let's Encryptサービスと Certbot を使用することで、自己証明ではない証明書を作成することができます。 独自ドメインが管理下にあり、すぐに証明書を作成したい場合は、CertbotとLet's Encryptサービスを使用して証明書を取得できます。
-
信頼できる認証局から署名付き証明書を取得することができます。 この種の電子証明書は、サーバーとクライアント間の通信プライバシーを確立するために使用される。 これらの証明書には、エンドポイント間の信頼された安全な接続を確立するために使用される情報が含まれています。 また、TLS証明書に対応する秘密鍵も取得する必要があります。
証明書と鍵はCAから取得できます。 カスタムドメイン用の署名付きSSL/TLS 証明書を取得します。 セキュリティ上の理由により、 Code Engine では、信頼された公的認証局によって署名されたTLS/SSL証明書で構成されたカスタムドメインマッピングのみをサポートしています。
から証明書と鍵を入手することもできる。 Cloud Internet Services (CIS) また、カスタムドメインの管理を CIS に委任している場合は、オリジン証明書を注文することでも、証明書と鍵を入手できます。 このアプローチに従って、 End-to-EndフレキシブルTLSモードを 適用する。
-
カスタムドメインにCertbotとLet's Encryptサービスを使用するにはどうすればよいですか?
エンタープライズ環境では、企業ドメイン管理者と協力して、必要な証明書を取得します。 しかし、カスタムドメインが管理下にあり、すぐに証明書が欲しい場合は、 Certbot と Let's Encryptサービスを使用して証明書を取得できます
-
Certbotをインストールします。 Certbot は、CA とサーバーの間の対話を自動化するための Automatic Certificate Management Environment(ACME) プロトコルのクライアントです。 Let 's Encrypt サービスは、このクライアントを使用してドメイン所有権を検証し、証明書を発行します。 Certbotのドキュメントから、ソフトウェアとして
Other
を選択し、ワークステーションのオペレーティングシステムを選択すると、Certbotコマンドラインをインストールするための情報が表示されます。 -
以下のコマンドを実行して証明書を作成する。 このコマンド例では、
example.com
およびwww.example.com
カスタム・ドメインの証明書を作成します。 必ず、独自のカスタム・ドメインのコマンドを更新してください。certbot certonly --manual --preferred-challenges dns --email webmaster@example.com --server https://acme-v02.api.letsencrypt.org/directory --agree-tos --domain example.com --domain www.example.com
-
ドメインを所有していることを確認するには、前のステップで要求したドメインの
TXT
レコードを、Certbot ツールの出力で提供された値 (例えば、_acme_challenge.example.com
および_acme_challenge.ww.example.com
) を使用してドメイン登録機関に設定します。TXT
レコードを設定した後、Certbot コマンドを続行します。 -
Certbot は、Let 's Encrypt によって署名された証明書を取得します。 証明書が保管される場所は、Certbot の出力によって提供されます。
fullchain.pem
ファイルとprivkey.pem
ファイルを見つけます。
Ubuntu システムで Certbot を実行するためのコマンド例
sudo certbot certonly --manual --preferred-challenges dns --email webmaster@example.com --server https://acme-v02.api.letsencrypt.org/directory --agree-tos --domain example.com --domain www.example.com
example.com
および www.example.com
の認証要求の出力例
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name:
_acme-challenge.example.com.
with the following value:
<MASKED>
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name:
_acme-challenge.www.example.com
with the following value:
<MASKED>
(This must be set up in addition to the previous challenges; do not remove,
replace, or undo the previous challenge tasks yet. Note that you might be
asked to create multiple distinct TXT records with the same name. This is
permitted by DNS standards.)
Before continuing, verify the TXT record has been deployed. Depending on the DNS
provider, this may take some time, from a few seconds to multiple minutes. You can
check if it has finished deploying with aid of online tools, such as the Google
Admin Toolbox: https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.www.example.com.
Look for one or more bolded line(s) below the line ';ANSWER'. It should show the
value(s) you've just added.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/example.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/example.com/privkey.pem
This certificate expires on 2023-02-01.
These files will be updated when the certificate renews.
NEXT STEPS:
- This certificate will not be renewed automatically. Autorenewal of --manual certificates requires the use of an authentication hook script (--manual-auth-hook) but one was not provided. To renew this certificate, repeat this same certbot command before the certificate's expiry date.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
* Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
* Donating to EFF: https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
証明書の準備ができました。
CIS から取得したオリジン証明書をカスタムドメインに使用するにはどうすればよいですか?
証明書と鍵を公開されている信頼できるCAから取得すれば、それらは署名され安全です。 CAと協力して、カスタムドメイン用の署名付きSSL/TLS証明書を取得します。
また、 Cloud Internet Services (CIS) を使用してオリジン証明書を注文し、 CIS を設定して、このフローに従ってユーザーIPアドレスをアプリケーションまたは機能に転送することもできる:
-
原産地証明書を注文する
- IBM Cloud コンソールで、 Resource list に移動し、
Internet Services
インスタンスをフィルタリングする。 検索結果から、ターゲット・インスタンスの名前をクリックすると、その詳細ページが表示されます。 - CIS インスタンスの詳細ページで、Origin ページ (Security>Origin )に移動し、 Order をクリックします。
- Order origin certificate "ペインでは、すべてのデフォルトを維持し、作業するドメイン名を入力する。 例えば、
myapp.example.com
です。 注文をクリックして確定します。 - Origin証明書と 秘密鍵の値をコピーする。 ドメインをマッピングする際に、この情報が必要になります。
- IBM Cloud コンソールで、 Resource list に移動し、
-
End-to-EndフレキシブルTLSモードを 設定し、適用する。
エッジ証明書は CIS から提供される。 オリジン証明書は、 CIS と Code Engine アプリケーションまたは機能間のトラフィックのみを暗号化するために使用される。
CIS でDNSレコードが正常に作成された後、 CIS、ユーザーIPアドレスをアプリケーションまたは機能に転送するように設定しました。
Code Engine でのカスタム・ドメイン・マッピングの構成
カスタムドメインマッピングの作業に関する概念については、すでに理解していることでしょう。また、ドメイン登録機関からカスタムドメインを取得しました。 Code Engine アプリケーションまたは機能をカスタムドメインマッピングを使用するように設定する準備ができました。 以下を参照してください。
ドメイン・マッピングの表示
コンソールからのドメイン・マッピングの表示
コンソールから、アプリケーションまたは機能に対して自動的に生成されたすべてのカスタム・ドメイン・マッピングのリストを表示できます。 デフォルトでは、テーブルの内容はカスタム・ドメイン・マッピングにスコープ設定されます。 ビューを変更するには、 「タイプ」 フィルターを使用します。
このビューには、マッピングに関連付けられている証明書の有効期限に関する情報が表示されます。 証明書の有効期限が切れると、ドメイン・マッピングでアプリケーションまたは機能に到達できなくなり、この状態により SSL エラーが発生します。 間もなく有効期限が切れる証明書がある場合は、更新された証明書を使用するように カスタム・ドメイン・マッピングを更新 してください。
このビューには、ドメイン・マッピングに関連付けられている特定のアプリケーションまたは機能、およびドメイン・マッピングのタイプに関する情報も表示されます。 Code Engine が生成するマッピングの場合、タイプは System-public
、 System-private
、または System-internal
のいずれかになります。 作成するカスタム・ドメイン・マッピングの場合、タイプは
Custom
です。
- プロジェクトが Active ステータスになったら、 Code Engine Projectsページでプロジェクト名をクリックします。
- 概要ページから、 [ドメインマッピング] をクリックします。
- ドメインマッピングページから、既存のアプリケーションまたは機能に対して定義されたドメインマッピングの一覧を表示します。
Type
は、マッピングが自動的に生成されるのか、カスタム・ドメイン・マッピングであるのかを示します。
CLI を使用したドメイン・マッピングの表示
CLI でアプリケーションまたは関数のすべてのカスタム・ドメイン・マッピングのリストを表示するには、 ibmcloud ce domainmapping list
コマンドを使用します。 以下に例を示します。
ibmcloud ce domainmapping list
出力例
Listing domain mappings...
OK
Name CNAME Target Target-Type Status Secret Name Age
www.example.com custom.abcdabcdabc.us-south.codeengine.appdomain.cloud myapp app ready mytlssecret 36m
作成したカスタム・ドメイン・マッピングと、 Code Engine が作成した自動生成ドメイン・マッピングの両方を含む、アプリケーションまたは関数のすべてのドメイン・マッピングのリストを表示するには、 ibmcloud ce domainmapping list
コマンドで
--all
オプションを指定します。 カスタム・ドメイン・マッピングには、 CNAME
の値が表示されます。
ドメイン・マッピングの更新
カスタム・ドメイン・マッピングを作成すると、証明書の有効期限が切れるまで TLS シークレットが有効になります。 ドメイン・マッピング・ページから、証明書の有効期限が切れるまでの残りの日数に関する情報を表示できます。
カスタム・ドメインで使用される証明書に複数のドメイン・ネームがリストされているかどうか、またはワイルドカード証明書が使用されているかどうかを確認することが重要です。 証明書の有効期限が間近に迫っている(または期限切れ)場合は、ドメインマッピング用の既存の TLS 秘密鍵を更新した認証情報で編集します。 ドメインマッピングの更新された認証情報で、別のTLS秘密鍵を作成しないでください。
コンソールからのドメイン・マッピングの更新
www.example.com
のカスタム・ドメイン・マッピングに、間もなく有効期限が切れる証明書があるとします。 更新された証明書を使用するようにコンソールからドメイン・マッピングを更新することも、マッピングの TLS シークレットを置き換えることもできます。 プロジェクト内の別のアプリケーションまたは機能を指すようにドメイン・マッピングを更新することもできます。
- Code Engine Projects ページから、プロジェクトに移動します。
- 「概要」ページで、 「ドメイン・マッピング」 をクリックします。
- マッピングを編集するには、「ドメイン・マッピング」ページで 「アクション」 アイコン
> 「編集」 をクリックします。 または、定義したカスタム・ドメインの行をクリックして、マッピングを更新することもできます。
- 「ドメインマッピングの更新」パネルから、このドメインマッピングに関連付けられているアプリケーションまたは機能を変更することができます。 あるいは、このマッピングの TLS 秘密を置き換えたり更新したりすることもできます。
- **「更新」**をクリックして、変更を保存します。
マッピングを更新すると、最新の変更内容のドメインマッピングの一覧を表示できます。
CLI を使用したドメイン・マッピングの更新
カスタム・ドメイン・マッピングを更新するには、 ibmcloud ce domainmapping update
コマンドを使用します。
www.example.com
のカスタム・ドメイン・マッピングに、間もなく有効期限が切れる証明書があるとします。 更新された証明書を使用するようにドメイン・マッピングを更新することも、 --tls-secret
オプションを使用してマッピングの TLS シークレットを置き換えることもできます。 --target
オプションを使用して、プロジェクト内の別のアプリケーションまたは機能にドメインマッピングを更新することもできます。
次の例では、 www.example.com
のカスタムドメインマッピングを更新し、 mytlssecret
という更新されたTLSシークレットを使用するようにします。
-
TLS秘密鍵
mytlssecret
を、ローカルのワークステーション上のmycertchain2.txt
およびmyprivatekey2
ファイルに含まれる更新済みの証明書および秘密鍵情報で更新します。ibmcloud ce secret update --name mytlssecret --cert-chain-file mycertchain2.txt --private-key-file myprivatekey2.txt
出力例
Updating secret mytlssecret.. OK
-
更新された TLS シークレットを使用するようにドメイン・マッピングを更新します。
ibmcloud ce domainmapping update --domain-name www.example.com --tls-secret mytlssecret2
出力例
Getting domain mapping 'www.example.com.org'... Updating domain mapping 'www.example.com.org'...
ドメイン・マッピングの削除
ドメイン・マッピングを削除すると、 Code Engine アプリケーションまたは関数と Code Engine内のカスタム・ドメイン・マッピングとの関連付けが削除されます。 このアクションでは、関連付けられたアプリケーション、機能、および TLS シークレットは削除されません。
ドメインマッピングで参照されているアプリケーションまたは関数を削除すると、そのアプリケーションまたは関数に関連付けられているカスタムドメインマッピングもすべて削除されます。
カスタムドメインマッピングを削除しても、ドメインのDNS設定が残っている場合、トラフィックは引き続き Code Engine プロジェクトにルーティングされます。 例えば、 Code Engine プロジェクトへのCNAMEは依然として設定できます。 ただし、要求には 404 (見つからない) エラー・メッセージが応答されます。 完全修飾ドメイン・ネームの関連 CNAME レコードが、ドメイン・レジストラーによって DNS 設定で更新されていることを確認してください。
コンソールからのドメイン・マッピングの削除
コンソールから削除できるのは、タイプ Custom
のドメイン・マッピングのみです。 Code Engine が自動生成するドメインマッピングは削除できません。
コンソールからカスタム・ドメイン・マッピングを削除するには、以下のようにします。
- Code Engine Projects ページから、プロジェクトに移動します。
- 「概要」ページで、 「ドメイン・マッピング」 をクリックして、定義済みドメイン・マッピングのリストを表示します。
- (オプション) ドメイン・マッピングをタイプでフィルタリングするには、 「タイプ」 をクリックします。
- 「ドメイン・マッピング」ページで、アプリケーションまたは関数から削除するカスタム・ドメイン・マッピングを削除します。 マッピングを削除するには、 「アクション」 アイコン
> 「削除」 をクリックします。
CLI を使用したドメイン・マッピングの削除
CLI でカスタム・ドメイン・マッピングを削除するには、 ibmcloud ce domainmapping delete
コマンドを使用します。
カスタムドメインマッピングのみを削除できます。 Code Engine が生成したドメインマッピングは削除できません。 ibmcloud ce domainmapping list
コマンドを実行して、CLI でカスタム・ドメイン・マッピングのリストを表示します。 カスタム・ドメイン・マッピングには、生成された
CNAME
レコードがあります。 CLI では、 ibmcloud ce domainmapping get
コマンドを使用して、指定したカスタム・ドメイン・マッピングに対して生成された CNAME
値を取得できます。
ibmcloud ce domainmapping delete --domain-name www.example.com -f
出力例
Deleting domain mapping 'www.example.com'...
OK
次のステップ
カスタムドメインマッピングのCNAMEレコードの取得
Code Engine は、定義されたカスタム・ドメイン・マッピングの CNAME ターゲットを提供します。
CNAME レコードを Code Engine コンソールから取得するには、定義済みのカスタム・ドメイン・マッピングを開き、「ドメイン・マッピングの更新」ページを表示します。 以下のいずれかの方法で、「ドメイン・マッピングの更新」ページを開きます。
- 「ドメイン・マッピング」テーブルで、定義したカスタム・ドメインの行をクリックします。
- マッピングを編集するには、 「アクション」 アイコン
> 「編集」 をクリックします。
「ドメイン・マッピングの更新 (Update domain mappings)」 ページから、 CNAME target
値を取得できます。 例えば、 www.example.com
マッピングには custom.abcdabcdabc.us-east.codeengine.appdomain.cloud
CNAME 値があります。ここで、 abcdabcdabc
は自動的に生成された固有 ID であり、 us-east
はプロジェクトの領域です。
CLI で CNAME レコードを取得するには、 ibmcloud ce domainmapping get
コマンドを使用します。 以下に例を示します。
ibmcloud ce domainmapping get --domain-name www.example.com
出力例
Getting domain mapping 'www.example.com'...
OK
Domain Name: www.example.com
CNAME: custom.abcdabcdabc.us-south.codeengine.appdomain.cloud
Target Name: myapp
Target Type: app
TLS Secret: mytlssecret
Status: ready
CNAME ターゲットを作成したら、カスタム・ドメインの DNS 設定に CNAME レコード項目を追加することができます。 ドメイン・レジストラーを使用して CNAME レコードを公開すると、インターネットに DNS の変更を取り込むのに時間がかかる場合があることに注意してください。
CIS に DNS レコードを追加し、 Code Engine アプリケーションにトラフィックを誘導する
カスタム・ドメインを管理する CIS インスタンスがある場合は、以下のようにDNSレコードを更新して、 Code Engine プロジェクトを指すようにします。 CIS 以外のドメイン レジストラの場合、手順は異なりますが、目標は同じです。つまり Code Engine プロジェクトの CNAME エンドポイントを指す CNAME タイプの DNS レコードを作成します。
-
CIS インスタンスの詳細ページで、 Reliability>DNS と進みます。 DNSレコードまでスクロールし、 Addをクリックします。
-
レコードの追加」ペインで
- タイプとして CNAMEを選択する。
- サブドメインを設定する。例えば、
myapp
. - エイリアスドメイン名として、以前にコピーしたCNAMEターゲット値を指定します。
- DNSレコードの詳細出力が、ドメインマッピングがエイリアスであることを示していることを確認する。 例えば、次のようなメッセージを探してください:
myapp.example.com is an alias of custom.<id>.<region>.codeeng.appdomain.cloud
. Addをクリックして、DNSレコードの追加を確認します。
example.com
、www.example.com
など、複数のドメインやサブドメインを登録する必要がある場合は、サブドメインごとに手順を繰り返す必要があります。 複数のドメインをカバーする単一の証明書を作成することも検討できる。 ただし、その証明書は1つのリージョンで1回しか使用できない。 カスタムドメインを1つのリージョン内の複数のプロジェクトで使用する予定がある場合は、それらを分けてください。
カスタムドメインマッピングの操作に慣れ、TLS 証明書とプライベートキー付きのカスタムドメインを取得しました。 Code Engine で、 アプリケーション または 機能 にカスタムドメインマッピングを設定する準備ができました。