適用於:
Azure CLI ml extension v2 (目前版本)
Python SDK azure-ai-ml v2 (目前版本)
Azure Machine Learning 是由多個 Azure 服務組成。 多種方法支援 Azure 機器學習與其依賴服務之間的認證。
- Azure Machine Learning 工作區使用受控身分識別與其他服務通訊。 預設情況下,此身份是系統指派的管理身份。 您也可以改用使用者指派的受控身分識別。
- Azure Machine Learning 使用 Azure Container Registry (ACR),儲存用來訓練和部署模型的 Docker 映像。 如果您允許 Azure Machine Learning 自動建立 ACR,則會啟用 系統管理員帳戶。
- Azure Machine Learning 計算叢集使用受控身分識別,從 Azure Key Vault 擷取資料存放區的連線資訊,並從 ACR 提取 Docker 映像。 你也可以設定基於身份的資料儲存存取,這會使用運算叢集的管理身份。
- 根據資料儲存體服務和設定,資料存取可能透過多種路徑進行。 例如,資料存放區的驗證可能使用帳戶金鑰、權杖、安全主體、受控身分識別或使用者身分識別。
- 執行推斷時,受控線上端點可以使用受控身分識別存取 Azure 資源。 如需詳細資訊,請參閱從線上端點存取 Azure 資源。
先決條件
Azure Machine Learning 工作區。 如需建立工作區的指示,請參閱 建立工作區。
Azure CLI 和
ml擴充功能或 Azure Machine Learning Python SDK v2:若要安裝 Azure CLI 和
ml擴充功能,請參閱 安裝和設定 CLI (v2) 。本文中的範例假設您使用 Bash Shell 或相容的 Shell。 例如,您可以在 Linux 系統上使用命令行界面,或使用 Windows 的 Linux 子系統。
工作區身分識別類型
Azure Machine Learning 工作區使用受控身分識別與其他服務通訊。 Azure 機器學習支援多種身份類型。
| 受控識別類型 | 角色指派建立 | 目的 |
|---|---|---|
| 系統指派 (SAI) | 由 Microsoft 所管理 | 生命週期與資源繫結、使用單一資源、可輕鬆開始使用 |
| 系統指派 + 使用者指派 (SAI+UAI) | 由您管理 | 使用者指派的身分識別獨立生命週期、多資源使用、控制最低權限存取權、在訓練作業中存取資料。 |
建立 SAI 身份類型的工作空間後,你可以更新為 SAI+UAI。 你無法將工作區從 SAI+UAI 更新成 SAI。 你可以在同一個工作區指派多個使用者指派的身份。
使用者指派的受控識別
工作區
從 Azure 入口網站建立 Azure Machine Learning 工作區時,您可以新增使用者指派的受控身分識別。 建立工作區時,請使用下列步驟:
- 從 [基本] 頁面,選取您要搭配工作區使用的 Azure 儲存體帳戶、Azure Container Registry 和 Azure Key Vault。
- 從 [身分識別] 頁面,選取 [使用者指派的身分識別],然後選取要使用的受控識別。
Azure Machine Learning 工作區的使用者指派受控身分識別上需要下列 Azure RBAC 角色指派,才能存取工作區相關聯資源上的資料。
| 資源 | 權限 |
|---|---|
| Azure Machine Learning 工作區 | 參與者 |
| Azure 儲存體 | 參與者 (控制平面) + 儲存體 Blob 資料參與者 (資料平面,選用,以在 Azure Machine Learning 工作室中啟用資料預覽) |
| Azure Key Vault (使用 RBAC 權限模型時) | 參與者 (控制平面) + Key Vault 系統管理員 (資料平面) |
| Azure Key Vault (使用存取原則權限模型時) | 參與者 + 任何存取原則權限,還有清除作業 |
| Azure Container Registry | 參與者 |
| Azure Application Insights | 參與者 |
若要在使用者指派的管理身份上自動建立角色指派,您可以使用 此 ARM 範本。
秘訣
如果工作區具有客戶自控金鑰以進行加密,您可以傳入使用者指派的受控身分識別,以從儲存體向 Key Vault 驗證。 使用 user-assigned-identity-for-cmk-encryption (CLI) 或 user_assigned_identity_for_cmk_encryption (SDK) 傳入受控身分識別。 此受控身分識別與工作區主要使用者指派的受控身分識別可以相同或不同。
若要建立具有多個使用者指派身分識別的工作區,請使用下列其中一個方法:
az ml workspace create -f workspace_creation_with_multiple_UAIs.yml --subscription <subscription ID> --resource-group <resource group name> --name <workspace name>
以下範例展示了 workspace_creation_with_multiple_UAIs.yml的內容:
location: <region name>
identity:
type: user_assigned
user_assigned_identities:
'<UAI resource ID 1>': {}
'<UAI resource ID 2>': {}
storage_account: <storage acccount resource ID>
key_vault: <key vault resource ID>
image_build_compute: <compute(virtual machine) resource ID>
primary_user_assigned_identity: <one of the UAI resource IDs in the above list>
要更新工作區的使用者指派身份,包括新增或刪除現有身份,請使用以下方法之一:
az ml workspace update -f workspace_update_with_multiple_UAIs.yml --subscription <subscription ID> --resource-group <resource group name> --name <workspace name>
以下範例展示了 workspace_update_with_multiple_UAIs.yml的內容:
identity:
type: user_assigned
user_assigned_identities:
'<UAI resource ID 1>': {}
'<UAI resource ID 2>': {}
primary_user_assigned_identity: <one of the UAI resource IDs in the above list>
秘訣
要新增 UAI,請在該 user_assigned_identities 區塊下指定新的 UAI ID,並列出現有的 UAI。 您必須傳遞所有現有的UAI ID。
要刪除一個或多個現有的 UAI,請將你想保留的 UAI ID 加入該 user_assigned_identities 區段。 你沒包含的 UAI ID 會被刪除。
除了系統指派的身分識別之外,將使用者指派的受控身分識別新增至工作區
在某些情況下,除了預設系統指派的工作區身分識別之外,您可能需要使用使用者指派的受控身分識別。 要在不更改現有工作區身份的情況下新增使用者指派的管理身份,請使用以下步驟:
建立使用者指派的受控身分識別。 儲存您所建立受控身分識別的識別碼。
要將受管理身份綁定到工作區,請建立一個指定身份的 YAML 檔案。 以下範例展示了 YAML 檔案的內容。 將
<TENANT_ID>、<RESOURCE_GROUP>和<USER_MANAGED_ID>佔位符替換成您指定的值。identity: type: system_assigned,user_assigned tenant_id: <TENANT_ID> user_assigned_identities: '/subscriptions/<SUBSCRIPTION_ID/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER_MANAGED_ID>': {}使用 Azure CLI
az ml workspace update命令來更新工作區。 請使用--file參數來指定前一步的 YAML 檔案。 此命令如下列範例所示:az ml workspace update --resource-group <RESOURCE_GROUP> --name <WORKSPACE_NAME> --file <YAML_FILE_NAME>.yaml
共享資源的資料隔離
當多個工作區共用相同相關資源(儲存帳號、金鑰庫或容器登錄檔)時,啟用資料隔離以防止命名衝突,並確保每個工作區只能存取自己的資料。 該 enableDataIsolation 旗標配置工作區產物如何在共享資源中儲存與存取。
重要事項
你只能在建立工作區時設定資料隔離選項。 工作區建立後你無法啟用或停用它。
啟用資料隔離的影響
啟用資料隔離時,工作區會套用以下設定:
| 資源 | 行為 |
|---|---|
| 記憶體帳戶 | 容器名稱的前綴是與工作區 GUID 相關聯,例如({workspaceGUID}-azureml-blobstore)。 工作區受控身分識別會收到資料平面角色指派,並以 Azure 屬性型存取控制 (ABAC) 條件限制存取權限,僅能存取工作區特定的容器。 |
| 金鑰保存庫 | 秘密名稱會以工作區 GUID 為首碼,以隔離不同工作區共享同一金鑰保險庫時的秘密。 |
| 容器登錄 | Docker 映像名稱會加上工作區 GUID 為首碼,以隔離共用相同登錄工作區之間的映像。 |
依工作區類型預設行為
資料隔離的預設值取決於工作區類型:
| 工作區類型 | 資料隔離預設 |
|---|---|
hub |
已啟用 |
project |
啟用(從集線器繼承) |
default |
Disabled |
何時啟用資料隔離
在以下情況啟用資料隔離:
- 多個工作區共用同一個儲存帳號、金鑰庫或容器登錄檔
- 請避免在不同工作區之間以相同名稱建立的成品 (例如 Docker 映像或秘密) 而發生命名衝突。
- 你需要更嚴格的存取控制,確保工作區身份只能存取自己的資料
對於樞紐與專案工作區,預設啟用資料隔離以支援共享資源模型。 欲了解更多資訊,請參閱「 什麼是 Azure 機器學習中樞工作區?」
建立工作區時啟用資料隔離
az ml workspace create --name <WORKSPACE_NAME> \
--resource-group <RESOURCE_GROUP> \
--enable-data-isolation
或者,可以在 YAML 設定檔中指定資料隔離:
$schema: https://azuremlschemas.azureedge.net/latest/workspace.schema.json
name: my-workspace
location: eastus
enable_data_isolation: true
storage_account: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE_ACCOUNT>
key_vault: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.KeyVault/vaults/<KEY_VAULT>
container_registry: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.ContainerRegistry/registries/<CONTAINER_REGISTRY>
接著建立工作區:
az ml workspace create --file workspace.yml --resource-group <RESOURCE_GROUP>
計算叢集
附註
Azure Machine Learning 計算叢集只會支援一個系統指派的身分識別或多個使用者指派的身分識別,而不會同時支援兩者。
預設受控身分識別是系統指派的受控身分識別,或第一個使用者指派的受控身分識別。
在執行過程中,一個身份有兩種應用:
系統會使用身分識別來設定使用者的儲存體掛接、容器登錄和資料存放區。
- 在此情況下,系統會使用預設受控識別。
您要套用身分識別,從提交作業的程式碼中存取資源:
- 在此情況下,請針對您要用來擷取認證的受控身分識別,提供對應的 client_id。
- 或是透過 DEFAULT_IDENTITY_CLIENT_ID 環境變數,取得使用者指派身分識別的用戶端識別碼。
例如,若要使用預設受控身分識別來取得資料存放區的權杖:
client_id = os.environ.get('DEFAULT_IDENTITY_CLIENT_ID') credential = ManagedIdentityCredential(client_id=client_id) token = credential.get_token('https://storage.azure.com/')
若要使用受控身分識別設定計算叢集,請使用下列其中一種方法:
az ml compute create -f create-cluster.yml
以下範例展示了 create-cluster.yml的內容:
$schema: https://azuremlschemas.azureedge.net/latest/amlCompute.schema.json
name: basic-example
type: amlcompute
size: STANDARD_DS3_v2
min_instances: 0
max_instances: 2
idle_time_before_scale_down: 120
identity:
type: user_assigned
user_assigned_identities:
- resource_id: "identity_resource_id"
作為比較,下列 YAML 檔案的範例會建立使用系統指派受控身分識別的叢集:
$schema: https://azuremlschemas.azureedge.net/latest/amlCompute.schema.json
name: basic-example
type: amlcompute
size: STANDARD_DS3_v2
min_instances: 0
max_instances: 2
idle_time_before_scale_down: 120
identity:
type: system_assigned
如果你已有計算叢集,可以在使用者管理身份與系統管理身份間切換。 下列範例示範如何變更設定:
使用者指派的受控身分識別
export MSI_NAME=my-cluster-identity
export COMPUTE_NAME=mycluster-msi
does_compute_exist()
{
if [ -z $(az ml compute show -n $COMPUTE_NAME --query name) ]; then
echo false
else
echo true
fi
}
echo "Creating MSI $MSI_NAME"
# Get the resource id of the identity
IDENTITY_ID=$(az identity show --name "$MSI_NAME" --query id -o tsv | tail -n1 | tr -d "[:cntrl:]" || true)
if [[ -z $IDENTITY_ID ]]; then
IDENTITY_ID=$(az identity create -n "$MSI_NAME" --query id -o tsv | tail -n1 | tr -d "[:cntrl:]")
fi
echo "MSI created: $MSI_NAME"
sleep 15 # Let the previous command finish: https://github.com/Azure/azure-cli/issues/8530
echo "Checking if compute $COMPUTE_NAME already exists"
if [ "$(does_compute_exist)" == "true" ]; then
echo "Skipping, compute: $COMPUTE_NAME exists"
else
echo "Provisioning compute: $COMPUTE_NAME"
az ml compute create --name "$COMPUTE_NAME" --type amlcompute --identity-type user_assigned --user-assigned-identities "$IDENTITY_ID"
fi
az ml compute update --name "$COMPUTE_NAME" --identity-type user_assigned --user-assigned-identities "$IDENTITY_ID"
系統指派的受控身分識別
export COMPUTE_NAME=mycluster-sa
does_compute_exist()
{
if [ -z $(az ml compute show -n $COMPUTE_NAME --query name) ]; then
echo false
else
echo true
fi
}
echo "Checking if compute $COMPUTE_NAME already exists"
if [ "$(does_compute_exist)" == "true" ]; then
echo "Skipping, compute: $COMPUTE_NAME exists"
else
echo "Provisioning compute: $COMPUTE_NAME"
az ml compute create --name "$COMPUTE_NAME" --type amlcompute
fi
az ml compute update --name "$COMPUTE_NAME" --identity-type system_assigned
Kubernetes 叢集運算
附註
Azure Machine Learning Kubernetes 叢集只支援 一個系統指派身份 或 一個使用者指派身份,不會同時支援兩者。
預設受控身分識別是系統指派的受控身分識別,或第一個使用者指派的受控身分識別。
在執行過程中,一個身份有兩種應用:
系統會使用身分識別來設定使用者的儲存體掛接、容器登錄和資料存放區。
- 在此情況下,系統會使用預設受控識別。
您要套用身分識別,從提交作業的程式碼中存取資源:
- 以 Kubernetes 叢集計算為例,ManagedIdentityCredential 物件應無需 任何 client_id 即可提供。
例如,若要使用預設受控身分識別來取得資料存放區的權杖:
credential = ManagedIdentityCredential() token = credential.get_token('https://storage.azure.com/')
要配置 Kubernetes 叢集運算,請確保它 已部署必要的 AML 擴充功能 ,並依照文件說明如何 將 Kubernetes 叢集運算連接到你的 AML 工作空間。
重要事項
為了訓練目的 (Machine Learning 作業),請使用指派給 Kubernetes 叢集計算資源的身分識別。 然而,在推論(管理線上端點)時,請使用端點所指派的身份識別。 如需詳細資訊,請參閱 如何從在線端點存取 Azure 資源。
資料儲存體
當你建立使用 基於身份的資料存取的資料庫時,會使用你的 Azure 帳號的 Microsoft Entra 令牌來確認你有權限存取該儲存服務。 在 基於身份的資料存取 情境中,你不會儲存任何認證憑證。 你只會把儲存帳號資訊存進資料庫。
此外,使用認證型驗證快取連線資訊 (例如儲存體帳戶金鑰或 SAS 權杖) 的資料存放區,會在工作區建立關聯的金鑰保存庫中。 此方法的限制是其他擁有足夠權限的工作空間使用者無法取得這些憑證,這對某些組織來說可能是安全疑慮。
如需如何驗證資料存取的詳細資訊,請參閱資料管理文章。 如需設定資料的身分識別型存取資訊,請參閱建立資料存放區。
您可以在兩個情節中,您可以在 Azure Machine Learning 中套用身分識別型資料存取。 當您使用機密資料,而且需要更細微的資料存取管理時,這些情況非常適合身分識別型存取:
- 存取儲存體服務
- 訓練機器學習模型
透過使用基於身份的存取,您可以使用 角色基礎存取控制(RBAC) 來限制哪些身份(如使用者或運算資源)能存取資料。
存取儲存體服務
你可以透過 Azure Machine Learning 資料儲存庫的身份基礎資料存取來連接儲存服務。
當您使用身分識別型資料存取時,Azure Machine Learning 會提示您輸入 Microsoft Entra 權杖以進行資料存取驗證,而不是將認證保留在資料存放區中。 此方法允許在儲存層級進行資料存取管理,並保持憑證機密。
相同的行為適用於您透過本機電腦或計算執行個體的 Jupyter Notebook,以互動方式處理資料時。
附註
透過憑證認證儲存的憑證包括訂閱 ID、共享存取簽章(SAS)令牌、儲存存取金鑰,以及服務主體資訊,如用戶端 ID 和租戶 ID。
為了安全連接 Azure 上的儲存服務,Azure 機器學習需要你擁有存取相應資料儲存的權限。
警告
不支援跨租戶存取儲存帳號。 如果您的情境需要跨租戶存取,請聯繫 Azure 機器學習資料支援團隊 amldatasupport@microsoft.com ,尋求客製化程式碼解決方案的協助。
身分識別型資料存取僅支援下列儲存體服務的連線。
- Azure Blob 儲存體
- Azure Data Lake Storage Gen1
- Azure Data Lake Storage Gen2
若要存取這些儲存體服務,您必須至少具有對於儲存體帳戶的儲存體 Blob 資料讀者存取權。 只有儲存體帳戶擁有者可以透過 Azure 入口網站變更您的存取層級。
使用受控身分識別在計算上存取訓練作業的資料
使用私人資料的特定機器學習案例。 在這種情況下,資料科學家可能無法直接存取 Microsoft Entra 使用者的資料。 在此情境下,使用計算的管理身份進行資料存取驗證。 你只能存取來自計算實例或執行訓練任務的機器學習運算叢集的資料。 透過此方法,管理員會授予運算實例或運算叢集管理身份 Storage Blob Data Reader 對該儲存裝置的權限。 不需要將存取權授與個別資料科學家。
若要啟用以計算受控身分識別進行驗證:
建立啟用受控身分識別的計算。 請參閱計算叢集小節,或若是計算執行個體,請參閱指派受控身分識別小節。
重要事項
如果你設定運算實例為 閒置關機,除非管理身份擁有 Azure Machine Learning 工作空間的 貢獻者 權限,否則該運算實例不會因非活動而關閉。 如需指派權限的詳細資訊,請參閱管理 Azure Machine Learning 工作區的存取權。
在儲存體帳戶上授與計算受控識別至少儲存體 Blob 資料讀者的角色。
建立啟用身分識別型驗證的資料存放區。 請參閱建立資料存放區。
附註
計算實例或叢集所建立的系統管理身份名稱,在你的 Microsoft Entra ID 中的格式為 /workspace-name/computes/compute-name。
啟用基於身份的認證後,預設會使用運算管理身份來存取訓練工作中的資料。 你可以選擇使用使用者身份,依照下一節所述步驟進行認證。
請參見基於角色的存取控制,了解如何設定 Azure RBAC 以用於儲存體。
透過使用者身份取得計算叢集訓練工作的資料
當你 在 Azure Machine Learning 運算叢集訓練時,可以使用你的使用者 Microsoft Entra 憑證來驗證儲存裝置。
此認證模式允許您:
- 設定細緻的權限,讓不同工作區使用者可以存取不同的儲存帳號或儲存帳號內的資料夾。
- 讓資料科學家在儲存體系統上重複使用現有的權限。
- 稽核儲存體存取,因為儲存體記錄會顯示用來存取資料的身分識別。
重要事項
此功能有以下限制:
- 透過 Azure Machine Learning CLI 和 Python SDK V2 提交的實驗支援此功能,但 ML Studio 沒有。
- 你不能在同一個工作中使用使用者身份和計算管理身份來進行認證。
- 對於管線工作,應將使用者身份設定在計算中執行的個別步驟層級,而非根管線層級。 儘管身份設定可在根管線和步驟層級上進行配置,但當兩者皆有設定時,步驟層級的設定將優先生效。 然而,對於包含管線元件的管線,必須在執行的個別步驟上設定身份識別。 根管線或管線元件層級的身份設定無法運作。 因此,為了簡化,將身份設定在個別步驟層級。
若要使用使用者身分識別從 CLI 設定運算叢集上訓練作業的資料存取,請遵循以下步驟:
將儲存體資源的存取授與使用者身分識別。 例如,授與您想要使用的特定儲存體 StorageBlobReader 存取權,或是授與 Azure Data Lake Gen 2 儲存體中特定資料夾或檔案的 ACL 型權限。
建立 Azure Machine Learning 資料存放區,而不需儲存體帳戶的快取認證。 如果資料存放區有快取的認證,例如儲存體帳戶金鑰,則會使用這些認證,而不是使用者身分識別。
提交訓練作業,並且將 identity 屬性設定為 type: user_identity,如下列作業規格中所示。 在訓練作業期間,儲存體的驗證會透過提交作業的使用者身分識別進行。
附註
如果你沒有指定 身份 屬性,且資料庫沒有快取憑證,系統會使用計算管理身份作為備援。
command: | echo "--census-csv: ${{inputs.census_csv}}" python hello-census.py --census-csv ${{inputs.census_csv}} code: src inputs: census_csv: type: uri_file path: azureml://datastores/mydata/paths/census.csv environment: azureml:AzureML-sklearn-1.0-ubuntu20.04-py38-cpu@latest compute: azureml:cpu-cluster identity: type: user_identity
若要透過使用者身份設定資料存取,以訓練 Python SDK 的運算叢集工作,請遵循以下步驟:
依照先前針對 CLI 所描述的授與資料存取權限並建立資料存放位置。
提交訓練作業,並將 identity 參數設定為 azure.ai.ml.UserIdentityConfiguration。 此參數設定可讓作業代表提交作業的使用者存取資料。
from azure.ai.ml import command from azure.ai.ml.entities import Data, UriReference from azure.ai.ml import Input from azure.ai.ml.constants import AssetTypes from azure.ai.ml import UserIdentityConfiguration # Specify the data location my_job_inputs = { "input_data": Input(type=AssetTypes.URI_FILE, path="<path-to-my-data>") } # Define the job job = command( code="<my-local-code-location>", command="python <my-script>.py --input_data ${{inputs.input_data}}", inputs=my_job_inputs, environment="AzureML-sklearn-0.24-ubuntu18.04-py37-cpu:9", compute="<my-compute-cluster-name>", identity= UserIdentityConfiguration() ) # submit the command returned_job = ml_client.jobs.create_or_update(job)
重要事項
當你使用使用者身份驗證來提交工作時,檢查碼驗證可保護程式碼快照以避免篡改。 如果你已有現有的管線元件,且打算透過使用者身份進行驗證,可能需要重新上傳。 否則,工作可能會在校驗碼驗證時失敗。
使用虛擬網路
根據預設,Azure Machine Learning 無法與位於防火牆後方或虛擬網路中的儲存體帳戶進行通訊。
您可以將儲存體帳戶設定為只允許從特定虛擬網路內進行存取。 此設定需要額外的步驟,以確保資料不會在網路之外洩漏。 這種行為與認證型資料存取相同。 如需詳細資訊,請參閱「如何防止資料外流」。
如果您的記憶體帳戶具有虛擬網路設定,這些設定會決定需要哪些身分識別類型和許可權存取權。 例如,對於數據預覽和數據配置檔,虛擬網路設定會決定使用何種類型的身分識別來驗證數據存取。
在只允許特定IP和子網存取記憶體的情況下,Azure Machine Learning 會使用工作區 MSI 來完成數據預覽和配置檔。
如果您的儲存裝置是 ADLS Gen 2 或 Blob,並設有虛擬網路設定,則可以根據創建時定義的資料存儲設定,選擇使用使用者身份或工作區 MSI。
如果虛擬網路設定是 「允許 Azure 服務在受信任服務清單中存取此儲存帳號」,則使用 Workspace MSI。
案例:沒有管理使用者的 Azure Container Registry
停用 ACR 的管理使用者後,Azure Machine Learning 會使用受控身分識別來組建並提取 Docker 映像。 在停用管理使用者的情況下,設定 Azure Machine Learning 使用 ACR 時,有兩個工作流程:
- 允許 Azure Machine Learning 建立 ACR 執行個體,然後停用管理使用者。
- 在已停用管理使用者的情況下,取用現有的 ACR。
具有自動建立 ACR 執行個體的 Azure Machine Learning
建立新的 Azure Machine Learning 工作區。
執行需要 Azure Container Registry 的動作。 例如,請參考 教學:訓練你的第一個模型。
取得叢集建立的 ACR 名稱。
az ml workspace show --name <my workspace name> \ --resource-group <my resource group> \ --subscription <my subscription id> \ --query container_registry此命令會傳回類似下列文字的值。 您只需要文字的最後一部分,也就是 ACR 執行個體名稱:
/subscriptions/<subscription id>/resourceGroups/<my resource group>/providers/MicrosoftContainerReggistry/registries/<ACR instance name>更新 ACR 以停用管理使用者:
az acr update --name <ACR instance name> --admin-enabled false
自備 ACR
如果訂閱政策不允許 ACR 管理員使用者,先建立不含管理員使用者的 ACR,然後將其與工作區關聯。
你可以在 Azure CLI 建立 ACR,但不設定--admin-enabled參數,或從 Azure 入口建立 ACR,但不啟用管理員使用者。 建立 Azure Machine Learning 工作空間時,請指定 ACR 的 Azure 資源 ID。 下列範例會示範如何建立使用現有的 ACR 的新 Azure Machine Learning 工作區:
az ml workspace create -n <workspace name> \
-g <workspace resource group> \
-l <region> \
--container-registry /subscriptions/<subscription id>/resourceGroups/<acr resource group>/providers/Microsoft.ContainerRegistry/registries/<acr name>
秘訣
若要取得 --container-registry 參數的值,請使用 az acr show 命令來顯示 ACR 的資訊。
id 欄位包含 ACR 的資源識別碼。
此外,如果您現有的 ACR 已停用管理使用者,則可以透過更新將 ACR 附加至工作區。 下列範例示範如何更新 Azure Machine Learning 工作區,以使用現有的 ACR:
az ml workspace update --update-dependent-resources \
--name <workspace name> \
--resource-group <workspace resource group> \
--container-registry /subscriptions/<subscription id>/resourceGroups/<acr resource group>/providers/Microsoft.ContainerRegistry/registries/<acr name>
建立具有受控身分識別的計算,以存取 Docker 映像來訓練
若要存取工作區 ACR,請建立機器學習計算叢集並啟用系統指派的受控身分識別。 你可以在建立運算時從 Azure 入口網站或 Studio 啟用該身份,或在 Azure CLI 使用以下指令啟用。 如需詳細資訊,請參閱「對計算叢集使用受控身分識別」。
az ml compute create --name cpu-cluster --type <cluster name> --identity-type systemassigned
受控身分識別會自動在工作區 ACR 上取得 ACRPull 角色,已提取 Docker 映像供訓練使用。
附註
如果你在工作區 ACR 存在之前先建立計算資源,則需要手動指派 ACRPull 角色。
使用 Docker 映像來推斷
如前所述設定 ACR 而不使用管理員使用者後,你可以從 Azure Kubernetes 服務(AKS)存取 Docker 映像檔進行推論,無需管理金鑰。 當你建立或附加 AKS 到 Workspace 時,叢集的服務主體會自動取得 ACRPull 對工作區 ACR 的存取權。
附註
如果您自備 AKS 叢集,叢集必須已啟用服務主體,而不是受控身分識別。
案例:使用私人 Azure Container Registry
Azure Machine Learning 預設使用 Microsoft 管理的公開倉庫中的 Docker 基礎映像檔。 它會根據這些影像建立你的訓練或推論環境。 欲了解更多資訊,請參閱 「什麼是機器學習環境?」
若要在企業內部使用自訂基礎映像,請使用受管理身份來存取你的私人 ACR。
建立已啟用系統指派受控識別的機器學習計算叢集,如先前所述。 然後,決定受控身分識別的主體識別碼。
az ml compute show --name <cluster name> -n <workspace> -g <resource group>您可以選擇更新計算叢集,以指派使用者指派的受控身分識別:
az ml compute update --name <cluster name> --user-assigned-identities <my-identity-id>若要允許計算叢集提取基底映像,請在私人 ACR 上授與受控服務身分識別 (適用於工作區或計算) ACRPull 角色。
az role assignment create --assignee <principal ID> \ --role acrpull \ --scope "/subscriptions/<subscription ID>/resourceGroups/<private ACR resource group>/providers/Microsoft.ContainerRegistry/registries/<private ACR name>"建立環境,並在 環境 YAML 檔案中指定基底映射位置。 下列 YAML 檔案示範如何定義參考私人 ACR 的環境。 將
<acr-url>替換為您的私人 ACR 的 URL,例如myregistry.azurecr.io。 將<image-path>替換為私人 ACR 中映像的路徑,例如pytorch/pytorch:latest:$schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json name: docker-image-example image: <acr-url>/<image-path>:latest description: Environment created from a Docker image.下列命令示範如何從 YAML 檔案建立環境。 將
<yaml file>替換為您的 YAML 檔案路徑。az ml environment create --file <yaml file>您現在可在訓練作業中使用環境。
相關文章
- 了解更多關於 Azure 機器學習中的企業安全知識。
- 了解 資料管理。
- 了解計算叢集上的受控身分識別。