嵌入式分析的安全性最佳实践

借助 Looker 嵌入式分析功能,您可以让用户和客户探索在任何 HTML 格式的网页、门户或应用中嵌入 iframe 的数据。iframe 会执行整个 Looker 应用,仅请求显示查询所需的数据。按照设计,iframe 不允许从您的外部网站或应用读取或写入数据。

嵌入数据有时可能会带来隐私或安全问题。为了缓解这些问题,我们建议 Looker 管理员遵循以下最佳实践:

  • 如果您要将 Looker 内容嵌入客户,请在用于内部分析的实例中设置一个单独的 Looker 实例来设置客户内容。
  • 请仅将嵌入式用户(可能属于公众)可访问的 Looker 嵌入式实例数据连接到该实例。
  • 保护公共嵌入网址中的随机令牌(如用户凭据一样),并停用公共网址(如未使用)。
  • 对于指定的每组权限、用户属性和模型,已分配的 external_user_id 值必须是唯一的。确保您不会在不同的互动会话中为不同的交互式用户使用相同的 external_user_id,并确保您针对具有不同权限、用户属性值或模型访问权限的单个用户使用同一 external_user_id
  • 启用封闭式系统
  • 保护 SSO 嵌入密钥,就像这些是嵌入的 Looker 实例的管理员凭据一样;如果不使用,则停用单点登录嵌入。
  • 为 Looker 嵌入式实例(SSOSAMLGoogle OAuth2FA)使用强大的身份验证功能。

Looker 根据访问数据的用户所需的身份验证级别,提供不同类型的嵌入方法:公开不公开单点登录。通过上述任何方法,您可以使用 JavaScript 与 iframe 进行交互。

公共嵌入

启用 Look for 公开访问选项的情况下,您可以使用 HTML iframe 标记将可视化图表或数据表嵌入到外部网站中。您还可公开共享 Look 网址,或将数据导入 Google 或 Excel 电子表格应用。

iframe 标记中的网址和嵌入网址包含随机令牌,您无法猜测,但使用嵌入网址的所有用户都能访问这些数据,而且不会应用额外的过滤或限制。我们建议您在启用公开网址之前,考虑为给定 Look 创建和共享公开网址会带来安全方面的影响。

公开网址和公开嵌入网址永不过期,且无法撤销。当您共享公开网址时,分享的是查询,而不是实际的数据

私密嵌入

如果您不想允许公众访问您的 Look,还可以在 iframe 中以私密方式嵌入 Look(或者探索信息中心),以便登录 Looker 查看内容。

通过身份验证的用户只能访问由自己分配的 Looker 权限决定的内容。如果您在 Looker 中更改了权限,嵌入网址不会发生更改,但用户可以在访问网址时看到相应网址。

如果用户未经过身份验证,您可以在 iframe 中显示错误或登录屏幕。不过,在 iframe 中启用登录屏幕与 Looker 的同源保护不兼容。

私人嵌入网址永不过期,且无法撤销。不过,由于该链接仅适用于有权访问您的 Looker 实例和数据的用户,因此发送链接不应导致安全问题。

单点登录嵌入

如需更新此功能的许可,请与您的客户经理联系。

单点登录嵌入进一步增强了私有嵌入功能。单点登录嵌入不要求用户通过 Looker 用户帐号进行身份验证。不过,您可以通过 iframe 中的网址通过您自己的应用进行身份验证。身份验证会创建一个新的浏览器会话并向浏览器发出 Cookie。

用户权限、标识符和属性都会作为参数在网址中传递,且使用密钥进行签名。有权访问该密钥的任何人都可以作为任何用户创建网址,以任何用户的身份访问 Looker 实例连接的任何模型。如需了解如何生成签名网址,请参阅我们的示例代码

点击劫持是一种浏览器安全问题,例如嵌入式代码或脚本在用户不知情或未同意的情况下执行了某个功能(例如按钮似乎执行其他操作)。点击劫持通常需要静态网址。为 SSO 嵌入生成的网址是秘密网址,只有查看嵌入的用户才能拥有。使用单点登录嵌入不会增加外部网站的点击劫持风险。

SSO 嵌入参数

iframe 网址中包含的参数可供嵌入用户查看,但无法修改。这些事实可能包括:

  • user_attributes:它们用于进一步过滤数据。user_attributes 功能强大,因此请考虑它们如何应用于您的 Looker 实例。
  • session_length:请尽可能缩短时间。

某些参数(例如 user_attributes)可以在界面中隐藏,但仍会在嵌入网址中进行编码。这可能不可取,例如密码是用户 user_attribute 中的值。解决方法之一是构建一个临时组,将密码设置为组级属性,然后在嵌入网址中传递组 ID。您可以在嵌入会话后删除该群组,以避免过期群组。

网址的签名部分包含时间戳。使用网址登录后,该时间必须与当前时间相差 +/- 5 分钟。您可以在 session_length 中指定嵌入网址在登录网址后可以保留的时长。

管理单点登录嵌入访问权限

为嵌入内容构建网址时,请注意以下事项:

  • 使用最低级别的权限
  • 请仅分配用户有权访问的特定模型的访问权限。
  • 您可以使用 group_ids 将用户分配到群组,并允许嵌入的用户控制其 Looker 文件夹的访问权限。

Looker API

借助 Looker 的 API,您可以通过代理应用或反向代理服务器启用对嵌入式内容的访问。在这种情况下,身份验证是通过 API3 密钥执行的,这些密钥与特定用户相关联,并且与生成该密钥的用户具有相同的权限。API3 密钥由客户端 ID 和客户端密钥组成。

通过 API 管理嵌入访问权限

使用 Looker 的 API 启用对嵌入式内容的访问时,我们建议:

  • 创建具有程序化 API 访问权限的专用服务帐号,并至少授予一组必要的权限。
  • 保护构成 API3 密钥的客户端 ID 和客户端密钥(如果使用 SDK 进行身份验证)。

通过 API 为嵌入式用户设置但未在 SSO 网址中指定的任何用户属性都将在下次访问 SSO 网址时重置为默认值。

嵌入式 JavaScript 事件

设置嵌入 iframe(公开、不公开、通过单点登录或 API 设置)后,您可以通过 JavaScript 与该 iframe 进行交互。要验证您处理的信息是否确实来自 Looker 的 iframe,您可以监听 JavaScript 事件

将网域添加到许可名单时,请使用通配符,仅允许特定子网域访问 JavaScript 事件。

如果使用的是 JavaScript eval 函数,请确保 eval 参数中的字符串值来自可信来源(如 Looker 服务器或 CDN),并且采用 HTTPS 传输。

Looker CDN 绝不会传送任何客户数据。只有 Looker Web 应用静态资源(JavaScript 代码、HTML 网页、CSS 样式)由 CDN 提供。

客户托管的部署

托管您自己的 Looker 实例似乎是一种锁定数据访问安全的方法,尤其是嵌入式内容。不过,如果用户需要通过互联网访问嵌入网址,那么自行托管 Looker 没有任何优势。

在以下情况下,最适合客户托管的部署:

  • 您的用户无需通过互联网访问 Looker。
  • 您是前端 Looker 并通过 API 访问嵌入的内容。