You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Azure Batch输出文件迁移至Data Lake且不上传本地存储密钥

Azure Batch 输出文件迁移至Data Lake的无密钥实现方案

完全不需要将存储密钥作为资源文件上传,也不需要让密钥离开你的本地计算机,通过Batch托管标识+服务原生鉴权能力就能实现,全程不需要手动传递密钥,也支持通过服务内置环境变量完成权限配置,具体操作如下:

  • 前置权限配置(全程本地操作,无密钥传输)
    先在本地给你使用的Batch账户开启系统分配托管标识(也可以用用户分配托管标识),之后到对应存储账户的IAM权限面板,给这个托管标识分配Storage Blob Data Contributor角色,授予它对目标Data Lake容器的读写权限。这一步所有配置操作都在你本地通过Azure门户/CLI/SDK完成,不需要向Batch服务上传任何包含密钥的文件或配置。
  • 方案1:用Batch原生输出文件自动同步,零额外代码
    你在本地通过Python SDK提交Batch任务的时候,直接配置任务的OutputFiles规则即可,Batch服务会自动用之前绑定的托管标识完成存储访问,不需要你提供任何存储密钥。配置时指定目标Data Lake容器地址、需要匹配的输出文件规则、上传触发条件就行,示例配置代码:
    from azure.batch import models as batchmodels
    
    output_config = batchmodels.OutputFile(
        # 匹配任务运行生成的目标输出文件,按实际路径改
        file_pattern="output/**/*",
        destination=batchmodels.OutputFileDestination(
            container=batchmodels.OutputFileBlobContainerDestination(
                container_url="https://<你的存储账户名>.dfs.core.windows.net/<你的Data Lake容器名>",
                # 指定用Batch账户的托管标识鉴权,不需要填密钥
                identity_reference=batchmodels.ComputeNodeIdentityReference(
                    resource_id="/subscriptions/<你的订阅ID>/resourceGroups/<资源组名>/providers/Microsoft.Batch/batchAccounts/<你的Batch账户名>"
                )
            )
        ),
        upload_options=batchmodels.OutputFileUploadOptions(
            # 任务运行完成就自动上传,也可以选任务失败/成功时上传
            upload_condition=batchmodels.OutputFileUploadCondition.task_completion
        )
    )
    
    # 提交任务时把output_config加到任务的output_files参数列表里即可
    
  • 方案2:自定义脚本迁移,通过内置环境变量自动鉴权
    如果你需要在自己运行的Python脚本里自定义迁移逻辑,不需要靠Batch自动上传,也不需要传密钥:Batch计算节点启动后会自动注入托管标识鉴权所需的内置环境变量,你在脚本里直接用Azure Identity的默认凭据链就能自动完成鉴权,不需要手动配置任何带密钥的环境变量。脚本内的鉴权代码示例:
    from azure.storage.filedatalake import DataLakeServiceClient
    from azure.identity import DefaultAzureCredential
    
    # 无需硬编码或传入存储密钥,自动读取节点内置环境变量完成鉴权
    dl_client = DataLakeServiceClient(
        account_url="https://<你的存储账户名>.dfs.core.windows.net",
        credential=DefaultAzureCredential()
    )
    
    # 后续按你的业务逻辑写文件遍历、上传到Data Lake的逻辑即可
    

注意:不要尝试把存储密钥作为自定义环境变量从本地提交到Batch任务,这种方式会让密钥经过Batch控制面流转,不符合密钥不离开本地的要求。上面两种方案全程只传递资源ID、容器地址这类非敏感信息,存储访问权限通过Azure AD后台的托管标识机制完成校验,密钥全程不会流出你的本地计算机,甚至你全程都不需要手动导出存储账户的访问密钥。

内容的提问来源于stack exchange,提问作者Javier Perez Tobia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 20:51:22