在本文中,您會了解如何搭配需要驗證的應用程式端點使用 Azure 負載測試。 視您的應用程式實作而定,您可以使用存取令牌、用戶認證、受控識別或客戶端憑證來驗證要求。
Azure 負載測試支援下列選項用於驗證的端點:
先決條件
使用共用祕密或認證進行驗證
在此案例中,應用程式端點會要求您使用共用祕密,例如存取權杖、API 金鑰或使用者認證來進行驗證。
下圖顯示如何使用共用祕密或認證,在負載測試中向應用程式端點進行驗證。
使用共用祕密或使用者認證進行驗證的流程為:
- 例如,將祕密或認證安全地儲存在 Azure Key Vault 或 CI/CD 祕密存放區中。
- 參考負載測試組態中的秘密。
- 針對以 JMeter 為基礎的測試,使用 函
GetSecret式擷取秘密值。 使用 Locust 測試時,使用函式getenv取得密鑰。 將秘密值傳遞至應用程式要求。
安全地儲存祕密
若要避免在測試腳本中儲存和披露安全性資訊,您可以在 Azure Key Vault 或 CI/CD 秘密存放區中安全地儲存秘密。
您可以透過下列兩種方式之一,在祕密存放區中新增安全性資訊:
在 Azure Key Vault 中新增祕密資訊。 請遵循使用秘密將負載測試參數化的步驟來儲存祕密,並授權負載測試資源讀取其值。
將祕密資訊新增為 CI/CD 中的祕密 (GitHub Actions 祕密或 Azure Pipelines 祕密變數)。
參考負載測試組態中的祕密
在您可以擷取 JMeter 測試指令碼中的祕密值之前,必須先參考負載測試組態中的祕密。
在 Azure 入口網站中,您可以參考 Azure Key Vault 中儲存的祕密。 若要在 Azure 入口網站中新增和設定負載測試祕密:
擷取並使用 JMeter 指令碼中的祕密值
您現在可以使用 GetSecret 自訂函式,擷取 JMeter 指令碼中的祕密值,並將其傳遞至應用程式要求。 例如,使用 Authorization HTTP 標頭將 OAuth 權杖傳遞至要求。
建立使用者定義的變數,以使用
GetSecret自訂函式擷取祕密值:GetSecret函式總結從 Azure Key Vault 或 CI/CD 祕密存放區中擷取值的方式。更新 JMeter 取樣器元件,以在要求中傳遞祕密。
例如,若要提供 OAuth2 存取權杖,您可以新增
Authorization來設定HTTP Header ManagerHTTP 標頭:
擷取並使用 Locust 指令碼中的祕密值
您現在可以擷取 Locust 腳本中的秘密值,並將其傳遞至應用程式要求。 例如,使用 Authorization HTTP 標頭將 OAuth 權杖傳遞至要求。
負載測試組態中設定的秘密可存取為環境變數。
- 使用負載測試組態中指定的秘密 名稱 ,使用秘密值初始化變數。
my_secret = os.getenv("appToken")
- 參考測試腳本中的變數,以使用儲存在 Azure KeyVault 中的秘密值。
使用用戶端憑證進行驗證
在此案例中,應用程式端點會要求您使用用戶端憑證進行驗證。 Azure 負載測試支援公開金鑰憑證標準 #12 (PKCS12) 類型的憑證。 您也可以在負載測試 中使用多個客戶端憑證 。
下圖顯示如何使用用戶端憑證,在負載測試中向應用程式端點進行驗證。
使用用戶端憑證進行驗證的流程為:
- 將用戶端憑證安全地儲存在 Azure Key Vault 中。
- 參考負載測試組態中的憑證。
- 針對以 JMeter 為基礎的測試,Azure 負載測試會以透明方式將憑證傳遞至所有應用程式。 針對以 Locust 為基礎的測試,您可以在測試腳本中擷取憑證,並將其傳遞至要求。
將用戶端憑證儲存在 Azure Key Vault 中
為了避免隨著 JMeter 指令碼儲存和揭露用戶端憑證,請將憑證儲存在 Azure Key Vault 中。
請遵循匯入憑證的步驟,將憑證儲存在 Azure Key Vault 中。
這很重要
Azure 負載測試僅支援 PKCS12 憑證。 以 PFX 檔案格式上傳用戶端憑證。
授與對 Azure 金鑰保存庫的存取權
當您在 Azure Key Vault 中儲存負載測試秘密或憑證時,負載測試資源會使用受控識別來存取金鑰保存庫。 在設定管理身分識別之後,您必須授與負載測試資源的受控識別從金鑰保存庫讀取這些值的權限。
若要授與 Azure 負載測試資源許可權,以從 Azure Key Vault 讀取秘密或憑證:
在 Azure 入口網站中,移至您的 Azure Key Vault 資源。
如果您沒有金鑰保存庫,請遵循 Azure Key Vault 快速入門中的指示來建立金鑰保存庫。
在左側窗格中,選取 [存取原則],然後選取 [+ 建立]。
在 [權限] 索引標籤的 [祕密權限] 下,選取 [取得],然後選取 [下一步]。
備註
Azure 負載測試會將憑證擷取為「祕密」,以確保憑證的私密金鑰可供使用。
在 [主體] 索引標籤上,搜尋並選取負載測試資源的受控識別,然後選取 [下一步]。
如果您使用系統指派的受控識別,則受控識別名稱會符合 Azure 負載測試資源的名稱。
再次選取 [下一步]。
當您的測試執行時,與負載測試資源相關聯的受控識別現在可以從金鑰保存庫讀取負載測試的祕密或憑證。
參考負載測試組態中的憑證
若要將用戶端憑證傳遞至應用程式要求,您必須參考負載測試組態中的憑證。
若要在 Azure 入口網站中將用戶端憑證新增至負載測試:
在 Azure 入口網站中,瀏覽至您的 Azure 負載測試資源。 如果您還沒有任何負載測試,請使用 JMeter 指令碼建立新的負載測試。
在左窗格中,選取 [測試] 以檢視負載測試的清單。
從清單中選取您的測試,然後選取 [編輯] 以編輯負載測試設定。
在 [參數] 索引標籤上,輸入憑證的詳細資料。
領域 價值觀 名稱 憑證的名稱。 價值 比對 Azure Key Vault 中憑證的祕密識別碼。 選取 [套用] 以儲存負載測試設定變更。
當您執行負載測試時,Azure 負載測試會從 Azure Key Vault 擷取用戶端憑證,並自動將其插入每個 JMeter Web 要求中。
針對以 Locust 為基礎的測試,您可以擷取並使用該憑證於測試腳本中。 負載測試配置中設定的憑證可在ALT_CERTIFICATES_DIR中使用。
cert_dir = os.getenv("ALT_CERTIFICATES_DIR")
cert_file = open(os.path.join(cert_dir), "cert_name_in_keyvault.pfx")
使用受控識別進行驗證
在此案例中,應用程式端點會要求您 使用受控識別進行驗證。 您可以使用系統指派和使用者指派的受控識別。
使用受控識別進行驗證的流程如下:
- 將目標端點識別的受控識別指派給 Azure 負載測試資源。
- 在負載測試組態中選取受控識別。
您必須設定負載測試腳本, 以使用受控識別來擷取存取令牌 ,並使用令牌來驗證對目標端點的要求。 例如,您可以透過對 Azure 實例元數據服務 (IMDS) 端點的 HTTP REST 呼叫取得令牌,然後使用 HTTP 標頭將令牌傳遞至要求 Authorization 。
指派受控識別
將具有目標端點所需存取權的受控識別指派給 Azure 負載測試資源。 當您執行測試時,Azure 負載測試會將此身分識別指派給引擎實例。 這可確保您使用受控識別擷取存取權杖的要求成功。
您可以使用系統指派的受控識別或使用者指派的受控識別,
若要使用系統指派的受控識別,請先 將系統指派的受控識別指派 給您的 Azure Load Testing 資源。 啟用之後,請在目標端點上提供此身分識別所需的 RBAC 許可權。
若要使用使用者指派的受控識別,請先 將使用者指派的身分識別指派 給您的 Azure Load Testing 資源。 如果此身分識別在目標端點上沒有必要的 RBAC 許可權,請提供所需的許可權。 如果您的測試腳本使用多個使用者指派的多個身分識別,請將多個身分識別指派給您的資源,並確定他們具有所需的 RBAC 許可權。
在負載測試組態中選取受控識別
當您在 Azure 負載測試中建立或編輯測試時,請選取必要的受控識別。
若要在 Azure 入口網站中選取並設定用於驗證的受控識別:
這很重要
當您使用受控識別進行驗證時,不會啟用跨區域的負載分佈。
相關內容
深入了解如何將負載測試參數化。
深入瞭解 在負載測試中使用多個憑證。