跳到主要内容

安全架构

Exportelier 的安全模型建立在刻意拆分为两个应用的基础上,使得处理您问题数据的那个应用根本无法把数据发送到任何地方。

主应用:无 fetch,无 webtrigger

主应用在其 Forge manifest 中不声明任何外部 fetch,也不声明 webtrigger。PDF 完全在 Forge 上渲染,不使用无头浏览器,也不使用第三方服务器。这由 Atlassian 平台强制执行——这是架构保证,而不是政策承诺。

双应用架构示意图 示意图:主应用(无出站流量,在 Forge 上渲染)与 Automation 应用(承载全部出站流量,被隔离)并列。

Automation 应用:隔离的出站流量

所有需要向外发送数据的功能——邮件、Slack 传入 webhook、Microsoft Teams Workflows 和 API——都位于独立的 Exportelier Automation 应用中。它承载全部出站流量,并具备 SSRF 防护和按服务商区分的机密 URL。

报告以执行导出的用户身份读取 Jira

报告执行的每一次 Jira 读取——列出已保存过滤器、 在预检中检查它们、在导出期间搜索它们——都以启动该操作的人的身份运行, 使用 Forge 的 asUser 身份。应用绝不会为了让排队中的导出成功而回退到自身的应用身份。

由此直接得出两个特性:

  • Exportelier 中的站点管理员身份绝不会扩大 Jira 的可见范围。 管理员可以基于 自己能看到的过滤器构建报告;这不会为其他任何人授予对这些过滤器的访问权限。 如果某个数据源对执行导出的用户不可用,导出会失败并指明该数据源的名称, 而不是悄悄省略它。
  • 绝不会存储查询,也绝不会根据您的文本拼接查询。 Exportelier 只保留 已保存过滤器的数字 id,并构建唯一一个严格为数字的谓词 filter = <id>。过滤器的 JQL 绝不会被读取、存储、记录或拼接, 因此不存在 JQL 注入面,也不会留下您查询的过期副本。

报告输出是临时的,下载后即被删除——参见 数据保留与 GDPR

仪表板导入仅使用有文档记录的 API

仪表板导入完全通过 Atlassian 有文档记录的 Jira Cloud 仪表板 REST API 以执行导入的用户身份读取 Jira。它不会解析 Jira 网页、读取小工具 iframe、 截取屏幕截图、使用未公开文档的小工具偏好设置端点,也不会向 Forge 之外发送任何内容。 它不需要新增任何权限范围。

所读取的内容有意保持狭窄。小工具的配置值会依据按小工具划分的允许列表进行校验, 其大小上限远低于 Jira 自身的最大值,并且绝不会被记录、回显到错误信息中或写入审计事件。 过滤器的 JQL 绝不会被存储,即使某个小工具属性恰好包含它——导入生成的报告 保留的仍是与其他所有报告相同的数字过滤器 id。

其中涉及的一项操作 Get gadgets 被 Atlassian 标记为实验性。如果其响应不再与 Exportelier 针对真实 Jira 站点验证过的结果相符,导入路径会安全失败, 该功能会自行禁用,而不是基于误读的响应继续操作。已有的报告和导出不受影响。

审计事件会记录某条导入记录被检查或被删除。它们不包含小工具配置、不包含 JQL,也不包含问题数据。

为什么要拆分

如果您的策略禁止出站流量,您可以只安装主应用,从而获得没有任何内容离开 Atlassian 的硬性保证。需要投递功能的团队则可在知情的前提下加装 Automation 应用。

另请参阅数据驻留采购与供应商安全页面。