Azure Data Explorer持续导出至ADLS的AAD令牌生成流程咨询
生成AAD令牌用于Kusto到ADLS持续数据导出
我来帮你梳理完整的AAD令牌生成流程,以及生产化环境下的最佳实践,刚好适配你当前的场景:
先确认你需要的核心参数
你已经注册了AAD应用,现在需要从应用里提取三个关键值:
- 租户ID:也就是AAD目录的ID,在应用的"概述"页面能找到
- 客户端ID:AAD应用的应用ID,同样在"概述"页面
- 客户端密钥:你之前生成的应用密钥,注意要妥善保存,不要明文暴露
生成AAD令牌的两种常用方式
令牌的资源必须指定为https://storage.azure.com/,以下两种方式都可以生成符合要求的令牌,适合生产化自动化:
方式1:使用Azure CLI(推荐,脚本化更方便)
- 首先用服务主体身份登录(自动化脚本里用这个,交互式登录可以跳过这步直接用
az login):az login --service-principal -u <你的客户端ID> -p <你的客户端密钥> --tenant <你的租户ID> - 获取目标资源的访问令牌:
az account get-access-token --resource https://storage.azure.com/ - 从返回的JSON结果里提取
accessToken字段,这个就是你需要的AAD令牌(它本身就是base64编码的JWT格式,直接用就行,不用再额外编码)
方式2:使用PowerShell
- 先创建服务主体凭据并登录:
# 把客户端密钥转换成安全字符串 $clientSecret = ConvertTo-SecureString "<你的客户端密钥>" -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential("<你的客户端ID>", $clientSecret) # 登录Azure Connect-AzAccount -ServicePrincipal -Credential $credential -Tenant <你的租户ID> - 获取访问令牌:
$token = (Get-AzAccessToken -ResourceUrl "https://storage.azure.com/").Token - 变量
$token里的值就是可用的AAD令牌
生产化环境的关键建议
- 不要硬编码密钥:把客户端密钥存到Azure Key Vault里,脚本里从Key Vault读取,比如CLI里用:
PowerShell里用:client_secret=$(az keyvault secret show --name <密钥在KV里的名称> --vault-name <你的KV名称> --query value -o tsv)$clientSecret = Get-AzKeyVaultSecret -VaultName <你的KV名称> -Name <密钥在KV里的名称> -AsPlainText - 定期刷新令牌:AAD令牌默认有效期是1小时,持续导出需要定期更新外部表的连接字符串。可以用Azure Automation Runbook写个定时脚本,生成新令牌后执行以下Kusto命令更新外部表:
.alter external table logs set (storage = 'abfss://filesystem@<storageaccountname>.dfs.core.windows.net/input;token=<新生成的令牌>') - 验证令牌有效性:生成令牌后可以用curl快速验证:
返回200 OK就说明令牌有效curl -H "Authorization: Bearer <你的令牌>" https://<storageaccountname>.dfs.core.windows.net/filesystem?resource=account
替换到你的命令里
把生成的令牌替换掉你命令里的****就行,比如:
.create external table logs (ing_dt:date,record:string) kind=adl partition by bin(ing_dt, 1d) dataformat=json ( h@'abfss://filesystem@<storageaccountname>.dfs.core.windows.net/input;token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6...') with ( docstring = "External Table", folder = "External", nameprefix= "ext" )
内容的提问来源于stack exchange,提问作者ajmore
相关产品推荐
相关产品推荐

