使用受控識別驗證來擷取的佇列 Blob
將 Blob 排入佇列以從您自己的記憶體帳戶擷取時,您可以使用受控識別作為共用存取簽章(SAS) 令牌和共用密鑰驗證方法的替代方案。 受控識別是內嵌數據的更安全方式,因為它們不需要您與服務共用客戶 SAS 令牌或共用密鑰。 相反地,受控識別會指派給您的叢集,並授與用來擷取數據的記憶體帳戶讀取許可權。 您可以隨時撤銷這些許可權。
注意
- 此驗證方法僅適用於位於客戶擁有記憶體帳戶中的 Azure Blob 和 Azure Data Lake 檔案。 不適用於使用 Kusto SDK 上傳的本機檔案。
- 僅支援佇列擷取。 不支援使用 SDK API 的內嵌內嵌擷取 Kusto 查詢語言 和直接擷取。
將受控識別指派給您的叢集
請遵循 受控識別概觀 ,將系統或使用者指派的受控識別新增至您的叢集。 如果您的叢集已獲指派所需的受控識別,請使用下列步驟複製其物件識別碼:
使用與包含叢集的 Azure 訂用帳戶相關聯的帳戶登入 Azure 入口網站。
流覽至您的叢集,然後選取 [ 身分識別]。
選取適當的身分識別類型、系統或使用者指派,然後複製必要身分識別的物件標識符。
將許可權授與受控識別
在 Azure 入口網站 中,流覽至包含您要內嵌資料的記憶體帳戶。
選取 [存取控制],然後選取 [+ 新增>角色指派]。
如果您想要使用記憶體帳戶的許可權 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)。 服務會嘗試使用受控識別進行驗證來探索大小。