我有一个任务使用GCSToGoogleSheetsOperator在气流中,在那里我试图添加数据到一个表。
我已将服务凭据电子邮件添加到要以编辑器权限编辑的工作表中,并收到以下错误:
googleapiclient.errors.HttpError:
<HttpError 403 when requesting
https://sheets.googleapis.com/v4/spreadsheets/<SHEET_ID>/values/Sheet1?valueInputOption=RAW&includeValuesInResponse=false&responseValueRenderOption=FORMATTED_VALUE&responseDateTimeRenderOption=SERIAL_NUMBER&alt=json
returned "Request had insufficient authentication scopes.".
Details: "[{
'@type': 'type.googleapis.com/google.rpc.ErrorInfo',
'reason': 'ACCESS_TOKEN_SCOPE_INSUFFICIENT',
'domain': 'googleapis.com',
'metadata': {
'service': 'sheets.googleapis.com',
'method': 'google.apps.sheets.v4.SpreadsheetsService.UpdateValues'}
}]>我不能更新工作表,但是GCS和BigQuery操作符可以正常工作。
我的连接配置如下所示:
AIRFLOW_CONN_GOOGLE_CLOUD=google-cloud-platform://?extra__google_cloud_platform__key_path=%2Fopt%2Fairflow%2Fcredentials%2Fgoogle_credential.json我试着按照使用说明添加作用域 https://www.googleapis.com/auth/spreadsheets。
哪个URL编码如下:
AIRFLOW_CONN_GOOGLE_CLOUD=google-cloud-platform://?extra__google_cloud_platform__key_path=%2Fopt%2Fairflow%2Fcredentials%2Fgoogle_credential.json&extra__google_cloud_platform__scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fspreadsheets现在,以前计算错误的操作符如下所示:
google.api_core.exceptions.Forbidden: 403 POST https://bigquery.googleapis.com/bigquery/v2/projects/my-project/jobs?prettyPrint=false: Request had insufficient authentication scopes.GCSToGoogleSheetsOperator操作符仍然出现如下错误:
google.api_core.exceptions.Forbidden: 403 GET https://storage.googleapis.com/download/storage/v1/b/my-bucket/o/folder%2Fobject.csv?alt=media: Insufficient Permission: ('Request failed with status code', 403, 'Expected one of', <HTTPStatus.OK: 200>, <HTTPStatus.PARTIAL_CONTENT: 206>)如何正确设置权限以同时使用BigQuery、GCS和Sheet运算符?
发布于 2022-05-19 19:42:25
添加一个作用域似乎忽略了IAM角色,所以它要么是一个角色,要么是另一个角色。
服务帐户具有访问GCS和BigQuery所需的角色,但是通过添加作用域https://www.googleapis.com/auth/spreadsheets,服务将忽略角色授予的特权,而只查看作用域指定的权限。
因此,要恢复它,必须同时添加spreadsheet和cloud-platform作用域(或更严格的作用域)。cloud-platform将提供GCS、BigQuery和spreadsheets对Google的访问。
如果使用环境变量设置连接,则必须对参数进行URL编码,因此要创建GOOGLE_CLOUD连接,必须执行以下操作,这是没有编码的.
AIRFLOW_CONN_GOOGLE_CLOUD=google-cloud-platform://?extra__google_cloud_platform__key_path=/abs/path_to_file/credential.json&extra__google_cloud_platform__scope=https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/spreadsheets要对您必须使用的版本进行编码,请替换/、,和:
AIRFLOW_CONN_GOOGLE_CLOUD=google-cloud-platform://?extra__google_cloud_platform__key_path=%2Fabs%2Fpath_to_file%2Fcredentials%2Fgoshare-driver-c08e0904285b.json&extra__google_cloud_platform__scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform%2Chttps%3A%2F%2Fwww.googleapis.com%2Fauth%2Fspreadsheetshttps://stackoverflow.com/questions/72296888
复制相似问题