Oauth 2.0 Airflow 2.0 GoogleDriveHook上载文件:身份验证范围不足

Oauth 2.0 Airflow 2.0 GoogleDriveHook上载文件:身份验证范围不足,oauth-2.0,google-drive-api,google-oauth,airflow,Oauth 2.0,Google Drive Api,Google Oauth,Airflow,我正在尝试使用Airflow 2.0GoogleDriveHook将本地文件上载到我的Google Workspace驱动器。我不熟悉OAuth2.0 我采取了以下步骤: 在GCP I中: 在GCP上创建气流驱动项目 已为此项目启用Google Drive API 创建气流驱动服务帐户服务帐户,并将其授予(项目)“所有者”和“服务帐户令牌创建者”角色 为气流驱动服务帐户创建了json密钥 在气流I中: 创建气流连接气流驱动器,并指定json键的路径 编写以下代码以测试上载\u文件方法:

我正在尝试使用Airflow 2.0
GoogleDriveHook
将本地文件上载到我的Google Workspace驱动器。我不熟悉OAuth2.0

我采取了以下步骤:

在GCP I中:
  • 在GCP上创建
    气流驱动
    项目
  • 已为此项目启用Google Drive API
  • 创建
    气流驱动服务帐户
    服务帐户,并将其授予(项目)“所有者”和“服务帐户令牌创建者”角色
  • 为气流驱动服务帐户创建了json密钥
在气流I中:
  • 创建气流连接
    气流驱动器
    ,并指定json键的路径
  • 编写以下代码以测试
    上载\u文件
    方法:
来自afflow.providers.google.suite.hooks.drive导入GoogleDriveHook
hook=GoogleDriveHook(
api_version='v3',
gcp_连接id='airflow-drive',
委托给=无,
模拟链=无
)
hook.upload\u文件(
local_location='some_file.txt',
远程位置='/some_file.txt'
)
这是我在运行脚本时收到的错误:

[2021-01-26 10:01:08,286] {http.py:126} WARNING - Encountered 403 Forbidden with reason "insufficientPermissions"
Traceback (most recent call last):
  File "test_drive_hook.py", line 11, in <module>
    hook.upload_file(
  File "/home/airflow/.local/lib/python3.8/site-packages/airflow/providers/google/suite/hooks/drive.py", line 144, in upload_file
    service.files()  # pylint: disable=no-member
  File "/home/airflow/.local/lib/python3.8/site-packages/googleapiclient/_helpers.py", line 134, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "/home/airflow/.local/lib/python3.8/site-packages/googleapiclient/http.py", line 915, in execute
    raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError: <HttpError 403 when requesting https://www.googleapis.com/upload/drive/v3/files?fields=id&alt=json&uploadType=multipart returned "Insufficient Permission: Request had insufficient authentication scopes.". Details: "Insufficient Permission: Request had insufficient authentication scopes.">


[2021-01-26 10:01:08286]{http.py:126}警告-遇到403禁止,原因是“权限不足”
回溯(最近一次呼叫最后一次):
文件“test_drive_hook.py”,第11行,在
hook.upload\u文件(
文件“/home/afflow/.local/lib/python3.8/site packages/afflow/providers/google/suite/hooks/drive.py”,第144行,在upload_文件中
service.files()#pylint:disable=无成员
文件“/home/afflow/.local/lib/python3.8/site packages/googleapiclient/\u helpers.py”,第134行,位置包装中
已包装退货(*args,**kwargs)
文件“/home/afflow/.local/lib/python3.8/site packages/googleapiclient/http.py”,第915行,在execute中
raise HttpError(resp,content,uri=self.uri)
GoogleAppClient.errors.HttpError:
问题:
  • 我不明白在哪里必须配置身份验证作用域。讨论了如何使用scopes变量定义作用域。但我不确定如何为Airflow/Google Drive API执行此操作
  • 不清楚我是否必须为我的用例使用
    委托给
    和/或
    模拟链
    参数。涉及此主题,但没有澄清我的用例是否需要域范围的委托

  • 好了,问题已经解决了

    以下是解决方案:

    我上面的方法是正确的。我只需要添加
    https://www.googleapis.com/auth/drive
    气流连接中“范围”字段中的范围: