Airflow使用GCSToGoogleDriveOperator上传GCS文件至Drive报403权限不足错误
GCS转Google Drive任务403权限不足问题排查
问题场景
使用airflow.providers.google.suite.transfers.gcs_to_gdrive.GCSToGoogleDriveOperator开发GCS到Google Drive的文件上传任务,运行时触发403 Forbidden报错,错误原因为insufficientPermissions,无法定位根因。
任务运行日志
- {gcs_to_gdrive.py:151} INFO - 执行文件复制操作:源路径 gs://adwords_data/conversion_data.csv,目标路径 gdrive://google_adwords/
- {gcs.py:328} INFO - 文件已下载到临时目录 /tmp/tmpzmk4n2z9
- {http.py:126} WARNING - 遇到403 Forbidden错误,原因:insufficientPermissions
任务实现代码
from airflow.providers.google.suite.transfers.gcs_to_gdrive import GCSToGoogleDriveOperator copy_google_adwords_from_gcs_to_google_drive = GCSToGoogleDriveOperator( task_id="copy_google_adwords_from_gcs_to_google_drive", source_bucket="{}".format(gcs_to_gdrive_bucket), source_object="conversion_data.csv", destination_object="adwords_data/", gcp_conn_id='google_cloud_default', dag=dag )
现有配置说明
- 任务绑定的GCP连接ID为
google_cloud_default - 已为该连接添加权限范围:
https://www.googleapis.com/auth/drive
根因排查与修复方案
按优先级逐一排查以下常见问题点:
- 检查Google Drive API启用状态:进入GCP控制台的API与服务页面,确认当前服务账号所属项目已经启用Google Drive API,未启用API时哪怕配置了全量权限范围也会报权限不足。
- 校验权限范围配置有效性:Airflow连接中配置多个权限范围时必须用英文逗号分隔,不能存在多余换行、空格;建议同时补上GCS读取所需的权限范围
https://www.googleapis.com/auth/devstorage.read_only,避免跨服务鉴权异常。如果所在企业域限制第三方应用申请全量Drive权限,可以将全量drive范围替换为https://www.googleapis.com/auth/drive.file(仅授权访问应用创建/指定的文件)做测试。 - 检查Google Drive侧文件夹权限:服务账号是独立的身份主体,仅配置API权限不足以访问个人/团队云盘文件,需要将当前连接使用的服务账号邮箱添加到目标Google Drive文件夹的共享列表中,授予编辑者权限;如果目标文件夹存放在共享盘内,还需要将服务账号添加到共享盘成员列表,授予对应上传权限,部分企业域的共享盘会默认禁止外部服务账号访问,需要联系域管理员添加白名单。
- 校验GCS侧权限:确认服务账号已被授予源存储桶
adwords_data的storage.objects.get权限,避免日志显示临时下载成功但实际鉴权信息异常导致后续上传环节报错。 - 配置变更后强制生效:修改完Airflow连接配置、GCP IAM权限、云盘共享权限后,必须重启Airflow的scheduler和worker进程,Airflow会缓存连接配置,不重启的话新的权限规则不会被运行中的任务加载。
- 连通性前置校验:可以单独编写测试任务,使用同一个GCP连接调用Google Drive Hook提供的文件列表接口,先验证Drive侧连通性正常,再运行完整传输任务,缩小排查范围。
内容的提问来源于stack exchange,提问作者anu
相关产品推荐
相关产品推荐

