使用 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身份验证后,您可以使用MongoDBSCRAM MongoDB Ops ManagerOps Manager界面或根据MongoDB MongoDB用户资源规范在 CustomResourceDefinition 中配置用户来添加SCRAM用户。
先决条件
在管理数据库用户之前,您必须部署独立运行的实例、副本集或分片集群。
对于多 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 authenticaiton roles: - db: "admin" name: "clusterAdmin" - db: "admin" name: "userAdminAnyDatabase" - db: "admin" name: "readWrite" - db: "admin" name: "userAdminAnyDatabase" ...
更改突出显示的行。
使用下表作为指南,更改MongoDB 用户Resource规范中突出显示的行:
键 | 类型 | 说明 | 例子 |
---|---|---|---|
| 字符串 | 数据库用户资源的名称。 资源名称必须少于或等于 44 个字符。 |
|
| 字符串 | 数据库用户的名称。 |
|
| 字符串 |
|
|
| 字符串 | 与该用户关联的MongoDB 资源的名称。 |
|
| 字符串 | 角色可以执行操作的数据库。 |
|
| 字符串 |
|
使用 扩展名保存 MongoDBUser文件。.yaml
创建用户。
调用以下 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
状态。