共用方式為


在 Azure API 管理中,執行用戶端憑證驗證,來保護後端服務

適用於:所有 APIM 層

APIM 允許您使用用戶端憑證和相互 TLS 驗證,來保護對 API 後端服務的存取權。 本指南說明如何在 Azure 入口網站中,管理 Azure API 管理服務執行個體中的憑證。 此外,也會說明如何設定 API 來使用憑證存取後端服務。

您也可以使用 API 管理 REST API 來管理API 管理憑證。

憑證選項

API 管理提供兩個選項,以管理用來保護後端服務存取權的憑證:

  • 請參考在 Azure Key Vault 中的受控憑證
  • 直接在 API 管理中新增憑證檔案

建議執行金鑰保存庫憑證,因為這有助於改善 API 管理的安全性:

  • 儲存在金鑰保存庫中的憑證,可以跨服務重複使用
  • 可以將細微存取原則套用至,儲存在金鑰保存庫中的憑證
  • 在金鑰保存庫中,已更新的憑證會自動在 API 管理中旋轉。 將金鑰保存庫更新之後,在 API 管理中的憑證會在 4 小時內進行更新。 您也可以使用 Azure 入口網站,或透過管理 REST API 來手動重新整理憑證。

必要條件

注意

建議您使用 Azure Az PowerShell 模組來與 Azure 互動。 若要開始使用,請參閱安裝 Azure PowerShell (部分機器翻譯)。 若要了解如何移轉至 Az PowerShell 模組,請參閱將 Azure PowerShell 從 AzureRM 移轉至 Az

  • 如果您尚未建立 API 管理服務執行個體,請參閱 建立 API 管理服務執行個體

  • 您應該已將後端服務,設定為用戶端憑證驗證。 如果要在 Azure App Service 中設定憑證驗證,請參閱此文章

  • 您需要存取憑證和密碼,才能在 Azure 金鑰保存庫中,管理或上傳至 API 管理服務。 該憑證必須為 PFX 格式。 可接受自我簽署憑證。

    如果您使用自我簽署憑證:

金鑰保存庫整合的必要條件

注意

目前,此功能無法在工作區中使用。

  1. 如果您還沒有金鑰保存庫,請建立一個。 如需建立金鑰保存庫的步驟,請參閱快速入門:使用 Azure 入口網站建立金鑰保存庫

    若要建立憑證或將憑證匯入金鑰保存庫,請參閱快速入門:使用 Azure 入口網站從 Azure Key Vault 設定及擷取憑證

  2. 在 API 管理執行個體中啟用系統指派或使用者指派的受控識別

設定金鑰保存庫存取權

  1. 在入口網站中,瀏覽至您的金鑰保存庫。

  2. 從左側功能表中選取 [存取設定],並記下已設定的 [權限模型]

  3. 根據權限模型,為 APIM 受控識別設定金鑰保存庫存取原則Azure RBAC 存取權

    若要新增金鑰保存庫存取原則:

    1. 在左側功能表中,選取 [存取原則]
    2. 在 [存取原則] 頁面上,選取 [+ 建立]
    3. 在 [權限] 索引標籤的 [祕密權限] 下,選取 [取得] 與 [列出],然後選取 [下一步]
    4. 在 [主體] 索引標籤的 [選取主體] 中,搜尋受控識別的資源名稱,然後選取 [下一步]。 如果您使用系統指派的身分識別,則主體是您 API 管理執行個體的名稱。
    5. 再次選取 [下一步]。 在 [檢閱 + 建立] 索引標籤中,選取 [建立]

    若要設定 Azure RBAC 存取權:

    1. 在左側功能表中,選取 [存取控制 (IAM)]
    2. 在 [存取控制 (IAM)] 頁面上,選取 [新增角色指派]
    3. 在 [角色] 索引標籤上,選取 [Key Vault 憑證使用者]
    4. 在 [成員] 索引標籤上,選取 [受控識別]>[+ 選取成員]
    5. 在 [選取受控識別] 頁面上,選取系統指派的受控識別或與 APIM 執行個體相關聯的使用者指派受控識別,然後選取 [選取]
    6. 選取檢閱+指派

金鑰保存庫防火牆的需求

如果您的金鑰保存庫已啟用金鑰保存庫防火牆,則下列為其他需求:

  • 您必須使用 API 管理執行個體的系統指派受控識別來存取金鑰保存庫。

  • 在金鑰保存庫防火牆中,啟用 [允許信任的 Microsoft 服務略過此防火牆] 選項。

  • 當您選取要新增至 Azure API 管理的憑證或祕密時,請確定您的本機用戶端 IP 位址可以暫時存取金鑰保存庫。 如需詳細資訊,請參閱設定 Azure Key Vault 網路設定

    完成設定之後,您可以在金鑰保存庫防火牆中封鎖用戶端位址。

