適用於:所有 API 管理層級
當您在 Azure 雲端中建立 Azure API 管理服務執行個體時,Azure 會為其指派 azure-api.net
子網域 (例如 apim-service-name.azure-api.net
)。 您也可以使用自己的自訂網域名稱來公開 API 管理端點,例如 contoso.com
。 本文說明如何將現有的自訂 DNS 名稱對應至 Azure API 管理執行個體所公開的端點。
注意
目前工作區閘道不支援自訂的網域名稱。
重要
API 管理服務基礎結構的變更(例如設定自定義網域、新增 CA 憑證、調整、虛擬網路設定、可用性區域變更和區域新增專案)可能需要 15 分鐘或更長的時間才能完成,視服務層級和部署大小而定。 預期具有較大縮放單位或多重區域配置的實例需要較長的時間。 系統會仔細執行 API 管理的輪流變更,以保留容量和可用性。
當服務正在更新時,無法進行其他服務基礎結構變更。 不過,您可以設定 API、產品、原則和用戶設定。 服務 不會 經歷閘道停機,API 管理 會繼續 服務 API 要求,而不會中斷(開發人員層除外)。
必要條件
API 管理執行個體。 如需詳細資訊,請參閱 建立 Azure API 管理實例。
您或您的組織所擁有的自訂網域名稱。 本文未提供如何取得自訂網域名稱的指示。
(選用) 含有公開和私密金鑰的有效憑證 (.PFX)。 主體或主體別名 (SAN) 必須符合網域名稱 (這可讓 API 管理執行個體安全地透過 TLS 公開 URL)。
請參閱 網域憑證選項。
在 DNS 伺服器上代管的 DNS 記錄,以將自訂網域名稱對應至 API 管理執行個體的預設網域名稱。 本主題未提供如何代管 DNS 記錄的指示。
如需必要記錄的詳細資訊,請參閱本文稍後的 DNS 設定。
自訂網域的端點
您可以對數個 API 管理端點指派自訂網域名稱。 目前有下列端點可用:
端點 | 預設 |
---|---|
閘道 | 預設值是:<apim-service-name>.azure-api.net 。 閘道是使用層中唯一可用於設定的端點。新增自訂閘道網域之後,預設閘道端點設定仍可供使用。 |
開發人員平台(除消耗階層以外的所有階層) | 預設值是:<apim-service-name>.developer.azure-api.net |
管理 (僅限傳統層) | 預設值是:<apim-service-name>.management.azure-api.net |
自行托管閘道器配置 API (v2) | 預設值是:<apim-service-name>.configuration.azure-api.net |
SCM (僅限傳統層) | 預設值是:<apim-service-name>.scm.azure-api.net |
考量
- 您可以更新服務層級中支援的任何端點。 一般而言,客戶會更新 閘道 (此 URL 是用來呼叫透過 API 管理公開的 API)和 開發人員入口網站(開發人員入口網站 URL)。
- 在您設定自定義閘道功能變數名稱且無法刪除之後,預設 閘道 端點仍可供使用。 對於您以自定義功能變數名稱設定的其他 API 管理端點(例如 開發人員入口網站),預設端點已無法使用。
- 只有 API 管理實例擁有者可以在內部使用 管理和SCM 端點。 這些端點較不常指派自訂網域名稱。
- 進階和開發人員層支援設定閘道端點的多個主機名。
- 除了使用層以外,所有層都支援萬用字元網域名稱,例如
*.contoso.com
。 對 api.contoso.com 的要求,特定子網域憑證 (例如,api.contoso.com) 的優先順序高於萬用字元憑證 (*.contoso.com)。 - 在為 開發人員入口網站設定自訂網域時,您可以為新的網域名稱啟用CORS。 這是為了讓開發人員入口網站的訪客能夠在 API 參考頁面中使用互動式控制台。
網域憑證選項
API 管理支援自訂 TLS 憑證或從 Azure Key Vault 匯入的憑證。 您也可以啟用免費的受控憑證。
警告
如果您需要憑證關聯,請使用自訂網域名稱和自訂或 Key Vault 憑證,而不是預設憑證或免費的受控憑證。 建議您不要對未管理的憑證採取硬式相依性。
如果您已經有協力廠商提供者的私人憑證,您可以將該憑證上傳至 API 管理執行個體。 憑證必須符合下列需求 (如果您啟用由 API 管理所管理的免費憑證,則該憑證已符合這些需求):
- 匯出為 PFX 檔案 (以三重 DES 加密並選擇性地使用密碼保護)。
- 包含長度至少 2048 位元的私密金鑰
- 包含憑證鏈結中的所有中繼憑證和根憑證。
設定自訂網域名稱 - 入口網站
根據您想要使用的 網域憑證 選擇步驟。
DNS 組態
- 設定自訂網域的 CNAME 記錄。
- 使用 API 管理的免費受控憑證時,亦請設定 TXT 記錄來建立網域的擁有權。
注意
免費憑證由 DigiCert 所發行。 對於某些網域,您必須建立一個含有指定值的 CAA 網域記錄,以明確允許 DigiCert 作為憑證簽發者:0 issue digicert.com
。
CNAME 記錄
設定 CNAME 記錄,以從您的自訂網域名稱 (例如 api.contoso.com
) 指向 API 管理服務主機名稱 (例如 <apim-service-name>.azure-api.net
)。 為免 IP 位址變更,CNAME 記錄比 A 記錄更穩定。 如需詳細資訊,請參閱 Azure API 管理的 IP 位址 和 API 管理常見問題。
注意
使用 CNAME 記錄時,某些網域註冊機構只允許您對應子網域 (如 www.contoso.com
),而不是根名稱 (如 contoso.com
)。 如需 CNAME 記錄的詳細資訊,請參閱註冊機構或 IETF 功能變數名稱 - 實作和規格所提供的檔。
警告
當您使用免費的受控憑證,並使用您的 DNS 提供者設定 CNAME 記錄時,請確定它會解析為預設的 APIM 服務主機名稱 (<apim-service-name>.azure-api.net
)。 目前,如果 CNAME 記錄不會解析為預設的 APIM 主機名稱,APIM 就不會自動更新憑證。 例如,如果您使用免費受控憑證,並使用 Cloudflare 作為 DNS 提供者,請確定未在 CNAME 記錄上啟用 DNS Proxy。
TXT 記錄
啟用 API 管理的免費受控憑證時,亦請在 DNS 區域中設定 TXT 記錄,以建立網域名稱的擁有權。
- 記錄名稱是您的自訂網域名稱,前面加上
apimuid
。 範例:apimuid.api.contoso.com
。 - 此值是您 API 管理執行個體所提供的網域擁有權識別碼。
當您使用入口網站來設定自訂網域的免費受控憑證時,系統會自動顯示必要 TXT 記錄的名稱和值。
您也可以呼叫 取得網域擁有權標識碼 REST API 來取得網域擁有權識別碼 。
API 管理 Proxy 伺服器如何在 TLS 交握中使用 SSL 憑證進行回應
設定閘道端點的自訂網域時,您可以設定其他屬性,以根據用戶端要求來判斷 API 管理如何使用伺服器憑證進行回應。
具有伺服器名稱指示 (SNI) 標頭的用戶端呼叫
如果您已針對閘道端點設定一或多個自訂網域,則 API 管理可以透過下列其中一個項目回應 HTTPS 要求:
- 自訂網域 (例如:
contoso.com
) - 預設網域 (例如:
apim-service-name.azure-api.net
)。
根據 SNI 標頭中的資訊,API 管理會以適當的伺服器憑證進行回應。
不具有 SNI 標頭的用戶端呼叫
如果您使用未傳送 SNI 標頭的用戶端,API 管理會根據下列邏輯建立回應:
如果服務只針對網關設定了一個自定義網域,則預設憑證是發給網關自定義網域的憑證。
如果服務已設定閘道的多個自定義網域(在 開發人員 和 進階層 中支援),您可以將 defaultSslBinding 屬性設定為 true (
"defaultSslBinding":"true"
) 來指定預設憑證。 在入口網站中,選取 [預設 SSL 繫結] 核取方塊。如果您未設定此屬性,則預設憑證就是發給預設閘道網域 (裝載於
*.azure-api.net
) 的憑證。
有大型承載之 PUT/POST 要求的支援
在 HTTPS 中使用用戶端憑證時,API 管理 Proxy 伺服器可支援具有大型承載 (>40 KB) 的要求。 若要防止伺服器的要求凍結,您可以將 Gateway 主機名上的 negotiateClientCertificate 屬性設定為 true ("negotiateClientCertificate": "true"
)。 在入口網站中,選取 [交涉用戶端憑證] 核取方塊。
如果將屬性設定為 true,系統就會在任何 HTTP 要求交換之前,於 SSL/TLS 連線時間要求用戶端憑證。 由於設定會在 閘道主機名 層級套用,因此所有連線要求都會要求客戶端憑證。 您可以解決這項限制,並針對網關設定最多 20 個自定義網域(僅限 進階層 支援)。
標準 v2 定價層中自訂網域名稱的限制
目前,在標準 v2 層中,API 管理需要可公開解析的 DNS 名稱,以允許流量流向網關端點。 如果您為閘道端點設定自訂網域名稱,該網域名稱必須能被公開解析,不能受限於私人 DNS 區域。
在限制閘道公用存取權並設定私人功能變數名稱的情況下,您可以設定應用程式閘道以接收私人功能變數名稱上的流量,並將其路由傳送至 API 管理實例的閘道端點。 如需範例架構,請參閱此 GitHub 存放庫。
疑難解答:來自 Azure Key Vault 的主機名憑證輪替失敗
由於設定變更或連線問題,您的 API 管理實例在憑證更新或輪替之後,可能無法從 Azure Key Vault 擷取主機名憑證。 發生這種情況時,您的 API 管理實例會繼續使用快取的憑證,直到它收到更新的憑證為止。 如果快取的憑證過期,將會封鎖閘道的運行時間流量。 使用過期快取憑證時,任何使用主機名憑證設定的應用程式網關等上游服務,也可以封鎖網關的運行時間流量。
若要減輕此問題,請確認密鑰保存庫存在,且憑證會儲存在密鑰保存庫中。 如果您的 API 管理實例部署在虛擬網路中,請確認 AzureKeyVault 服務標籤的輸出連線能力。 檢查用來存取金鑰保存庫的受控識別是否存在。 確認受控識別存取金鑰保存庫的許可權。 如需詳細的設定步驟,請參閱本文稍早 的設定自定義功能變數名稱 - Key Vault。 還原組態之後,主機名憑證會在 4 小時內在 API 管理中重新整理。