在本页面
在分片群集上实施访问控制需要配置:
对于本教程,分片群集的每个成员必须使用相同的内部身份验证机制和设置。这意味着在每个实施内部验证mongos
和mongod
在群集中。
以下教程使用密钥文件来启用内部身份验证。
强制执行内部身份验证也会强制执行用户访问控制。要连接到副本集,mongo
外壳程序之类的客户端需要使用用户帐户。请参阅
访问控制。
如果您使用Cloud Manager或Ops Manager来管理您的部署,请参阅相应的Cloud Manager手册 或Ops Manager手册以强制进行身份验证。
小费
如果可能,请使用逻辑DNS主机名而不是IP地址,尤其是在配置副本集成员或分片群集成员时。逻辑DNS主机名的使用避免了由于IP地址更改而导致的配置更改。
在版本3.6中更改。
从MongoDB 3.6,MongoDB二进制文件mongod
和开始
mongos
,localhost
默认情况下绑定到。从MongoDB 2.6到3.4版本localhost
,默认情况下仅绑定来自正式MongoDB RPM(Red Hat,CentOS,Fedora Linux和衍生产品)和DEB(Debian,Ubuntu和衍生产品)的二进制文件
。要了解有关此更改的更多信息,请参阅
Localhost绑定兼容性更改。
本教程仅介绍在admin
数据库上创建最少数量的管理用户。对于用户身份验证,本教程使用默认的SCRAM
身份验证机制。质询响应安全机制最适合测试或开发环境。对于生产环境,我们建议使用x.509证书或LDAP代理身份验证
(仅适用于MongoDB Enterprise)或Kerberos身份验证
(仅适用于MongoDB Enterprise)。
有关为特定身份验证机制创建用户的详细信息,请参阅特定身份验证机制页面。
有关创建和管理用户的最佳实践,请参见➤配置基于角色的访问控制。
通常,要为分片群集创建用户,请连接到
mongos
并添加分片群集用户。
但是,某些维护操作需要直接连接到分片群集中的特定分片。要执行这些操作,必须直接连接到分片并以分片本地管理用户身份进行身份验证。
分片本地用户仅存在于特定分片中,并且仅应用于分片特定的维护和配置。您无法mongos
使用分片本地用户连接到。
本教程要求创建分片集群用户,但包括添加分片本地用户的可选步骤。
有关更多信息,请参见用户安全性文档。
本教程使用mongod
和mongos
程序。Windows用户应改用mongod.exe
和
mongos.exe
程序。
以下过程涉及创建一个新的分片集群,该集群由mongos
,配置服务器和两个分片组成。
小费
如果可能,请使用逻辑DNS主机名而不是IP地址,尤其是在配置副本集成员或分片群集成员时。逻辑DNS主机名的使用避免了由于IP地址更改而导致的配置更改。
与密钥文件身份验证,每个
mongod
或mongos
实例的分片集群中使用密钥文件作为用于在部署认证其他成员共享密码的内容。只有
mongod
或mongos
具有正确密钥文件的实例可以加入分片群集。
注意
从MongoDB 4.2开始,用于内部成员身份验证的密钥文件使用YAML格式,以允许密钥文件中包含多个密钥。YAML格式接受以下内容:
YAML格式与使用文本文件格式的现有单键密钥文件兼容。
密钥的长度必须在6到1024个字符之间,并且只能包含base64集中的字符。分片群集的所有成员必须共享至少一个公共密钥。
注意
在UNIX系统上,密钥文件不得具有组或世界权限。在Windows系统上,不检查密钥文件权限。
您可以使用任何选择的方法来生成密钥文件。例如,以下操作用于openssl
生成复杂的伪随机1024字符串,用作共享密码。然后,它chmod
用于更改文件许可权,以仅为文件所有者提供读取许可权:
将密钥文件复制到托管分片集群成员的每个服务器。确保运行mongod
或mongos
实例的用户是文件的所有者,并且可以访问密钥文件。
避免存储关于可从托管的硬件来容易地断开连接的存储介质的密钥文件mongod
或mongos
实例,诸如USB驱动器或网络连接的存储设备。
以下步骤将部署配置服务器副本集。
对于生产部署,请部署至少具有三个成员的配置服务器副本集。出于测试目的,您可以创建单成员副本集。
启动配置服务器副本集中的每个 mongod
副本。包括keyFile
设置。该keyFile
设置将同时实施内部/成员身份验证和
基于角色的访问控制。
您可以mongod
通过配置文件或命令行指定设置。
配置文件
如果使用配置文件,设置security.keyFile
为密钥文件的路径,sharding.clusterRole
来configsvr
,并replication.replSetName
到配置服务器副本集所需的名称。
包括配置所需的其他选项。例如,如果您希望远程客户端连接到您的部署,或者您的部署成员在不同的主机上运行,请指定net.bindIp
设置。有关更多信息,请参见Localhost绑定兼容性更改。
开始mongod
指定--config
选项和配置文件的路径。
命令行
如果使用命令行参数,启动mongod
用的--keyFile
,--configsvr
和--replSet
参数。
包括配置所需的其他选项。例如,如果您希望远程客户端连接到您的部署,或者您的部署成员在不同的主机上运行,请指定
--bind_ip
。有关更多信息,请参见
Localhost绑定兼容性更改。
该rs.initiate()
方法启动副本集,并可以采用可选的副本集配置文档。在副本集配置文档中,包括:
_id
。在必须匹配
传递给参数。_id
--replSet
mongod
members
场。该members
字段是一个数组,每个副本集成员需要一个文档。configsvr
场。对于配置服务器副本集,该configsvr
字段必须设置true
为。使用rs.initiate()
方法和配置文档初始化副本集:
启动并启动配置服务器副本集(CSRS)后,继续创建分片副本集。
对于生产部署,请使用至少包含三个成员的副本集。出于测试目的,您可以创建单成员副本集。
这些步骤包括添加分片本地用户的可选过程。现在执行它们可以确保每个分片都有可用的用户来执行分片级维护。
mongod
使用keyFile
参数运行会同时强制执行
内部/成员身份验证和
基于角色的访问控制。
使用配置文件或命令行启动副本集中的每个 mongod
副本。
配置文件
如果使用配置文件,则将security.keyFile
选项设置为密钥文件的路径,将replication.replSetName
设置为所需的副本集名称,并将sharding.clusterRole
选项设置为shardsvr
。
包括配置所需的其他选项。例如,如果您希望远程客户端连接到您的部署,或者您的部署成员在不同的主机上运行,请指定net.bindIp
设置。有关更多信息,请参见Localhost绑定兼容性更改。
开始mongod
指定--config
选项和配置文件的路径。
命令行
如果使用命令行选项,启动组件时,指定--keyFile
,replSet
和--shardsvr
参数,如下面的例子:
包括配置所需的其他选项。例如,如果您希望远程客户端连接到您的部署,或者您的部署成员在不同的主机上运行,请指定
--bind_ip
。有关更多信息,请参见
Localhost绑定兼容性更改。
从mongo
外壳运行该rs.initiate()
方法。
rs.initiate()
可以获取可选的副本集配置文档。在
副本集配置文档中,包括:
_id
设置为replication.replSetName
或--replSet
选项中指定的副本集名称的字段。members
每个副本集中每个成员都有一个文档的数组。下面的示例初始化一个三成员副本集。
rs.initiate()
触发选举并选举一名成员为主要成员。
在继续之前,请连接到主服务器。使用rs.status()
定位主要成员。
重要
创建第一个用户后,localhost异常不再可用。
第一个用户必须具有创建其他用户(例如具有的用户)的特权userAdminAnyDatabase
。这样可以确保您可以在Localhost Exception
关闭后创建其他用户。
如果至少一个用户就不能有权限创建用户,一旦本地主机异常关闭您可能无法创建或修改用户权限的新,因此无法获得必要的操作。
使用db.createUser()
方法添加用户。用户应至少具有数据库userAdminAnyDatabase
角色
admin
。
您必须连接到主数据库才能创建用户。
以下示例在数据库中创建fred
具有
userAdminAnyDatabase
角色的用户admin
。
重要
密码应随机,长且复杂,以确保系统安全并防止或延迟恶意访问。
小费
从mongo
Shell的4.2版本开始,您可以将该passwordPrompt()
方法与各种用户身份验证/管理方法/命令结合使用,以提示输入密码,而不是直接在方法/命令调用中指定密码。但是,您仍然可以像在早期版本的mongo
Shell中一样直接指定密码
。
对admin
数据库进行身份验证。
在mongo
外壳中,用于db.auth()
进行身份验证。例如,以下身份验证为用户管理员fred
:
小费
从mongo
Shell的4.2版本开始,您可以将该passwordPrompt()
方法与各种用户身份验证/管理方法/命令结合使用,以提示输入密码,而不是直接在方法/命令调用中指定密码。但是,您仍然可以像在早期版本的mongo
Shell中一样直接指定密码
。
可替代地,一个新的连接mongo
通过壳到主副本集成员,和参数。-u <username>
-p <password>
--authenticationDatabase
本地分片群集管理员用户具有该
clusterAdmin
角色,该角色提供允许访问复制操作的特权。
有关与副本集操作相关的角色的完整列表,请参阅 群集管理角色。
创建集群管理员用户并clusterAdmin
在admin
数据库中分配
角色:
小费
从mongo
Shell的4.2版本开始,您可以将该passwordPrompt()
方法与各种用户身份验证/管理方法/命令结合使用,以提示输入密码,而不是直接在方法/命令调用中指定密码。但是,您仍然可以像在早期版本的mongo
Shell中一样直接指定密码
。
出现提示时输入密码。
mongos
到分片群集¶mongos
到集群¶mongos
使用配置文件或命令行参数启动指定密钥文件。
配置文件
如果使用配置文件,则将设置
security.keyFile
为密钥文件的路径,将
sharding.configDB
设置为副本集名称,并以<replSetName>/<host:port>
格式设置副本集的至少一个成员。
包括配置所需的其他选项。例如,如果您希望远程客户端连接到您的部署,或者您的部署成员在不同的主机上运行,请指定net.bindIp
设置。有关更多信息,请参见Localhost绑定兼容性更改。
开始mongos
指定--config
选项和配置文件的路径。
命令行
如果使用命令行参数,请启动mongos
并指定--keyFile
和--configdb
参数。
包括配置所需的其他选项。例如,如果您希望远程客户端连接到您的部署,或者您的部署成员在不同的主机上运行,请指定
--bind_ip
。有关更多信息,请参见
Localhost绑定兼容性更改。
重要
创建第一个用户后,localhost异常不再可用。
第一个用户必须具有创建其他用户(例如具有的用户)的特权userAdminAnyDatabase
。这样可以确保您可以在Localhost Exception
关闭后创建其他用户。
如果至少一个用户就不能有权限创建用户,一旦本地主机异常关闭您不能创建或修改用户,因此可能无法进行必要的操作。
使用db.createUser()
方法添加用户。用户应至少具有数据库userAdminAnyDatabase
角色
admin
。
重要
密码应随机,长且复杂,以确保系统安全并防止或延迟恶意访问。
以下示例fred
在