服务账号读写Google Sheets所需的精确权限有哪些
Google Sheets 服务账号最小读写权限配置
别给服务账号绑项目级Editor角色,那个角色带全GCP项目的资源操作权限,冗余度极高,按下面两层配置就能满足Node脚本的读写需求,没有多余权限。
1. GCP侧IAM权限配置
你可以自定义角色,只绑定你实际需要的Sheets相关权限,不要用项目级基础角色:
- 仅读写单元格内容(无修改表格结构、格式需求):
sheets.spreadsheets.get:调用Sheets API的基础权限,用于读取表格元数据、工作表列表sheets.spreadsheets.values.get:读取单元格内容sheets.spreadsheets.values.update:修改/写入单元格内容sheets.spreadsheets.values.append:表格末尾追加行(有追加需求再加,不需要可以去掉)
- 如果需要修改表格结构(增删工作表、调整行列、改格式、合并单元格等),额外加
sheets.spreadsheets.batchUpdate权限即可。
嫌自定义角色麻烦的话,可以直接用GCP预定义的Google Sheets API 编辑者角色(角色ID:roles/sheets.editor),这个角色是Sheets服务专属,只包含Sheets API的全量操作权限,没有其他GCP服务的冗余权限,比项目Editor安全很多。
2. 单文件共享配置
GCP侧API权限配完后,打开你要操作的目标Google Sheets文件,点右上角「共享」,把服务账号的邮箱添加为协作者,权限选编辑者即可。这个权限是单文件级的,仅对当前表格生效,不会给服务账号开放其他文件、其他GCP资源的操作权。
Node侧调用注意点
用官方googleapis包做鉴权时,scope只需要配Sheets读写的专属scope即可,不要申请全量Drive权限,示例代码:
const { google } = require('googleapis'); // 初始化鉴权客户端 const auth = new google.auth.GoogleAuth({ keyFile: './你的服务账号密钥路径.json', scopes: ['https://www.googleapis.com/auth/spreadsheets'], // 仅Sheets读写scope }); // 初始化Sheets客户端 const sheetsClient = google.sheets({ version: 'v4', auth });
避坑提示:不要给服务账号分配项目级的
roles/editor基础角色,该角色默认包含计算引擎、存储、数据库等GCP全品类服务的操作权限,一旦密钥泄露风险极高。
内容的提问来源于stack exchange,提问作者Nicholas O'Connell
相关产品推荐
相关产品推荐

