使用 LDAP 进行身份验证和访问控制
了解如何使用 LDAP 验证用户并管理他们对数据的访问权限。
身份验证和访问控制对于确保正确的人员能够访问他们所需的数据,并且只有正确的人员拥有该访问权限至关重要。本教程将向您展示如何将 Metabase 连接到 LDAP 服务器进行身份验证,以及如何使用该 LDAP 服务器的组信息来控制谁可以在 Metabase 中查看表。我们不会尝试教授 LDAP 本身,但我们只假设您了解一些基本概念。
设置 LDAP
Metabase 附带的示例数据库有四张表。People
表包含个人身份信息 (PII),因此我们只希望人力资源部门的人员能够看到它。由于我们公司已经使用 LDAP 进行单点登录 (SSO),我们希望从 LDAP 获取哪些人属于(或不属于)人力资源部门的信息。我们已经在 LDAP 中为公司创建了记录
dn: dc=metabase,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: Metabase
我们还有 Farrah(人力资源部门)和 Rasmus(非人力资源部门)的记录
dn: uid=farrah,dc=metabase,dc=com
objectClass: person
objectClass: inetOrgPerson
cn: Farrah Zubin
mail: farrah@example.metabase.com
givenName: Farrah
sn: Zubin
uid: farrah
userPassword: ------
dn: uid=rasmus,dc=metabase,dc=com
objectClass: person
objectClass: inetOrgPerson
cn: Rasmus Verdorff
mail: rasmus@example.metabase.com
givenName: Rasmus
sn: Verdorff
uid: rasmus
userPassword: ------
Farrah 和 Rasmus 的记录没有指明他们属于哪个组。相反,我们需要为我们的用户组提供单独的 Groups
记录,并在其下方提供一个 groupOfNames
记录,指明 Farrah 和另一位名为 Luis 的员工属于 Human Resources
组。
dn: ou=Groups,dc=metabase,dc=com
objectClass: top
objectClass: organizationalUnit
ou: Groups
dn: cn=Human Resources,ou=Groups,dc=metabase,dc=com
objectClass: top
objectClass: groupOfNames
description: Human Resources
member: uid=farrah,dc=metabase,dc=com
member: uid=luis,dc=metabase,dc=com
如果您正在使用 OpenLDAP 并从头开始设置,您可能需要修改
slapd.conf
配置文件,以包含cosine.schema
和inetorgperson.schema
模式文件以及core.schema
,以便此功能正常工作。
连接到 LDAP
一旦 LDAP 拥有正确的记录,我们就可以使用具有管理员权限的帐户登录 Metabase。我们需要做四件事:
创建组
首先,我们点击导航侧边栏底部的齿轮图标,选择管理设置 > 人员 > 组,然后选择创建组。我们将组命名为“人力资源”,但我们不会在这里向 Metabase 添加任何人员:我们将依靠 LDAP 来管理成员资格。
身份验证
下一步是告知 Metabase 可以通过 LDAP 验证人员身份。为此,我们点击身份验证,启用 LDAP,然后填写设置以告知 Metabase 服务器的位置。我们正在使用端口 389 上的本地实例,并且我们希望 Metabase 使用“Manager”帐户访问 LDAP。我们所有的人员都在 metabase.com
下,我们可以使用默认搜索过滤器(通过 ID 或电子邮件地址查找人员)找到他们。
此时,人们可以通过 LDAP 登录。为了测试,我们可以打开一个匿名浏览器窗口,以 Rasmus 或 Farrah 的身份登录。他们都还看不到 People
表,因为我们还没有告知 Metabase 从 LDAP 获取组信息。
权限
接下来,我们前往管理设置 > 权限 > 数据,并禁用 People
表的通用访问权限,以便默认情况下人员无法看到该表。然后我们授予 Human Resources
组访问权限。(这篇关于沙盒的文章提供了更多关于在 Metabase 中管理表访问的信息。)
组管理
让我们回到管理设置中的 LDAP 配置页面。在底部,我们告知 Metabase 同步 LDAP 中的组信息,并且它可以在 metabase.com
域下找到组。
最后一步是告知 Metabase 它的组和 LDAP 的组之间是如何关联的。如果我们点击编辑映射和创建映射,我们可以填写识别 LDAP 中组的专有名称——在本例中,是之前创建的人力资源组的 DN。然后我们点击添加,选择 LDAP 组对应的 Metabase 组,并保存更改。
设置了很多内容。为了测试,让我们打开一个匿名窗口,以 Rasmus 的身份登录。果然,Rasmus 仍然无法看到 People
表,因为他不是人力资源组的成员。但是,如果关闭该窗口,打开另一个窗口,并以 Farrah 的身份登录,我们可以看到 People
表。如果回到管理员窗口查看 People
,我们可以看到图标,显示哪些帐户来自 LDAP,而不是由 Metabase 管理。