使用SCRAM身份验证管理数据库用户
该Kubernetes操作员支持在MongoDB部署中使用SCRAM身份验证管理数据库用户。
注意事项
支持的 SCRAM 实现
当您指定SCRAM
作为身份验证机制时,所使用的 SCRAM 实现取决于
MongoDB 的版本和
数据库是应用数据库还是其他数据库。
MongoDB 版本 | 数据库 | SCRAM 实现 |
---|---|---|
3.6 或更早版本 | 除应用数据库以外的任何数据库 |
|
4.0 或更高版本 | 除应用数据库以外的任何数据库 |
|
任何数据库 | 应用数据库 |
|
支持的认证机制
该Kubernetes操作员支持的部署中支持 SCRAM、LDAP 和 X.509 身份验证机制。在由创建的部署中,您不能使用Kubernetes操作员-创建的部署,您不能使用Ops Manager 来
为部署配置其他身份验证机制。
管理不使用 SCRAM、LDAP 或 X.509 身份验证的用户。
启用 SCRAM 身份验证后,您可以使用 Ops Manager 界面或通过在 CustomResourceDefinition 基于以下 MongoDB 用户资源规范添加 SCRAM 用户:MongoDB 用户资源规范.
先决条件
在管理数据库用户之前,您必须部署一个 独立集群、副本集 或 分片集群。
对于多Kubernetes集群MongoDB部署,您必须部署副本集。请参阅 部署多个集群。
添加数据库用户
创建用户密钥
配置 kubectl
默认使用您的命名空间。
如果您还没有这样做,请运行以下命令以在您创建的命名空间中执行所有 kubectl
命令。
注意
如果您正在部署一个Ops Manager资源到一个多 Kubernetes 集群 MongoDB 部署中:
将
context
设置为中央集群的名称,例如:kubectl config set context "$MDB_CENTRAL_CLUSTER_FULL_NAME"
。将
--namespace
设置为您使用的相同 范围,例如:kubectl config --namespace "mongodb"
。多 Kubernetes 集群 MongoDB 部署中等
kubectl config set-context $(kubectl config current-context) --namespace=<metadata.namespace>
复制以下示例 secret.
您可以选择使用明文密码
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作为您的密钥存储工具,您可以使用创建Vault密钥。
有关密钥存储选项的信息,请参阅配置密钥存储。
修改高亮行。
使用以下表格指导您修改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 authenticaiton roles: - db: "admin" name: "clusterAdmin" - db: "admin" name: "userAdminAnyDatabase" - db: "admin" name: "readWrite" - db: "admin" name: "userAdminAnyDatabase" ...
更改突出显示的行。
使用以下表格引导您更改MongoDB用户资源规范中突出显示的行:MongoDB用户资源规范:
键 | 类型 | 描述 | 示例 |
---|---|---|---|
| 字符串 | 数据库用户资源的名称。 资源名称必须小于或等于44个字符。 |
|
| 字符串 | 数据库用户的名称。 |
|
| 字符串 |
|
|
| 字符串 | 此用户关联的MongoDB资源的名称。MongoDB资源 |
|
| 字符串 | 角色可以在其上执行数据库。 |
|
| 字符串 | 要授予数据库用户的角色的名称。角色名称可以是任何内置MongoDB角色或存在于Cloud Manager或Ops Manager中的自定义角色。Cloud Manager或Ops Manager. |
|
将任何额外的角色添加到MongoDBUser用户。
您可以授予此用户额外的角色。
使用.yaml
扩展名保存MongoDBUser文件。
创建用户。
执行以下操作Kubernetes命令以创建您的数据库用户
kubectl apply -f <database-user-conf>.yaml
当您创建新的MongoDB数据库用户时,Kubernetes操作员会自动创建一个新的Kubernetes 秘密。这些Kubernetes secret 包含以下关于新数据库用户的信息
username
:数据库用户的用户名password
:数据库用户的密码connectionString.standard
:可以连接到数据库的 标准连接字符串,作为此数据库用户。connectionString.standardSrv
:可以连接到数据库的 DNS种子列表连接字符串,作为此数据库用户。
注意
或者,您可以在 MongoDB 用户资源规范 中指定一个可选的 spec.connectionStringSecretName
字段,以指定由Kubernetes操作员创建的连接字符串密钥的名称。
您可以使用这些凭据从 Kubernetes 内部连接到 MongoDB 数据库资源。
删除数据库用户
要删除数据库用户,将用户 MongoDBUser 的 metadata.name
传递给以下命令
kubectl delete mdbu <metadata.name>
更改认证机制
将您的用户认证机制更改为SCRAM
禁用认证。
在
spec.security.authentication
下,将enabled
更改为false
。spec: security: authentication: enabled : false 重新应用用户的资源定义。
等待MongoDBResource达到
运行
状态。启用SCRAM认证。
在
spec.security.authentication
下,将enabled
更改为true
并设置spec.security.authentication.modes
为 ``["SCRAM"]``。spec: security: authentication: enabled : true modes: ["SCRAM"] 重新应用MongoDBUser资源。
等待MongoDBResource达到
运行
状态。