如何在Delta Live Table中配置访问Google Cloud Storage(GCS)
Delta Live Table 访问GCS存储桶的权限配置问题
问题描述
正在开展Delta Live Table(DLT)结合GCS存储的POC项目,遇到以下问题:
- 普通Databricks集群可通过
Advanced Options配置服务账号邮箱访问GCS,但DLT集群由系统自动创建,无法直接配置该账号,如何实现GCS存储桶的访问授权? - 尝试手动编辑DLT集群,在Google服务账号区块添加账号时保存失败,报错:
Error : Dlt prefixed spark images cannot be used outside of Delta live tables service - 将GCS路径设为DLT的
storage位置时,触发403权限错误,核心日志如下:DataPlaneException: Failed to start the DLT service on cluster <cluster_id>. Please check the stack trace below or driver logs for more details. com.databricks.pipelines.execution.service.EventLogInitializationException: Failed to initialize event log java.io.IOException: Error accessing gs://<path> shaded.databricks.com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden GET https://storage.googleapis.com/storage/v1/b/<path>?fields=bucket,name,timeCreated,updated,generation,metageneration,size,contentType,contentEncoding,md5Hash,crc32c,metadata { "code" : 403, "errors" : [ { "domain" : "global", "message" : "Caller does not have storage.objects.get access to the Google Cloud Storage object. Permission 'storage.objects.get' denied on resource (or it may not exist).", "reason" : "forbidden" } ], "message" : "Caller does not have storage.objects.get access to the Google Cloud Storage object. Permission 'storage.objects.get' denied on resource (or it may not exist)." }
解决方案
1. 利用工作区级GCS集成配置
DLT集群默认继承Databricks工作区的云存储配置,无需单独设置集群级账号:
- 确认工作区绑定的Google服务账号已获得GCS存储桶的必要权限:
- 在Google Cloud控制台,给该服务账号添加
Storage Object Admin(或更细粒度的权限集合,至少包含storage.objects.get、storage.objects.create、storage.objects.list) - 检查存储桶的IAM权限政策,确保服务账号的权限已生效
- 在Google Cloud控制台,给该服务账号添加
- 工作区已完成GCS基础集成,DLT会自动使用该服务账号访问GCS
2. 为单个DLT管道指定独立服务账号
若需为特定管道使用独立服务账号,可通过管道的高级配置参数设置:
- 打开DLT管道的配置页面,进入
Advanced选项 - 添加Spark配置参数:
spark.databricks.delta.live.service.account.email=<你的服务账号邮箱> - 确保该独立服务账号已被授予目标GCS存储桶的对应权限
3. 手动编辑DLT集群报错的原因说明
DLT是托管式服务,集群由Databricks系统自动管理,不支持手动编辑集群配置(包括修改服务账号)。手动编辑会触发镜像兼容性错误,因此必须通过工作区配置或管道参数来设置权限,禁止直接修改DLT集群。
4. 403权限错误排查要点
若仍出现权限错误,可按以下步骤排查:
- 确认使用的服务账号(工作区级或管道指定的)确实拥有目标GCS存储桶的
storage.objects.get、storage.objects.list、storage.objects.create权限 - 检查GCS路径是否正确,避免拼写错误
- 验证服务账号的身份有效性(工作区绑定的账号无需手动管理密钥,若使用自定义密钥需确保密钥未过期)
内容的提问来源于stack exchange,提问作者shrutis23
相关产品推荐
相关产品推荐

