嵌入式分析的安全性最佳做法

借助 Looker 的嵌入式分析功能 Powerer by Looker (PBL),您可以让用户和客户探索任何 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 实例和这些数据的人员有效,因此发送链接应该不会导致安全问题。

单点登录嵌入

要更新使用此功能的许可,请与您的客户经理联系。

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

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

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

SSO 嵌入参数

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

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

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

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

管理 SSO 嵌入访问权限

为嵌入内容构建网址时:

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

Looker API

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

通过 API 管理嵌入访问权限

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

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

当下次访问 SSO 网址时,通过 API 为嵌入用户设置但未在 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 访问嵌入式内容。