Share via


使用 SDK v1 設定 Azure Machine Learning 資源和工作流程的驗證

適用於:Python SDK azureml v1

了解如何設定對 Azure Machine Learning 工作區的驗證。 大多數情況下,Azure Machine Learning 工作區的驗證是以 Microsoft Entra ID 為基礎。 一般而言,您可以在連接到工作區時,使用四個驗證工作流程:

  • 互動式:您在 Microsoft Entra ID 使用您的帳戶以直接驗證,或取得用於驗證的權杖。 互動式驗證會在實驗和反覆式開發法期間使用。 互動式驗證可讓您控制每個使用者對資源的存取 (例如,Web 服務)。

  • 服務主體:您會在 Microsoft Entra ID 中建立服務主體帳戶,並使用它來驗證或取得權杖。 當您需要自動化流程來向服務驗證,而不需要使用者互動時,就會使用服務主體。 例如,每次定型程式碼變更時,會定型並測試模型的持續整合和部署指令碼。

  • Azure CLI 工作階段:您可以使用使用中的 Azure CLI 工作階段進行驗證。 Azure CLI 的驗證會在實驗和反覆式開發法期間,或是當需要使用預先驗證的工作階段向服務進行驗證的自動化程序時使用。 您可以透過本機工作站上的 Azure CLI 登入 Azure,而不需將認證儲存在 Python 程式碼中,或提示使用者進行驗證。 同樣地,您可以重複使用相同的指令碼做為持續整合和部署管線的一部分,同時使用服務主體身分識別來驗證 Azure CLI。

  • 受控識別:使用 Azure Virtual Machine 上的 Azure Machine Learning SDK,您可以使用 Azure 的受控識別。 此工作流程可讓 VM 使用受控識別來連線到工作區,而不需要將認證儲存在 Python 程式碼中,或提示使用者進行驗證。 您也可以將 Azure Machine Learning 計算叢集和計算執行個體設為使用受控識別,以在定型模型時,使用受控識別來存取工作區。

無論使用哪一種驗證工作流程,Azure 角色型存取控制 (Azure RBAC) 用來限定允許的資源存取層級 (授權)。 例如,管理員或自動化流程可能具有建立計算執行個體的存取權,但不能使用它,而資料科學家可以使用它,但無法刪除或建立。 如需詳細資訊,請參閱 管理 Azure Machine Learning 工作區

Microsoft Entra 條件式存取可用來進一步控制或限制每個驗證工作流程之工作區的存取權。 例如,管理員可以只允許來自受控裝置的工作區存取。

必要條件

Microsoft Entra ID

工作區的所有驗證工作流程都依賴 Microsoft Entra ID。 如果您想要讓使用者使用個別帳戶進行驗證,他們必須有 Microsoft Entra ID 中的帳戶。 如果您想要使用服務主體,則必須存在於您的 Microsoft Entra ID 中。 受控識別也是 Microsoft Entra ID 的功能。

如需 Microsoft Entra ID 的詳細資訊,請參閱什麼是 Microsoft Entra 驗證

當您建立 Microsoft Entra 帳戶之後,請參閱管理 Azure Machine Learning 工作區的存取權,以取得將工作區的存取權授與 Azure Machine Learning 中其他作業的相關資訊。

設定服務主體

若要使用服務主體 (SP),您必須先建立 SP。 然後授與它對工作區的存取權。 如先前所述,Azure 角色型存取控制 (Azure RBAC) 用於控制存取權,因此,您也必須決定授與 SP 的存取權。

重要

使用服務主體時,會授與其所使用工作所需的最小存取權。 例如,如果服務主體擁有者或參與者僅用於讀取 Web 部署的存取權杖,您不會授與其存取權。

授與最小存取權的原因是,服務主體會使用密碼進行驗證,而且密碼可能會儲存為自動化指令碼的一部分。 如果密碼遭到洩漏,擁有特定工作所需的最低存取權可以將 SP 的惡意使用降至最低。

建立 SP 並將存取權授與工作區的最簡單方式是使用 Azure CLI。 若要建立服務主體,並授與對您工作區的存取權,請使用下列步驟:

