暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

用于 MongoDB 和 LDAP 的 Percona 运算符:它有多难?

原创 谭磊Terry 恩墨学院 2022-07-29
511

作为 Percona 云团队的一员,我在 Kubernetes 中运行了很多数据库,尤其是我们的Percona Operator for MongoDB。我们大多数人都对相当小而整洁的基础设施感到满意,这些基础设施易于控制和操作。然而,组织的自然增长带来了许多需要解决的挑战,尤其是在访问管理方面。我们都经历过——每个新帐户都需要针对特定​​平台的努力,这会增加您的基础架构支持的运营成本。这种负担可以通过基于 LDAP 的软件(如 OpenLDAP、Microsoft Active Directory 等)作为身份验证/授权过程的真实来源来解决。让我们深入了解Percona Distribution for MongoDB的详细信息由 Kubernetes 操作员管理的可以连接到 LDAP 服务器。

环境

我们的场景基于 OpenLDAP 服务器和 Percona Distribution for MongoDB 以及相应的 Kubernetes Operator 的集成。我们将保持设置尽可能简单,因此此处不会列出复杂的域关系。

开放式LDAP

在 OpenLDAP 端,可以使用以下设置:

0-percona-ous.ldif: |-
   dn: ou=perconadba,dc=ldap,dc=local
   objectClass: organizationalUnit
   ou: perconadba
 1-percona-users.ldif: |-
   dn: uid=percona,ou=perconadba,dc=ldap,dc=local
   objectClass: top
   objectClass: account
   objectClass: posixAccount
   objectClass: shadowAccount
   cn: percona
   uid: percona
   uidNumber: 1100
   gidNumber: 100
   homeDirectory: /home/percona
   loginShell: /bin/bash
   gecos: percona
   userPassword: {crypt}x
   shadowLastChange: -1
   shadowMax: -1
   shadowWarning: -1
复制

此外,应该为数据库发布的用户查找创建一个只读用户。

如果一切都正确完成,以下命令应该可以工作

$ ldappasswd -s percona -D "cn=admin,dc=ldap,dc=local" -w password -x "uid=percona,ou=perconadba,dc=ldap,dc=local"
复制

数据库

Percona Operator for MongoDB 将在 Kubernetes 内完成所有工作。您可以使用系统要求中的任何支持的平台。

为了让 MongoDB 与 OpenLDAP 连接,我们需要同时配置:

  • mongodb
  • 内部 mongodb 角色
    至于 mongod,您可以使用以下配置片段:
security:
  authorization: "enabled"
  ldap:
    authz:
      queryTemplate: 'ou=perconadba,dc=ldap,dc=local??sub?(&(objectClass=group)(uid={USER}))'
    servers: "openldap"
    transportSecurity: none
    bind:
      queryUser: "cn=readonly,dc=ldap,dc=local"
      queryPassword: "password"
    userToDNMapping:
      '[
          {
            match : "(.+)",
            ldapQuery: "OU=perconadba,DC=ldap,DC=local??sub?(uid={0})"
          }
    ]'
setParameter:
  authenticationMechanisms: 'PLAIN,SCRAM-SHA-1'
复制

不过,该片段的内部结构是另一篇博文的主题。基本上,我们为 mongod 提供了 ldap 特定的参数,例如 ldap 服务器的域名(“服务器”)、显式查找用户、域规则等。

将代码片段放在本地机器上,并从Install Percona server for MongoDB on Kubernetes创建以 MongoDB 集群名称命名的 Kubernetes 机密对象。

$ kubectl create secret generic cluster1-rs0-mongod --from-file=mongod.conf=<path-to-mongod-ldap-configuration>
复制

Percona Operator for MongoDB 能够通过这些 Kubernetes 对象的自定义配置:自定义资源、ConfigMap、Secret。由于我们要使用一些安全敏感信息,因此我们选择了 Kubernetes Secret。

下一步是启动 MongoDB 集群,如Install Percona Server for MongoDB on Kubernetes 中所述。

成功完成文档中的步骤后,我们将继续在 MongoDB 中设置 LDAP 用户的角色。让我们以管理员身份登录 MongoDB 并执行:

var admin = db.getSiblingDB("admin")
admin.createRole(
  {
    role: "ou=perconadba,dc=ldap,dc=local",
    privileges: [],
    roles: [ "userAdminAnyDatabase" ]
  }
)
复制

现在我们在 OpenLDAP 中创建的percona用户能够以管理员身份登录 MongoDB。请将 替换为有效的副本集域名。

$ mongo --username percona --password 'percona' --authenticationMechanism 'PLAIN' --authenticationDatabase '$external' --host <mongodb-rs-endpoint> --port 27017
复制

限制

Percona Operator for MongoDB 在撰写本文时仅支持 mongodb 和 LDAP 服务器之间的未加密传输。我们将尽最大努力在未来带来这样的功能,同时在安全宽松的场景中随意使用它。

结论

这篇博客文章仅描述了多种可能组合中的一种可能情况。它相当简单,不会带来 TLS 安全传输设置、目录设计等讨论主题。我们鼓励您尝试为概念证明、开发环境设置等描述的 MongoDB LDAP 集成,其中安全问题不那么苛刻. 不要犹豫,通过复杂的目录结构、用户权限方案等来增加复杂性。如果您发现自己的配置有趣且值得与社区分享,请访问我们的Percona 社区论坛。 我们很乐意检查您的结果。

使用Percona Operator for MongoDB玩得开心!

原文标题:Percona Operator for MongoDB and LDAP: How Hard Can it Be?
原文作者:Ivan Pylypenko
原文地址:https://www.percona.com/blog/percona-operator-for-mongodb-and-ldap-how-hard-can-it-be/

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论