如何使用身分識別型資料存取搭配 SDK v1 連線至儲存體

在本文中,您將瞭解如何透過 適用于 Python 的 Azure Machine Learning SDK連線到 Azure 上的儲存體服務,以及身分識別型資料存取和 Azure Machine Learning 資料存放區。

一般而言,資料存放區會使用認證型驗證,來確認您有權存取儲存體服務。 它們會在與工作區相關聯的金鑰保存庫中保留連線資訊,例如您的訂用帳戶識別碼和權杖授權。 當您建立一個使用身分識別型資料存取的資料存放區時,系統會使用您的 Azure 帳戶 (Azure Active Directory 權杖) 來確認您有權存取儲存體服務。 在身分識別型資料存取案例中,不會儲存任何驗證認證。 只有儲存體帳戶資訊會儲存在資料存放區中。

若要透過 Azure Machine Learning 工作室 UI 建立具有身分識別型資料存取的資料存放區,請參閱使用 Azure Machine Learning 工作室連線資料

若要建立使用認證型驗證 (例如存取金鑰或服務主體) 的資料存放區,請參閱連線至 Azure 上的儲存體服務

Azure Machine Learning 中的身分識別型資料存取

有兩種情況,您可以在 Azure Machine Learning 中套用身分識別型資料存取。 當您使用機密資料,而且需要更細微的資料存取管理時,這些情況非常適合身分識別型存取:

警告

自動化 ML 實驗不支援身分識別型資料存取。

  • 存取儲存體服務
  • 使用私人資料來定型機器學習模型

存取儲存體服務

您可以使用 Azure Machine Learning 資料存放區或 Azure Machine Learning 資料集,透過身分識別型資料存取來連線到儲存體服務。

您的驗證認證會保留在資料存放區中,用來確保您有權存取儲存體服務。 當這些認證透過資料存放區註冊時,具有工作區讀者角色的任何使用者都可以擷取它們。 這種存取規模對某些組織而言可能是一種安全顧慮。 深入了解工作區讀者角色。

當您使用身分識別型資料存取時,Azure Machine Learning 會提示您輸入 Azure Active Directory 權杖進行資料存取驗證,而不是將認證保留在資料存放區中。 這種方法可讓您在儲存層級進行資料存取管理,並讓認證保持機密。

當您執行下列動作時,同樣的行為也適用:

注意

透過認證型驗證儲存的認證包括訂用帳戶識別碼、共用存取簽章 (SAS) 權杖,以及儲存體存取金鑰和服務主體資訊,例如用戶端識別碼和租用戶識別碼。

根據私人資料定型的模型

某些機器學習案例涉及使用私人資料定型模型。 在這類案例中,資料科學家必須在不公開機密輸入資料的情況下執行定型工作流程。 在此案例中,定型計算的受控識別用於進行資料存取驗證。 這種方法可讓儲存體管理員將儲存體 Blob 資料讀取者存取權授與定型計算用來執行定型作業的受控識別。 不需要將存取權授與個別資料科學家。 如需詳細資訊,請參閱在計算叢集上設定受控識別

必要條件

建立和註冊資料存放區

當您將 Azure 上的儲存體服務註冊為資料存放區時,將會自動建立該資料存放區,並將其註冊至特定工作區。 如需必要權限類型的指引,請參閱儲存體存取權限。 您也可以手動建立您想要連線的儲存體,而不需要任何特殊許可權,而且只需要名稱。

如需連線至虛擬網路後方資料儲存體的詳細資料,請參閱使用虛擬網路

在下列程式碼中,請注意,沒有任何驗證參數 (例如 sas_tokenaccount_keysubscription_id) 和服務主體 client_id。 此省略指出 Azure Machine Learning 將使用身分識別型資料存取進行驗證。 建立資料存放區通常會以互動方式在筆記本中或透過工作室進行。 因此,您的 Azure Active Directory 權杖用於資料存取驗證。

注意

資料存放區名稱只由小寫字母、數字和底線組成。

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 資料庫

針對 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 入口網站變更您的存取層級

如果您不想使用使用者身分識別 (Azure Active Directory),您也可以授與工作區受控系統身分識別 (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/')

當您提交的定型作業取用一個使用身分識別型資料存取所建立的資料集時,定型計算的受控識別會用於資料存取驗證。 系統不會使用您的 Azure Active Directory 權杖。 針對此案例,請確定已從儲存體服務將至少一個儲存體 Blob 資料讀取者角色授與計算的受控識別。 如需詳細資訊,請參閱在計算叢集上設定受控識別

後續步驟