CDNで独自証明書の利用 (BYOC)
[更新:2026年03月17日]
BYOC(Bring Your Own Certificate)とは、WebサービスやCDNなどに使用するSSL/TLS証明書を利用者自身が持ち込み、クラウドに登録して利用する方式です。独自ドメインの証明書を自社管理のまま使えるため、ブランド保護・通信の安全性確保・証明書運用の柔軟性が向上します。
この利用例では、グローバルCDN基盤で独自証明書を利用し、安全な鍵保管基盤と連携して配信経路を強固に保護します。証明書管理を自社で統制でき、セキュリティ強化やブランド信頼性向上、更新運用の効率化、可用性の高いコンテンツ配信を実現します。
各機能のサービス対応
機能 |
対応サービス |
|---|---|
コードリポジトリ |
Azure Front Door |
シークレット管理 |
Azure Key Vault |
構築手順
ドメインと証明書の準備
本ユースケースでは、カスタムドメインおよびSSL証明書を使用します。あらかじめ準備を行ったうえで、設定作業を進めてください。
Azure Front Door のサービスプリンシパルの登録
Azure Front Door で独自の証明書を使用する場合、Microsoft Entra に Azure Front Door のサービスプリンシパルを登録する必要があります。環境ごとに初回のみ、グローバル管理者権限のユーザーで以下のコマンドを実行します。
az login --tenant (テナントID)
az ad sp create --id 205478c0-bd83-4e1b-a9d6-db63a3e1e1c8
作業の後、Azure ポータルで Microsoft Entra を開き、「テナントの検索」欄に 205478c0-bd83-4e1b-a9d6-db63a3e1e1c8 を入力し、サービスプリンシパルが登録されていることを確認します。
Add-on でのリソース作成
続いて、Add-onでのリソースを作成します。
CDN 機能
Add-on の「CDN 機能」API を利用して Azure Front Door を作成します。
TOKEN='<your-api-token>' #POST curl -v \ --location 'https://secure.sakura.ad.jp/cloud-test/zone/is1y/api/addon/1.0/analytics/cdn' \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --header "Authorization: Basic $TOKEN" \ --data '{ "location": "japaneast", "profile": { "level": 1 }, "endpoint": { "route":{ "patterns": ["/*"], "originGroup": { "origin": { "hostName": "example.com", "hostHeader": "example.com" } } } } }'
Azure ポータル上での設定
Azureポータル側で設定を実施します。
CDNのリソースグループへのアクセス
Add-onの「CDN 機能」API を利用して Azure Front Doorの情報を取得します。
TOKEN='<your-api-token>' #GET curl -v \ --location 'https://secure.sakura.ad.jp/cloud-test/zone/is1y/api/addon/1.0/analytics/cdn/rg-am5pel6bbs3sc' \ --header 'Accept: application/json' \ --header "Authorization: Basic $TOKEN"
レスポンスボディの
urlをブラウザで開き、ガバメントクラウド利用者のアカウントで Azureポータルにログインします。{ "data": { "id": "/subscriptions/7cc33115-0b1e-4673-87b5-1bf05712c34b/resourcegroups/rg-am5pel6bbs3sc/providers/Microsoft.Cdn/profiles/afd-hc4bybcoeyjaw", "type": "Microsoft.Cdn/profiles", "name": "afd-hc4bybcoeyjaw", "location": "Global", "kind": "frontdoor", "tags": [], "sku": { "name": "Standard_AzureFrontDoor" }, "properties": { "originResponseTimeoutSeconds": 30, "logScrubbing": null, "frontDoorId": "a21b38a4-8d2a-4245-a1e4-a1c0f85364bd", "extendedProperties": [], "resourceState": "Active", "provisioningState": "Succeeded" }, "originGroups": [ { "id": "/subscriptions/7cc33115-0b1e-4673-87b5-1bf05712c34b/resourcegroups/rg-am5pel6bbs3sc/providers/Microsoft.Cdn/profiles/afd-hc4bybcoeyjaw/origingroups/origin-group-hc4bybcoeyjaw", "type": "Microsoft.Cdn/profiles/origingroups", "name": "origin-group-hc4bybcoeyjaw", "properties": { "loadBalancingSettings": { "sampleSize": 4, "successfulSamplesRequired": 3, "additionalLatencyInMilliseconds": 50 }, "healthProbeSettings": null, "trafficRestorationTimeToHealedOrNewEndpointsInMinutes": null, "sessionAffinityState": "Disabled", "provisioningState": "Succeeded", "deploymentStatus": "NotStarted" }, "origins": [ { "id": "/subscriptions/7cc33115-0b1e-4673-87b5-1bf05712c34b/resourcegroups/rg-am5pel6bbs3sc/providers/Microsoft.Cdn/profiles/afd-hc4bybcoeyjaw/origingroups/origin-group-hc4bybcoeyjaw/origins/origin-hc4bybcoeyjaw", "type": "Microsoft.Cdn/profiles/origingroups/origins", "name": "origin-hc4bybcoeyjaw", "properties": { "originGroupName": "origin-group-hc4bybcoeyjaw", "hostName": "example.com", "httpPort": 80, "httpsPort": 443, "originHostHeader": "example.com", "priority": 1, "weight": 1000, "enabledState": "Enabled", "sharedPrivateLinkResource": null, "enforceCertificateNameCheck": true, "provisioningState": "Succeeded", "deploymentStatus": "NotStarted" } } ] } ], "endpoints": [ { "id": "/subscriptions/7cc33115-0b1e-4673-87b5-1bf05712c34b/resourcegroups/rg-am5pel6bbs3sc/providers/Microsoft.Cdn/profiles/afd-hc4bybcoeyjaw/afdendpoints/fde-hc4bybcoeyjaw", "type": "Microsoft.Cdn/profiles/afdendpoints", "name": "fde-hc4bybcoeyjaw", "location": "Global", "tags": [], "properties": { "hostName": "fde-hc4bybcoeyjaw-e7f2ahf5d9a3bxew.a03.azurefd.net", "autoGeneratedDomainNameLabelScope": null, "enabledState": "Enabled", "provisioningState": "Succeeded", "deploymentStatus": "NotStarted" }, "routes": [ { "id": "/subscriptions/7cc33115-0b1e-4673-87b5-1bf05712c34b/resourcegroups/rg-am5pel6bbs3sc/providers/Microsoft.Cdn/profiles/afd-hc4bybcoeyjaw/afdendpoints/fde-hc4bybcoeyjaw/routes/route-hc4bybcoeyjaw", "type": "Microsoft.Cdn/profiles/afdendpoints/routes", "name": "route-hc4bybcoeyjaw", "properties": { "cacheConfiguration": null, "customDomains": [], "originGroup": { "id": "/subscriptions/7cc33115-0b1e-4673-87b5-1bf05712c34b/resourceGroups/rg-am5pel6bbs3sc/providers/Microsoft.Cdn/profiles/afd-hc4bybcoeyjaw/originGroups/origin-group-hc4bybcoeyjaw" }, "originPath": null, "ruleSets": [], "supportedProtocols": [ "Http", "Https" ], "patternsToMatch": [ "/*" ], "forwardingProtocol": "MatchRequest", "linkToDefaultDomain": "Enabled", "httpsRedirect": "Enabled", "enabledState": "Enabled", "provisioningState": "Creating", "deploymentStatus": "NotStarted" } } ] } ] }, "url": "https://portal.azure.com/#@sacloud03.onmicrosoft.com/resource/subscriptions/7cc33115-0b1e-4673-87b5-1bf05712c34b/resourceGroups/rg-am5pel6bbs3sc" }
CDN のマネージドID の構成
Azure ポータルでリソースグループ内の Azure Front Door のリソースを開き、メニューの「ID」を選択します。
「システム割り当て」を「オン」にし、「保存」を選択します。
Azure Key Vault の作成と RBAC の付与
Azure Key Vault の作成
リソースグループに Azure Key Vault を作成します。
「+作成」を選択し、Azure Key Vault の作成を開始します。
以下のように情報を入力し、「確認および作成」を選択します。
サブスクリプション:「gov_cloud_user_dev_subscription」を選択
リソースグループ:データレイクが作成されたリソースグループを選択
Key Vault名:任意の名前を入力
地域:「Japan East」を選択
価格レベル:「標準」を選択
消去保護:「消去保護を有効にする」を選択
入力内容の確認画面に進んだら「作成」を選択してキーコンテナーを作成してください。Azure Key Vault が作成されるまで数分かかります。
自身にRBACを付与
作成した Azure Key Vault のリソースに移動し、「アクセス制御(IAM)」を選択し、「+追加」から「ロールの割り当ての追加」を選択します。
職務ロールから「キー コンテナー管理者」を選択し、次へ進みます。
アクセスの割り当て先に「ユーザー、グループ、またはサービスプリンシパル」を選択し、「メンバーの選択」からガバメントクラウド利用者グループを選択し、次へ進みます。
内容を確認し、「レビューと割り当て」を選択します。
「アクセス制御[IAM]」>「アクセスの確認」>「マイアクセスの表示」を開いて「現在のロール割り当て」に「キーコンテナー管理者」が割り当てられていることを確認する。
CDN のマネージド ID への RBAC
「自身にRBACを付与」と同様に、CDNのマネージドIDに対して「キーコンテナーシークレットユーザー」のRBACを付与します。
証明書の登録
証明書を登録するには、PFX形式かPEM形式に事前に変換する必要があります。本手順では以下のコマンドを実行してPFX形式に変換を行っています。
openssl pkcs12 -export \ -out yourcert.pfx \ -inkey {秘密鍵} \ -in {サーバー証明書} \ -certfile {中間証明書}
作成した Azure Key Vaultのリソースの「証明書」に移動し、「+生成/インポート」を選択します。
以下のように情報を入力し、「作成」を選択します。(下記以外は初期値でよい)
証明書の作成方法:インポート
証明書の名前:任意の名前を入力
証明書のファイルのアップロード:PFX形式の証明書ファイルをアップロード
パスワード:証明書にパスワードが設定されている場合は入力
証明書が作成されたことを確認します。
CDN の独自証明書の設定
Azure Front Door で Azure Key Vault を利用するには、キーコンテナーへのAzure Front Doorのアクセス権を付与する必要があります。
Azure Key Vault の「アクセス制御 (IAM)」を開き、ロール割り当てを追加します。
ロールは「キーコンテナー シークレットユーザー」を選択し、サービスプリンシパルは
Microsoft.AzureFrontDoor-Cdnを選択し、ロールを割り当てます。
再度Azure Key Vault の「アクセス制御(IAM)」を開き、ロール割り当てを追加します。
ロールは「キーコンテナー証明書責任者」を選択し、サービスプリンシパルは
Microsoft.AzureFrontDoor-Cdnを選択し、ロールを割り当てます。
Azure Front Doorの「セキュリティ」>「シークレット」タブを選択し、「証明書の追加」を選択します。
追加するキーコンテナーと証明書を選択します。証明書はバージョンも指定し、追加を選択します。
下記キャプチャのように証明書が追加されていることを確認します。
作成した Azure Front Doorのリソースに移動し、「ドメイン」を選択し、「+追加」を選択します。
以下のように情報を入力し、「追加」を選択します。
ドメインの種類:Azure 以外の検証済みドメイン
DNS の管理:その他すべての DNS サービス
カスタムドメイン:
usecase-e2.sakura-cs.tokyoを入力証明書の種類:Bring Your Own Certificate (BYOC)
シークレット:Azure Key Vault から選択
ドメインをエンドポイントとルートに関連付けます。右側の3点リーダーをクリックし、「関連付け」を選択します。
エンドポイントを選択し、「関連付け」を選択します。続いて、選択したエンドポイントに関連付けられているルートも併せて選択します。
カスタムドメインを利用してページを閲覧
下記キャプチャようにカスタムドメインにアクセスしてオリジンのページ表示を確認します。