使用 SCRAM 身份验证管理数据库用户
Kubernetes 操作符 支持在 MongoDB 部署上使用 SCRAM 身份验证来管理数据库用户。
Considerations
支持的 SCRAM 实施
当您指定SCRAM
作为身份验证机制时,所使用的 SCRAM 实施取决于:
MongoDB 的版本和
如果数据库是应用程序数据库或其他数据库。
MongoDB 版本 | Database | SCRAM 实施 |
---|---|---|
3.6 或更早版本 | 除应用程序数据库之外的任何数据库 |
|
4.0 或更高版本 | 除应用程序数据库之外的任何数据库 |
|
Any | 应用程序数据库 |
|
支持的身份验证机制
Kubernetes Operator 在其创建的部署中支持 SCRAM、LDAP 和 X. 509身份验证机制。 在Kubernetes Operator 创建的部署中,您不能使用MongoDB Ops Manager执行以下操作:
为部署配置其他身份验证机制。
托管不使用 SCRAM、LDAP 或 X.509 身份验证的用户。
启用SCRAM 身份验证后,您可以使用SCRAM 界面或通过在MongoDB Ops Manager CustomResourceDefinition 中配置用户来添加MongoDB 用户。 基于 用户资源规范。
先决条件
在管理数据库用户之前,您必须部署独立运行的实例、副本集或分片集群。
对于多 Kubernetes 集群 MongoDB 部署,您必须部署副本集。 请参阅部署多个集群。
添加数据库用户
创建用户密钥
将 kubectl
配置为默认命名空间。
如果您尚未执行,请运行以下命令,执行所创建命名空间的所有
kubectl
命令。
注意
MongoDB Ops Manager如果要在多 Kubernetes 集群 部署中部署MongoDB 资源:
将
context
设置为中心集群的名称,例如:kubectl config set context "$MDB_CENTRAL_CLUSTER_FULL_NAME"
。将
--namespace
设置为您用于多 Kubernetes 集群 MongoDB 部署的相同范围,例如:kubectl config --namespace "mongodb"
。
kubectl config set-context $(kubectl config current-context) --namespace=<metadata.namespace>
复制以下 密钥 示例 。
您可以选择使用明文密码:
1 2 apiVersion: v1 3 kind: Secret 4 metadata: 5 name: <mms-user-1-password> 6 # corresponds to user.spec.passwordSecretKeyRef.name 7 type: Opaque 8 stringData: 9 password: <my-plain-text-password> 10 # corresponds to user.spec.passwordSecretKeyRef.key 11 ...
或者您可以选择使用 Base64 编码的密码:
1 2 apiVersion: v1 3 kind: Secret 4 metadata: 5 name: <mms-user-1-password> 6 # corresponds to user.spec.passwordSecretKeyRef.name 7 type: Opaque 8 data: 9 password: <base-64-encoded-password> 10 # corresponds to user.spec.passwordSecretKeyRef.key 11 ...
注意
确保复制所需的密码配置。 明文密码使用stringData.password
,Base64 编码密码使用data.password
创建新的用户密钥 YAML 文件。
打开您首选的文本编辑器。
将此用户密钥粘贴到新的文本文件中。
如果您使用 HashiCorp Vault 作为您的 Secret 存储工具,则可以创建 Vault Secret。
要了解有关 Secret 存储的选项,请参阅配置 Secret 存储。
更改突出显示的行。
使用下表作为指南更改密钥中突出显示的行:
键 | 类型 | 说明 | 例子 |
---|---|---|---|
| 字符串 | 数据库密码名称。 资源名称必须少于或等于 44 个字符。 |
|
| 字符串 | 所需用户的明文密码。 使用此选项和值或 |
|
| 字符串 | 所需用户的 Base64 编码密码。 使用此选项和值或 您必须自行将密码编码为 Base64,然后使用此选项粘贴结果值。 几乎每个平台都有适用的工具,还有多种基于 Web 的工具。 |
|
创建 MongoDBUser
复制以下 MongoDBUser示例。
apiVersion: mongodb.com/v1 kind: MongoDBUser metadata: name: <mms-scram-user-1> spec: passwordSecretKeyRef: name: <mms-user-1-password> # Match to metadata.name of the User Secret key: password username: "<mms-scram-user-1>" db: "admin" # mongodbResourceRef: name: "<my-replica-set>" # Match to MongoDB resource using authentication roles: - db: "admin" name: "clusterAdmin" - db: "admin" name: "userAdminAnyDatabase" - db: "admin" name: "readWrite" ...
更改突出显示的行。
使用下表作为指南,更改MongoDB 用户Resource规范中突出显示的行:
键 | 类型 | 说明 | 例子 |
---|---|---|---|
| 字符串 | 数据库用户资源的名称。 资源名称必须少于或等于 44 个字符。 |
|
| 字符串 | 数据库用户的名称。 |
|
| 字符串 | 存储用户密码的密钥的 |
|
| 字符串 | 与该用户关联的MongoDB 资源的名称。 |
|
| 字符串 | 角色可以执行操作的数据库。 |
|
| 字符串 |
|
创建用户。
调用以下 Kubernetes 命令来创建数据库用户:
kubectl apply -f <database-user-conf>.yaml
当您创建新的MongoDB database 用户时,Kubernetes Operator 会自动创建新的Kubernetes 密钥 。Kubernetes 的 秘密 包含有关新数据库用户的以下信息:
username
:数据库用户的用户名password
:数据库用户的密码connectionString.standard
:标准连接string ,可以让您以此数据库用户的身份连接到数据库。connectionString.standardSrv
: DNS 种子列表连接string ,可以让您以此数据库用户的身份连接到数据库。
注意
或者,您可以在MongoDB 用户资源规范中指定可选的
spec.connectionStringSecretName
字段,以指定 Kubernetes Operator 创建的连接字符串密钥的名称。
删除数据库用户
要删除数据库用户,请将metadata.name
从用户 MongoDBUser 传递给以下命令:
kubectl delete mdbu <metadata.name>
更改身份验证机制
要将用户身份验证机制更改为 SCRAM:
禁用身份验证。
在
spec.security.authentication
下,将enabled
更改为false
。spec: security: authentication: enabled : false 重新应用用户的资源定义。
等待 MongoDBResource 进入
running
状态。启用 SCRAM 身份验证。
在
spec.security.authentication
下,将enabled
更改为true
并将spec.security.authentication.modes
设置为 `` ["SCRAM"]``。spec: security: authentication: enabled : true modes: ["SCRAM"] 重新应用 MongoDBUser 资源。
等待 MongoDBResource 进入
running
状态。