批次端點的授權
批次端點支援 Microsoft Entra 驗證,或 aad_token
。 這表示,為了叫用批次端點,使用者必須向批次端點 URI 提供有效的 Microsoft Entra 驗證權杖。 授權是在端點層級強制執行。 下列文章說明如何正確地與批次端點互動,以及其安全性需求。
授權的運作方式
若要叫用批次端點,使用者必須出示代表安全性主體的有效 Microsoft Entra 權杖。 此主體可以是使用者主體或服務主體。 在任何案例中,一旦叫用端點,就會在與權杖相關聯的身分識別下建立批次部署作業。 身分識別需要下列權限,才能成功建立作業:
- 讀取批次端點/部署。
- 在批次推斷端點/部署中建立作業。
- 建立實驗/執行。
- 從資料存放區讀取和寫入,以及讀取和寫入至資料存放區。
- 列出資料存放區祕密。
如需 RBAC 權限的詳細清單,請參閱為批次端點叫用設定 RBAC。
重要
根據資料存放區的設定方式,用來叫用批次端點的身分識別,可能無法用來讀取基礎資料。 如需詳細資訊,請參閱設定計算叢集以進行資料存取。
如何使用不同類型的認證來執行作業
下列範例顯示使用不同類型的認證來啟動批次部署作業的不同方式:
重要
在啟用私人連結的工作區上作業時,無法從 Azure Machine Learning 工作室中的 UI 叫用批次端點。 請改用 Azure Machine Learning CLI v2 來建立作業。
必要條件
- 此範例假設您已正確將模型部署為批次端點。 特別是,我們會使用教學課程在批次部署中使用 MLflow 模型中建立的「核心條件分類器」。
使用使用者的認證執行作業
在此案例中,我們想要使用目前登入的使用者身分識別來執行批次端點。 執行下列步驟:
使用 Azure CLI 使用互動式或裝置程式碼驗證來登入:
az login
驗證之後,請使用下列命令來執行批次部署作業:
az ml batch-endpoint invoke --name $ENDPOINT_NAME \ --input https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci
使用服務主體執行作業
在此案例中,我們想要使用已在 Microsoft Entra ID 中建立的服務主體來執行批次端點。 若要完成驗證,您必須建立祕密來執行驗證。 執行下列步驟:
如選項 3:建立新的用戶端密碼中所述,建立用於驗證的祕密。
若要使用服務主體進行驗證,請使用下列命令。 如需詳細資料,請參閱使用 Azure CLI 登入。
az login --service-principal \ --tenant <tenant> \ -u <app-id> \ -p <password-or-cert>
驗證之後,請使用下列命令來執行批次部署作業:
az ml batch-endpoint invoke --name $ENDPOINT_NAME \ --input https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/
使用受控識別執行作業
您可以使用受控識別來叫用批次端點和部署。 請注意,此管理身分識別不屬於批次端點,但其是用來執行端點的身分識別,因此會建立批次作業。 使用者指派和系統指派的身分識別都可以在此情節中使用。
若資源已針對 Azure 資源的受控識別進行設定,則您可以使用受控識別來登入。 使用資源身分識別登入可透過 --identity
旗標來完成。 如需詳細資料,請參閱使用 Azure CLI 登入。
az login --identity
驗證之後,請使用下列命令來執行批次部署作業:
az ml batch-endpoint invoke --name $ENDPOINT_NAME \
--input https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci
設定批次端點叫用的 RBAC
批次端點會公開耐久性 API,可供取用者用來產生作業。 叫用者要求適當的權限,才能產生這些作業。 您可以使用其中一個內建安全性角色,也可以基於目的建立自訂角色。
若要成功叫用批次端點,您需要授與下列明確動作給用來叫用端點的身分識別。 如需指派 Azure 角色的指示,請參閱指派 Azure 角色的步驟。
"actions": [
"Microsoft.MachineLearningServices/workspaces/read",
"Microsoft.MachineLearningServices/workspaces/data/versions/write",
"Microsoft.MachineLearningServices/workspaces/datasets/registered/read",
"Microsoft.MachineLearningServices/workspaces/datasets/registered/write",
"Microsoft.MachineLearningServices/workspaces/datasets/unregistered/read",
"Microsoft.MachineLearningServices/workspaces/datasets/unregistered/write",
"Microsoft.MachineLearningServices/workspaces/datastores/read",
"Microsoft.MachineLearningServices/workspaces/datastores/write",
"Microsoft.MachineLearningServices/workspaces/datastores/listsecrets/action",
"Microsoft.MachineLearningServices/workspaces/listStorageAccountKeys/action",
"Microsoft.MachineLearningServices/workspaces/batchEndpoints/read",
"Microsoft.MachineLearningServices/workspaces/batchEndpoints/write",
"Microsoft.MachineLearningServices/workspaces/batchEndpoints/deployments/read",
"Microsoft.MachineLearningServices/workspaces/batchEndpoints/deployments/write",
"Microsoft.MachineLearningServices/workspaces/batchEndpoints/deployments/jobs/write",
"Microsoft.MachineLearningServices/workspaces/batchEndpoints/jobs/write",
"Microsoft.MachineLearningServices/workspaces/computes/read",
"Microsoft.MachineLearningServices/workspaces/computes/listKeys/action",
"Microsoft.MachineLearningServices/workspaces/metadata/secrets/read",
"Microsoft.MachineLearningServices/workspaces/metadata/snapshots/read",
"Microsoft.MachineLearningServices/workspaces/metadata/artifacts/read",
"Microsoft.MachineLearningServices/workspaces/metadata/artifacts/write",
"Microsoft.MachineLearningServices/workspaces/experiments/read",
"Microsoft.MachineLearningServices/workspaces/experiments/runs/submit/action",
"Microsoft.MachineLearningServices/workspaces/experiments/runs/read",
"Microsoft.MachineLearningServices/workspaces/experiments/runs/write",
"Microsoft.MachineLearningServices/workspaces/metrics/resource/write",
"Microsoft.MachineLearningServices/workspaces/modules/read",
"Microsoft.MachineLearningServices/workspaces/models/read",
"Microsoft.MachineLearningServices/workspaces/endpoints/pipelines/read",
"Microsoft.MachineLearningServices/workspaces/endpoints/pipelines/write",
"Microsoft.MachineLearningServices/workspaces/environments/read",
"Microsoft.MachineLearningServices/workspaces/environments/write",
"Microsoft.MachineLearningServices/workspaces/environments/build/action",
"Microsoft.MachineLearningServices/workspaces/environments/readSecrets/action"
]
設定資料存取的計算叢集
批次端點可以確保只有經授權的使用者能夠叫用批次部署並產生作業。 不過,根據輸入資料的設定方式,可以使用其他認證來讀取基礎資料。 使用下表來了解所使用的認證:
資料輸入類型 | 認證在存放區中 | 使用的認證 | 授與存取權的依據 |
---|---|---|---|
資料存放區 | Yes | 工作區中資料存放區的認證 | 存取金鑰或 SAS |
資料資產 | Yes | 工作區中資料存放區的認證 | 存取金鑰或 SAS |
資料存放區 | No | 作業的身分識別 + 計算叢集的受控識別 | RBAC |
資料資產 | No | 作業的身分識別 + 計算叢集的受控識別 | RBAC |
Azure Blob 儲存體 | 未套用 | 作業的身分識別 + 計算叢集的受控識別 | RBAC |
Azure Data Lake Storage Gen1 | 未套用 | 作業的身分識別 + 計算叢集的受控識別 | POSIX |
Azure Data Lake Storage Gen2 | 未套用 | 作業的身分識別 + 計算叢集的受控識別 | POSIX 和 RBAC |
針對顯示計算叢集作業的身分識別與受控識別之資料表中的這些項目,計算叢集的受控識別會用於掛接和設定儲存體帳戶。 不過,作業的身分識別仍用於讀取基礎資料,從而讓您實現細微的存取控制。 這表示若要從儲存體成功讀取資料,執行部署所在的計算叢集受控識別必須至少有儲存體帳戶的儲存體 Blob 資料讀取器存取權。
若要設定計算叢集以進行資料存取,請遵循下列步驟:
瀏覽至 [計算],再瀏覽至 [計算叢集],然後選取部署所使用的計算叢集。
將受控識別指派給計算叢集:
在 [受控識別] 區段中,確認計算是否已有指派的受控識別。 如果沒有,請選取 [編輯] 選項。
選取 [指派受控識別],並視需要進行設定。 您可以使用系統指派的受控識別或使用者指派的受控識別。 如果使用系統指派的受控識別,則會將其命名為 “[工作區名稱]/computes/[計算叢集名稱]”。
儲存變更。
移至 [Azure 入口網站],並瀏覽至資料所在的相關聯儲存體帳戶。 如果資料輸入是資料資產或資料存放區,請尋找這些資產所在的儲存體帳戶。
在儲存體帳戶中指派儲存體 Blob 資料讀取器存取層級:
移至 [存取控制 (IAM)] 區段。
選取 [角色指派] 索引標籤 ,然後按一下 [新增]> [角色指派]。
尋找名為 [儲存體 Blob 資料讀取器] 的角色,加以選取,然後按 [下一步]。
按一下 [選取成員]。
尋找您已建立的受控識別。 如果使用系統指派的受控識別,則會將其命名為 “[工作區名稱]/計算/[計算叢集名稱]”。
新增帳戶,然後完成精靈。
端點已準備好從選取的儲存體帳戶接收作業和輸入資料。