注意

您必須是訂閱的管理員,才能執行下列步驟。

  1. 向您的 Azure 訂用帳戶進行驗證:

    az login
    

    如果 CLI 可以開啟預設瀏覽器,它會執行這項操作,並載入登入頁面。 否則,您需要開啟瀏覽器,並遵循命令列上的指示。 這些指示需要瀏覽至 https://aka.ms/devicelogin,並輸入授權碼。

    如果您有多個 Azure 訂閱,則必須使用 az account set -s <subscription name or ID> 命令以設定訂閱。 如需詳細資訊,請參閱使用多個 Azure 訂用帳戶

    如需其他驗證方法,請參閱使用 Azure CLI 登入

  2. 建立服務主體。 下列範例會建立名為 ml-auth 的 SP:

    az ad sp create-for-rbac --json-auth --name ml-auth --role Contributor --scopes /subscriptions/<subscription id>
    

    參數 --json-auth 可在 Azure CLI 版本 >= 2.51.0 中使用。 此版本之前的版本會使用 --sdk-auth

    此輸出將會是與下列類似的 JSON。 請記下 clientIdclientSecrettenantId 欄位,因為您將在本文中的其他步驟中用到。

    {
        "clientId": "your-client-id",
        "clientSecret": "your-client-secret",
        "subscriptionId": "your-sub-id",
        "tenantId": "your-tenant-id",
        "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
        "resourceManagerEndpointUrl": "https://management.azure.com",
        "activeDirectoryGraphResourceId": "https://graph.windows.net",
        "sqlManagementEndpointUrl": "https://management.core.windows.net:5555",
        "galleryEndpointUrl": "https://gallery.azure.com/",
        "managementEndpointUrl": "https://management.core.windows.net"
    }
    
  3. 使用上一個步驟中所傳回的 clientId 值,擷取服務主體的詳細資料:

    az ad sp show --id your-client-id
    

    下列 JSON 是來自命令的輸出簡易範例。 記下 objectId 欄位,因為您需要此欄位的值才能進行下一個步驟。

    {
        "accountEnabled": "True",
        "addIns": [],
        "appDisplayName": "ml-auth",
        ...
        ...
        ...
        "objectId": "your-sp-object-id",
        "objectType": "ServicePrincipal"
    }
    
  4. 若要授與 Azure Machine Learning 所使用工作區和其他資源的存取權,請使用以下文章中的資訊:

    重要

    擁有者存取權可讓服務主體在您的工作區中進行幾乎任何作業。 在本文件中,使用它來示範如何授與存取權;在生產環境中,Microsoft 建議授與服務主體執行您打算使用之角色所需的最小存取權。 如需有關使用您案例所需的存取權來建立自訂角色的詳細資訊,請參閱管理 Azure Machine Learning 工作區的存取權

設定受控識別

重要

只有從 Azure 虛擬機器使用 Azure Machine Learning SDK,或使用 Azure Machine Learning 計算叢集或計算執行個體時,才支援受控識別。

使用 VM 的受控識別

  1. 在虛擬機器上為 Azure 資源啟用系統指派的受控識別

  2. Azure 入口網站,選取您的工作區,然後選取 [存取控制 (IAM)]

  3. 選取 [新增]、[新增角色指派],以開啟 [新增角色指派] 頁面。

  4. 指派下列角色。 如需詳細步驟,請參閱使用 Azure 入口網站指派 Azure 角色

    設定
    角色 您要指派的角色。
    存取權指派對象 受控識別
    成員 您稍早建立的受控識別

    Add role assignment page in Azure portal.

具有計算叢集的受控識別

如需詳細資訊,請參閱為計算叢集設定受控識別

使用互動式驗證

重要

互動式驗證會使用您的瀏覽器,而且需要 Cookie (包括協力廠商 Cookie)。 如果您已停用 Cookie,您可能會收到錯誤,例如「我們無法將您登入。」如果您已啟用 Microsoft Entra 多重要素驗證,也可能會發生此錯誤。

