You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何防止Google Sheet编辑权限用户访问脚本属性以保护API密钥?

避免Google Sheet共享用户获取API密钥的最佳实践

核心思路:隔离敏感逻辑与用户可访问的脚本

把调用API和存储密钥的逻辑从用户能直接查看的Sheet绑定脚本中剥离,放到用户无权限访问的后端服务中,用户端只负责触发请求,不接触密钥。

1. 使用Google Apps Script Web Apps作为中间代理

  • 将API调用逻辑封装到独立的Google Apps Script项目中,把x-api-key存储在该项目的脚本属性里。
  • 将这个脚本部署为Web App,设置执行权限为“我自己”,访问权限可按需设为“任何人,甚至匿名”或限制到特定域。
  • 原Sheet中的按钮脚本仅需发送HTTP请求到Web App端点,传递产品ID即可,无需处理密钥。

示例代码:

  • Web App端脚本:
function doPost(e) {
  const productId = e.parameter.productId;
  const apiKey = PropertiesService.getScriptProperties().getProperty('X_API_KEY');
  const apiUrl = '你的API地址';
  
  const response = UrlFetchApp.fetch(apiUrl, {
    method: 'GET',
    headers: {
      'x-api-key': apiKey
    },
    params: { id: productId }
  });
  
  return ContentService.createTextOutput(response.getContentText()).setMimeType(ContentService.MimeType.JSON);
}
  • Sheet端按钮脚本:
function fetchProductSpec() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const productId = sheet.getActiveCell().getValue();
  const webAppUrl = '你的Web App部署地址';
  
  const response = UrlFetchApp.fetch(webAppUrl, {
    method: 'POST',
    payload: { productId: productId }
  });
  
  const spec = JSON.parse(response.getContentText());
  // 将规格写入当前单元格右侧
  sheet.getRange(sheet.getActiveCell().getRow(), sheet.getActiveCell().getColumn() + 1).setValue(spec);
}

2. 借助GCP Cloud Functions + Secret Manager

  • 在GCP中创建Cloud Function,编写API调用逻辑,将x-api-key存储在GCP Secret Manager中,通过服务账号权限读取密钥。
  • 配置Cloud Function的触发方式为HTTP,并设置访问权限(比如仅允许特定用户或Google服务调用)。
  • Sheet中的按钮脚本直接调用Cloud Function的HTTP端点传递产品ID,用户全程无法接触到密钥。

3. 限制脚本的访问范围与权限

  • 将包含敏感逻辑的脚本设置为仅自己可编辑,通过Google Workspace授权机制,让Sheet按钮脚本以你的身份执行(用户首次使用需授权,但授权后看不到敏感脚本内容)。这种方式虽无法完全杜绝权限审查风险,但比直接暴露脚本属性安全得多。

额外补充:API端增强防护

即使密钥意外泄露,也可通过API端配置降低风险:

  • 限制API密钥的调用来源,仅允许Web App或Cloud Function的IP/域名访问。
  • 设置API调用频率限制,防止恶意滥用。
  • 为API密钥绑定最小权限,仅允许获取产品规格的操作,避免其他敏感接口被访问。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 14:35:11