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

如何在Google Apps Script中安全使用敏感凭证?

Google Apps Script 敏感凭证存储规范及认知误区说明

通用存储规范

针对外部API密钥、数据库密码、鉴权令牌等敏感凭证,统一遵循以下规则:

  • 优先使用Properties Service(属性服务)存储,禁止直接在代码中写入明文凭证
  • 根据使用范围选择对应存储分类,严格遵循最小权限原则:
    • 仅允许脚本所属个人使用的凭证,存储到UserProperties
    • 所有访问该脚本的用户共用的凭证,存储到ScriptProperties
    • 仅当前绑定的文档/表格专属的凭证,存储到DocumentProperties
  • 首次写入凭证时,建议通过单次执行的临时代码写入后删除对应代码段,或通过自定义输入框提交凭证,避免配置阶段明文残留在脚本中
  • 导出/共享脚本代码时,无需额外手动删除敏感信息,属性服务存储的内容不会随代码一同导出

「属性服务和硬编码没有区别」的认知错在哪里?

你产生该误解的核心原因是混淆了「脚本代码存储区」和「独立加密存储区」的本质差异,两者的安全等级完全不同:

  • 硬编码的凭证是明文写在.gs脚本文件中的,所有拥有脚本编辑权限的用户打开代码就能直接看到完整凭证;如果后续你共享脚本协编辑、上传代码到代码仓库、导出代码备份,凭证都会同步泄露
  • 属性服务是和脚本代码完全隔离的Google官方加密存储区:
    • 即便是拥有脚本编辑权限的用户,也无法直接查看属性存储的内容,只有主动调用getProperty()方法打印才会暴露,你可以通过权限管控禁止无关人员执行调试类代码
    • 导出脚本代码、复制绑定的表格/文档文件时,属性服务中的内容不会被同步导出/复制,从根源上避免了代码流转过程中的凭证泄露
    • 存储的内容默认做静态加密,防护等级远高于明文写在代码里的信息

正确使用示例

首次写入凭证(执行后删除该段代码)

function setSecretOnce() {
  const scriptProps = PropertiesService.getScriptProperties();
  // 写入你的实际API密钥,执行完这段代码后直接删除该函数即可
  scriptProps.setProperty('EXTERNAL_API_KEY', '你实际的接口密钥');
}

业务逻辑中调用凭证

function requestApiData() {
  const scriptProps = PropertiesService.getScriptProperties();
  const apiKey = scriptProps.getProperty('EXTERNAL_API_KEY');
  // 后续发起请求的逻辑,全程不会在代码中出现明文密钥
  const res = UrlFetchApp.fetch(`https://api.example.com/getInfo?key=${apiKey}`);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:15:03