文件和樣本中的大部分範例會使用互動式驗證。 例如,使用 SDK 時,有兩個函式呼叫會自動提示使用 UI 型驗證流程:

  • 呼叫 from_config() 函式會發出提示。

    from azureml.core import Workspace
    ws = Workspace.from_config()
    

    from_config() 函式會尋找 JSON 檔案,其中包含工作區連線資訊。

  • 使用 Workspace 建構函式來提供訂閱、資源群組和工作區資訊,也會提示進行互動式驗證。

    ws = Workspace(subscription_id="your-sub-id",
                  resource_group="your-resource-group-id",
                  workspace_name="your-workspace-name"
                  )
    

提示

如果您有多個租用戶的存取權,則可能需要匯入類別,並明確定義目標租用戶。 呼叫 InteractiveLoginAuthentication 的建構函式也會提示您登入,與上述呼叫類似。

from azureml.core.authentication import InteractiveLoginAuthentication
interactive_auth = InteractiveLoginAuthentication(tenant_id="your-tenant-id")

使用 Azure CLI 時,az login 命令是用來驗證 CLI 工作階段。 如需詳細資訊,請參閱開始使用 Azure CLI

提示

如果您是從先前使用 Azure CLI 以互動方式驗證的環境中使用 AzureCliAuthentication 類別,使用 CLI 快取的認證來驗證工作區:

from azureml.core.authentication import AzureCliAuthentication
cli_auth = AzureCliAuthentication()
ws = Workspace(subscription_id="your-sub-id",
               resource_group="your-resource-group-id",
               workspace_name="your-workspace-name",
               auth=cli_auth
               )

使用服務主體驗證

若要使用服務主體從 SDK 驗證您的工作區,請使用 ServicePrincipalAuthentication 類別建構函式。 當您建立服務提供者做為參數時,請使用您取得的值。 tenant_id 參數會對應到上述的 tenantIdservice_principal_id 對應至 clientIdservice_principal_password 對應至 clientSecret

from azureml.core.authentication import ServicePrincipalAuthentication

sp = ServicePrincipalAuthentication(tenant_id="your-tenant-id", # tenantID
                                    service_principal_id="your-client-id", # clientId
                                    service_principal_password="your-client-secret") # clientSecret

sp 變數現在會保留在 SDK 中直接使用的驗證物件。 一般而言,將上述使用的識別碼/祕密儲存在環境變數中是個好主意,如下列程式碼所示。 儲存在環境變數中,可防止資訊不慎簽入 GitHub 存放庫中。

import os

sp = ServicePrincipalAuthentication(tenant_id=os.environ['AML_TENANT_ID'],
                                    service_principal_id=os.environ['AML_PRINCIPAL_ID'],
                                    service_principal_password=os.environ['AML_PRINCIPAL_PASS'])

針對在 Python 中執行並主要使用 SDK 的自動工作流程,您可在大部分的情況下使用此物件來進行驗證。 下列程式碼會使用您建立的驗證物件,以向工作區進行驗證。

from azureml.core import Workspace

ws = Workspace.get(name="ml-example",
                   auth=sp,
                   subscription_id="your-sub-id",
                   resource_group="your-rg-name")
ws.get_details()

使用受控識別驗證

若要從使用受控識別設定的 VM、計算叢集或計算執行個體驗證工作區,請使用 MsiAuthentication 類別。 下列範例示範如何使用此類別來驗證工作區:

from azureml.core.authentication import MsiAuthentication

msi_auth = MsiAuthentication()

ws = Workspace(subscription_id="your-sub-id",
                resource_group="your-resource-group-id",
                workspace_name="your-workspace-name",
                auth=msi_auth
                )

使用條件式存取

身為管理員,您可以針對登入工作區的使用者,強制執行 Microsoft Entra 條件式存取原則。 例如,您可以要求雙因素驗證,或只允許從受控裝置登入。 若要特別針對 Azure Machine Learning 工作區使用條件式存取,請將條件式存取原則指派至名為 Azure Machine Learning 的應用程式。 應用程式識別碼為 0736f41a-0425-bdb5-1563eff02385

下一步