虛擬網路需求

如果 API 管理執行個體已部署在虛擬網路中,也請設定下列網路設定:

  • 在 API 管理子網路上啟用 Azure Key Vault 的服務端點
  • 設定網路安全性群組 (NSG) 規則,以允許對 AzureKeyVault 和 AzureActiveDirectory 服務標籤的輸出流量。

如需詳細資料,請參閱在 VNet 中設定 Azure API 管理時的網路設定

新增金鑰保存庫憑證

請參閱金鑰保存庫整合的必要條件

重要

將金鑰保存庫憑證新增至 API 管理執行個體時,您必須具有從金鑰保存庫列出秘密的權限。

警告

在 API 管理中使用金鑰保存庫憑證時,請小心不要刪除用來存取金鑰保存庫的憑證、金鑰保存庫,或受控識別。

如果要將金鑰保存庫憑證新增至 API 管理:

  1. Azure 入口網站中,瀏覽至您的 API 管理執行個體。

  2. [安全性] 底下,選取 [憑證]

  3. 選取 [憑證]>[+新增]

  4. [識別碼] 中,輸入您選擇的名稱。

  5. [憑證] 中,選取 [金鑰保存庫]

  6. 輸入金鑰保存庫憑證的識別碼,或選擇 [選取] 從金鑰保存庫來選取憑證。

    重要

    如果您自行輸入金鑰保存庫憑證識別碼,請確定這個沒有版本資訊。 否則,憑證在金鑰保存庫中更新後,不會在 API 管理中自動旋轉。

  7. 在 [用戶端身分識別] 中,選取系統指派或現有的使用者指派受控識別。 了解如何在 API 管理服務中新增或修改受控識別

    注意

    身分識別需要從金鑰保存庫來取得和列出憑證。 如果您尚未設定金鑰保存庫的存取權,API 管理會提示您,以便可以使用必要的權限自動設定身分識別。

  8. 選取 [新增]。

    在入口網站中將金鑰保存庫憑證新增至 API 管理的螢幕擷取畫面。

  9. 選取 [儲存]。

上傳憑證

如果要將用戶端憑證上傳至 API 管理:

  1. Azure 入口網站中,瀏覽至您的 API 管理執行個體。

  2. [安全性] 底下,選取 [憑證]

  3. 選取 [憑證]>[+新增]

  4. [識別碼] 中,輸入您選擇的名稱。

  5. [憑證] 中,選取 [自訂]

  6. 瀏覽以選取憑證 .pfx 檔案,然後輸入其密碼。

  7. 選取 [新增]。

    在入口網站中將用戶端憑證上傳至 API 管理的螢幕擷取畫面。

  8. 選取 [儲存]。

憑證上傳完畢後,其會顯示在 [憑證] 視窗中。 如果您有許多憑證,請記下所需憑證的指紋,藉以設定 API 來執行用戶端憑證驗證的網路閘道

設定 API 來執行用戶端憑證驗證的網路閘道

  1. Azure 入口網站中,瀏覽至您的 API 管理執行個體。

  2. [API] 底下,選取 [API]

  3. 從清單中選取 [API]。

  4. [設計] 索引標籤中,選取 [後端] 區段中的編輯器圖示。

  5. [閘道認證] 變更為 [用戶端憑證],並從下拉式清單中選取您的憑證。

  6. 選取 [儲存]。

    使用用戶端憑證進行閘道驗證

警告

此變更會立即生效,且該 API 的呼叫作業將使用憑證,以在後端伺服器上進行驗證。

提示

當您將憑證指定用於 API 後端服務的閘道驗證時,憑證遂成為該 API 原則的一部分,因此可以在原則編輯器中檢視。

停用自我簽署憑證的憑證鏈結驗證

如果您使用自我簽署憑證,則需要停用信任鏈結驗證,才能使 API 管理與後端系統通訊。 否則將會傳回 500 錯誤碼。 如果要這樣設定,請使用New-AzApiManagementBackend(適用於新的後端) 或Set-AzApiManagementBackend(適用於現有的後端) PowerShell Cmdlet,並將-SkipCertificateChainValidation參數設定為True

$context = New-AzApiManagementContext -resourcegroup 'ContosoResourceGroup' -servicename 'ContosoAPIMService'
New-AzApiManagementBackend -Context  $context -Url 'https://contoso.com/myapi' -Protocol http -SkipCertificateChainValidation $true

您也可以使用後端 REST API 來停用憑證鏈結驗證。

刪除用戶端憑證

如果要刪除憑證,請選取 [憑證],然後從 [捷徑功能表 (...)] 中選取 [刪除]

刪除憑證

重要

如果該憑證已受任何原則所參考,系統將顯示警告畫面。 若要刪除憑證,您必須先從任何原則中已設定使用該憑證的部分,予以移除。

下一步