共用方式為


使用受控識別驗證來擷取的佇列 Blob

將 Blob 排入佇列以從您自己的記憶體帳戶擷取時,您可以使用受控識別作為共用存取簽章(SAS) 令牌和共用密鑰驗證方法的替代方案 受控識別是內嵌數據的更安全方式,因為它們不需要您與服務共用客戶 SAS 令牌或共用密鑰。 相反地,受控識別會指派給您的叢集,並授與用來擷取數據的記憶體帳戶讀取許可權。 您可以隨時撤銷這些許可權。

注意

  • 此驗證方法僅適用於位於客戶擁有記憶體帳戶中的 Azure Blob 和 Azure Data Lake 檔案。 不適用於使用 Kusto SDK 上傳的本機檔案。
  • 僅支援佇列擷取。 不支援在 Kusto 查詢語言 中使用 SDK API 進行內嵌擷取和直接擷取。

將受控識別指派給您的叢集

請遵循 受控識別概觀 ,將系統或使用者指派的受控識別新增至您的叢集。 如果您的叢集已獲指派所需的受控識別,請使用下列步驟複製其物件識別碼:

  1. 使用與包含叢集的 Azure 訂用帳戶相關聯的帳戶登入 Azure 入口網站

  2. 流覽至您的叢集,然後選取 [ 身分識別]。

  3. 選取適當的身分識別類型、系統或使用者指派,然後複製必要身分識別的物件標識符。

概觀頁面的螢幕快照,其中顯示系統受控識別對象標識碼

將許可權授與受控識別

  1. 在 Azure 入口網站 中,流覽至包含您要內嵌資料的記憶體帳戶。

  2. 選取 [存取控制],然後選取 [+ 新增>角色指派]。

  3. 如果您想要使用記憶體帳戶的許可權 DeleteSourceOnSuccess 來源選項,請授與受控識別記憶體 Blob 資料讀取器或記憶體 Blob 數據參與者

注意

與擁有者參與者 許可權不足,且會導致擷取失敗。

[新增角色指派] 頁面的螢幕快照,其中顯示使用受控識別擷取的系統指派角色

重要

發生網路問題時,Azure 儲存體 可能會傳回Download Forbidden錯誤。 如果您使用私人連結來存取記憶體帳戶,可能會發生此錯誤。 在這種情況下,如果許可權正確,請確認記憶體帳戶的連線能力。

在 Azure 數據總管中設定受控識別原則

若要使用受控識別將數據內嵌至叢集,請允許 NativeIngestion 所選受控識別的使用選項。 原生擷取是指使用 SDK 從外部來源擷取的能力。 如需可用 SDK 的詳細資訊,請參閱 客戶端連結庫

使用受控識別原則可以在目標叢集的叢集或資料庫層級定義。

若要在資料庫層級套用原則,請執行下列命令:

.alter-merge database <database name> policy managed_identity "[ { 'ObjectId' : '<managed_identity_id>', 'AllowedUsages' : 'NativeIngestion' }]"

若要在叢集層級套用原則,請執行下列命令:

.alter-merge cluster policy managed_identity "[ { 'ObjectId' : '<managed_identity_id>', 'AllowedUsages' : 'NativeIngestion' }]"

將取代 <managed_identity_id> 為必要受控識別的物件標識碼。

注意

您必須擁有 All Database Admin 叢集的許可權,才能編輯受控識別原則。

使用 Kusto SDK 來擷取受控識別的佇列 Blob

使用 Kusto SDK 擷取數據時,請附加;managed_identity={objectId}至未經授權的 Blob URI,使用受控識別驗證產生 Blob URI。 如果您使用叢集系統指派的受控識別來內嵌數據,您可以附加 ;managed_identity=system 至 Blob URI。

重要

您必須使用佇列擷取用戶端。 不支援在 Kusto 查詢語言 中使用具有直接擷取或內嵌擷取的受控識別。

以下是系統與使用者指派受控識別的 Blob URI 範例。

  • 系統指派: https://demosa.blob.core.windows.net/test/export.csv;managed_identity=system
  • 使用者指派: https://demosa.blob.core.windows.net/test/export.csv;managed_identity=6a5820b9-fdf6-4cc4-81b9-b416b444fd6d

重要

  • 使用受控識別來內嵌 C# SDK 的數據時,您必須在 中 StorageSourceOptions提供 Blob 大小。 如果未設定大小,SDK 會嘗試藉由存取記憶體帳戶來填入 Blob 大小,而導致失敗。
  • size 參數應該是未經處理的(未壓縮)數據大小,而不是 Blob 大小。
  • 如果您在擷取時不知道大小,請指定值為零 (0)。 服務會嘗試使用受控識別進行驗證來探索大小。