如何使用身分識別型資料存取搭配 SDK v1 連線至儲存體
在本文中,您將瞭解如何透過適用於 Python 的 Azure Machine Learning SDK 使用身分識別型資料存取和 Azure Machine Learning 資料存放區,連線到 Azure 上的儲存體服務。
一般而言,資料存放區會使用認證型驗證,來確認您有權存取儲存體服務。 資料存放區會在與工作區相關聯的金鑰保存庫中保留連線資訊,例如您的訂用帳戶識別碼和權杖授權。 當您建立一個使用身分識別型資料存取的資料存放區時,系統會使用您的 Azure 帳戶 (Microsoft Entra 權杖) 來確認您有權限存取儲存體服務。 在身分識別型資料存取案例中,不會儲存任何驗證認證。 只有儲存體帳戶資訊會儲存在資料存放區中。
若要透過 Azure Machine Learning 工作室 UI 建立具有身分識別型資料存取的資料存放區,請參閱使用 Azure Machine Learning 工作室連線資料。
若要建立使用認證型驗證 (例如存取金鑰或服務主體) 的資料存放區,請參閱連線至 Azure 上的儲存體服務。
Azure Machine Learning 中的身分識別型資料存取
您可以在兩個情節中,您可以在 Azure Machine Learning 中套用身分識別型資料存取。 當您使用機密資料時,這些情節很適合身分識別型存取,而且您需要更細微的資料存取管理:
警告
自動化 ML 實驗不支援身分識別型資料存取。
- 存取儲存體服務
- 使用私人資料來定型機器學習模型
存取儲存體服務
您可以使用 Azure Machine Learning 資料存放區或 Azure Machine Learning 資料集,透過身分識別型資料存取來連線到儲存體服務。
您的驗證認證會保留在資料存放區中,以確保您有權存取儲存體服務。 當這些認證透過資料存放區註冊時,具有工作區讀者角色的任何使用者都可以擷取它們。 這種存取規模對某些組織而言可能是一種安全顧慮。 深入瞭解工作區讀者角色。
當您使用身分識別型資料存取時,Azure Machine Learning 會提示您輸入 Microsoft Entra 權杖以進行資料存取驗證,而不是將認證保留在資料存放區中。 這種方法允許在儲存體層級進行資料存取管理,並維護認證安全性。
當您執行下列動作時,同樣的行為也適用:
- 直接從儲存體 URL 建立資料集。
- 透過本機電腦或計算執行個體上的 Jupyter Notebook,以互動方式處理資料。
注意
透過認證型驗證儲存的認證包括訂用帳戶識別碼、共用存取簽章 (SAS) 權杖,以及儲存體存取金鑰和服務主體資訊,例如用戶端識別碼和租用戶識別碼。
根據私人資料定型的模型
某些機器學習案例涉及使用私人資料定型模型。 在這類案例中,資料科學家必須在不公開機密輸入資料的情況下執行定型工作流程。 在此案例中,定型計算受控識別會驗證資料存取。 這種方法可讓儲存體管理員將儲存體 Blob 資料讀取者存取權授與定型計算用來執行定型作業的受控識別。 不需要將存取權授與個別資料科學家。 如需詳細資訊,請流覽在計算叢集上設定受控識別。
必要條件
Azure 訂用帳戶。 如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶。 試用免費或付費版本的 Azure Machine Learning。
具有所支援儲存體類型的 Azure 儲存體帳戶。 支援這些儲存體類型:
Azure Machine Learning 工作區。
建立和註冊資料存放區
當您將 Azure 上的儲存體服務註冊為資料存放區時,將會自動建立該資料存放區,並將其註冊至特定工作區。 如需必要權限類型的指引,請參閱儲存體存取權限。 您也可以手動建立您想要在沒有任何特殊權限的情況下連線的儲存體,而且只需要名稱。
如需連線至虛擬網路後方資料儲存體的詳細資料,請參閱使用虛擬網路。
在下列程式碼中,請注意,沒有任何驗證參數 (例如 sas_token
、account_key
、subscription_id
) 和服務主體 client_id
。 此省略指出 Azure Machine Learning 會使用身分識別型資料存取進行驗證。 建立資料存放區通常會以互動方式在筆記本中或透過工作室進行。 資料存取驗證會使用您的 Microsoft Entra 權杖。
注意
資料存放區名稱只由小寫字母、數字和底線組成。
Azure Blob 容器
若要將 Azure Blob 容器註冊作為資料存放區,請使用 register_azure_blob_container()
。
下列程式碼會建立 credentialless_blob
資料存放區、將其註冊至 ws
工作區,並將其指派給 blob_datastore
變數。 此資料存放區會存取 my-account-name
儲存體帳戶上的 my_container_name
Blob 容器。
# Create blob datastore without credentials.
blob_datastore = Datastore.register_azure_blob_container(workspace=ws,
datastore_name='credentialless_blob',
container_name='my_container_name',
account_name='my_account_name')
Azure Data Lake Storage Gen1
使用 register_azure_data_lake() 來註冊連線至 Azure Data Lake Storage Gen1 的資料存放區。
下列程式碼會建立 credentialless_adls1
資料存放區、將其註冊至 workspace
工作區,並將其指派給 adls_dstore
變數。 此資料存放區會存取 adls_storage
Azure Data Lake Storage 帳戶。
# Create Azure Data Lake Storage Gen1 datastore without credentials.
adls_dstore = Datastore.register_azure_data_lake(workspace = workspace,
datastore_name='credentialless_adls1',
store_name='adls_storage')
Azure Data Lake Storage Gen2
使用 register_azure_data_lake_gen2() 來註冊連線至 Azure Data Lake Storage Gen2 的資料存放區。
下列程式碼會建立 credentialless_adls2
資料存放區、將其註冊至 ws
工作區,並將其指派給 adls2_dstore
變數。 此資料存放區會存取 myadls2
儲存體帳戶中的檔案系統 tabular
。
# Create Azure Data Lake Storage Gen2 datastore without credentials.
adls2_dstore = Datastore.register_azure_data_lake_gen2(workspace=ws,
datastore_name='credentialless_adls2',
filesystem='tabular',
account_name='myadls2')
Azure SQL Database
針對 azure SQL 資料庫,請使用 register_azure_sql_database() 來註冊連線至 azure SQL 資料庫儲存體的資料存放區。
下列程式碼會建立 credentialless_sqldb
資料存放區並將其註冊至 ws
工作區,然後將其指派給 sqldb_dstore
變數。 資料存放區會存取 myserver
SQL DB 伺服器中的資料庫 mydb
。
# Create a sqldatabase datastore without credentials
sqldb_dstore = Datastore.register_azure_sql_database(workspace=ws,
datastore_name='credentialless_sqldb',
server_name='myserver',
database_name='mydb')
儲存體存取權限
為了確保您安全地連線到 Azure 上的儲存體服務,Azure Machine Learning 要求您必須有權存取對應的資料儲存體。
警告
不支援跨租用戶存取儲存體帳戶。 如果您的案例需要跨租用戶存取權,請連絡 Azure Machine Learning 資料支援小組別名:amldatasupport@microsoft.com,取得自訂程式碼解決方案的協助。
身分識別型資料存取僅支援下列儲存體服務的連線。
- Azure Blob 儲存體
- Azure Data Lake Storage Gen1
- Azure Data Lake Storage Gen2 \(部分機器翻譯\)
- Azure SQL Database
若要存取這些儲存體服務,您必須至少具有對於儲存體帳戶的儲存體 Blob 資料讀取者存取權。 只有儲存體帳戶擁有者可以透過 Azure 入口網站變更您的存取層級。
如果您不想使用使用者身分識別 (Microsoft Entra ID),您也可以授與工作區受控系統身分識別 (MSI) 權限來建立資料存放區。 若要這樣做,您必須擁有儲存體帳戶的擁有者權限,並且必須將 grant_workspace_access= True
參數新增至您的資料註冊方法。
如果您在遠端計算目標上定型模型而且想要存取資料以進行定型,則必須至少將儲存體服務中的「儲存體 Blob 資料讀取者」角色授與計算身分識別。 了解如何在計算叢集上設定受控識別。
使用虛擬網路
根據預設,Azure Machine Learning 無法與位於防火牆後方或虛擬網路中的儲存體帳戶進行通訊。
您可以將儲存體帳戶設定為只允許從特定虛擬網路內進行存取。 此設定需要更多步驟,以確保資料不會在網路外外洩。 這種行為與認證型資料存取相同。 如需詳細資訊,請參閱如何設定虛擬網路案例。
如果您的儲存體帳戶具有虛擬網路設定,則會指定所需的身分識別類型和權限存取權。 例如,針對資料預覽和資料設定檔,虛擬網路設定會決定用來驗證資料存取的身分識別類型。
在只允許特定 IP 和子網路存取儲存體的情況下,Azure Machine Learning 會使用工作區 MSI 來完成資料預覽和設定檔。
如果您的儲存體是 ADLS Gen 2 或 Blob 且具有虛擬網路設定,客戶可以根據建立期間定義的資料存放區設定,使用使用者身分識別或工作區 MSI。
如果虛擬網路設定為「允許受信任服務清單上的 Azure 服務存取此儲存體帳戶」,則會使用工作區 MSI。
使用儲存體中的資料
當您使用 Azure Machine Learning 與儲存體中的資料互動時,建議您使用 Azure Machine Learning 資料集。
重要
自動化 ML 實驗不支援資料集使用身分識別型資料存取。
資料集會將您的資料封裝為延遲評估的可取用物件,以進行機器學習工作 (例如定型)。 此外,使用資料集,您可以從 Azure 儲存體服務 (例如 Azure Blob 儲存體和 Azure Data Lake Storage) 將任何格式的檔案下載或掛接至計算目標。
若要建立資料集,您可以參考資料存放區中也使用身分識別型資料存取的路徑。
- 如果您的基礎儲存體帳戶類型為 Blob 或 ADLS Gen 2,則您的使用者身分識別需要 Blob 讀者角色。
- 如果您的基礎儲存體是ADLS Gen 1,您可以透過儲存體的存取控制清單 (ACL) 來設定權限。
在下列範例中,blob_datastore
已存在並使用身分識別型資料存取。
blob_dataset = Dataset.Tabular.from_delimited_files(blob_datastore,'test.csv')
您也可以略過資料存放區建立,並直接從儲存體 URL 建立資料集。 這種功能目前僅支援 Azure Blob 和 Azure Data Lake Storage Gen1 與 Gen2。 若要根據儲存體 URL 建立,只需要使用者身分識別即能進行驗證。
blob_dset = Dataset.File.from_files('https://myblob.blob.core.windows.net/may/keras-mnist-fashion/')
當您提交使用身分識別型資料存取所建立資料集的定型作業時,定型計算受控識別會用於資料存取驗證。 未使用您的 Microsoft Entra 權杖。 針對此案例,請確定已從儲存體服務將至少一個儲存體 Blob 資料讀取者角色授與計算的受控識別。 如需詳細資訊,請參閱在計算叢集上設定受控識別。