You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何为Google Cloud Function以服务账号身份认证调用Google API?

在Google Cloud Function云端以服务账号身份认证Google Sheets API

好问题!在GCP上运行Cloud Function时,完全不需要像本地那样手动管理服务账号密钥文件——平台已经内置了更安全、更省心的认证机制,下面分两种常用场景给你讲清楚:

一、使用默认服务账号(最推荐)

这是GCP官方推荐的方式,安全又不用额外配置:

  • 步骤1:获取默认服务账号邮箱
    Cloud Function默认会使用项目的App Engine默认服务账号,格式是 你的项目ID@appspot.gserviceaccount.com。你可以在GCP控制台的「IAM与管理 > 服务账号」页面找到它。
  • 步骤2:给默认账号授权Sheet访问权限
    打开你的目标Google Sheet,点击右上角「共享」,把上面的默认服务账号邮箱添加进去,权限设置为「编辑」(根据你的需求调整级别)。
  • 步骤3:简化代码,移除本地认证逻辑
    本地开发时你可能写了指定keyFilename的代码,但云端完全不需要。googleapis库会自动检测GCP运行环境的内置凭据,代码可以简化成这样:
    const { google } = require('googleapis');
    const sheets = google.sheets({ version: 'v4' });
    
    // 云端自动加载默认服务账号凭据,只需指定所需权限范围
    const auth = new google.auth.GoogleAuth({
      scopes: ['https://www.googleapis.com/auth/spreadsheets'],
    });
    
    // 后续的写入逻辑和本地一致即可
    async function writeToSheet() {
      const client = await auth.getClient();
      const res = await sheets.spreadsheets.values.update({
        auth: client,
        spreadsheetId: '你的表格ID',
        range: 'Sheet1!A1',
        valueInputOption: 'RAW',
        resource: { values: [['云端写入测试']] },
      });
    }
    

二、使用自定义服务账号(细粒度权限控制)

如果你的场景需要更严格的权限隔离,可以创建自定义服务账号:

  • 步骤1:创建自定义服务账号
    在GCP控制台「IAM与管理 > 服务账号」页面,点击「创建服务账号」,给它起个名字(比如sheets-writer),并授予必要的权限(比如Google Sheets API > 编辑者,或者更宽泛的编辑器权限)。
  • 步骤2:授权Sheet访问权限
    和上面一样,把自定义服务账号的邮箱添加到目标Sheet的共享列表里。
  • 步骤3:部署函数时指定自定义账号
    可以用gcloud命令行部署:
    gcloud functions deploy 你的函数名 \
      --runtime nodejs20 \
      --trigger-http \
      --service-account 自定义账号邮箱@你的项目ID.iam.gserviceaccount.com
    
    或者在GCP控制台部署时,找到「运行时服务账号」选项,选择你创建的自定义账号。
  • 步骤4:代码无需修改
    同样不需要指定密钥文件,google.auth.GoogleAuth()会自动加载当前服务账号的凭据。

重要注意事项

  • 绝对不要把本地的dev-key.json上传到云端或者代码仓库,这会带来严重的安全风险!云端完全不需要密钥文件。
  • 确保你的GCP项目已经启用了Google Sheets API:在控制台「API与服务 > 已启用的API」里搜索并启用它,否则函数会报错权限不足。

内容的提问来源于stack exchange,提问作者natevw

火山引擎 最新活动