文档菜单
文档首页
/
MongoDB企业级Kubernetes操作员
/ /

使用SCRAM身份验证管理数据库用户

本页内容

  • 注意事项
  • 先决条件
  • 添加数据库用户
  • 删除数据库用户
  • 更改身份验证机制

Kubernetes操作员支持在MongoDB部署中使用SCRAM身份验证管理数据库用户。

当您指定SCRAM 作为身份验证机制时,所使用的 SCRAM 实现取决于

  • MongoDB 的版本和

  • 数据库是应用数据库还是其他数据库。

MongoDB 版本
数据库
SCRAM 实现

3.6 或更早版本

除应用数据库以外的任何数据库

SCRAM-SHA-1

4.0 或更高版本

除应用数据库以外的任何数据库

SCRAM-SHA-256

任何数据库

应用数据库

SCRAM-SHA-1

Kubernetes操作员支持的部署中支持 SCRAM、LDAP 和 X.509 身份验证机制。在由创建的部署中,您不能使用Kubernetes操作员-创建的部署,您不能使用Ops Manager

  • 为部署配置其他身份验证机制。

  • 管理不使用 SCRAM、LDAP 或 X.509 身份验证的用户。

启用 SCRAM 身份验证后,您可以使用 Ops Manager 界面或通过在 CustomResourceDefinition 基于以下 MongoDB 用户资源规范添加 SCRAM 用户:MongoDB 用户资源规范.

在管理数据库用户之前,您必须部署一个 独立集群副本集分片集群

对于多Kubernetes集群MongoDB部署,您必须部署副本集。请参阅 部署多个集群。

重要

您不能将相同的数据库用户分配给多个MongoDB 独立集群副本集分片集群。这包括具有 admin 角色的数据库用户。admin 角色用户。

1

如果您还没有这样做,请运行以下命令以在您创建的命名空间中执行所有 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>
2

您可以选择使用明文密码

1---
2apiVersion: v1
3kind: Secret
4metadata:
5 name: <mms-user-1-password>
6 # corresponds to user.spec.passwordSecretKeyRef.name
7type: Opaque
8stringData:
9 password: <my-plain-text-password>
10 # corresponds to user.spec.passwordSecretKeyRef.key
11...

或者您可以选择使用 Base64 编码的密码

1---
2apiVersion: v1
3kind: Secret
4metadata:
5 name: <mms-user-1-password>
6 # corresponds to user.spec.passwordSecretKeyRef.name
7type: Opaque
8data:
9 password: <base-64-encoded-password>
10 # corresponds to user.spec.passwordSecretKeyRef.key
11...

注意

确保复制所需的密码配置。明文密码使用 stringData.password,而 Base64 编码的密码使用 data.password

3
  1. 打开您喜欢的文本编辑器。

  2. 将此用户密钥粘贴到新的文本文件中。

如果您使用HashiCorp Vault作为您的密钥存储工具,您可以使用创建Vault密钥

有关密钥存储选项的信息,请参阅配置密钥存储

4

使用以下表格指导您修改Secret中的高亮行

类型
描述
示例

metadata.name

字符串

数据库密码密钥的名称。

资源名称必须小于或等于44个字符。

mms-scram-user-1-password

字符串数据.password

字符串

所需用户的纯文本密码。

使用此选项和值data.password。您不能同时使用两者。

<my-plain-text-password>

data.password

字符串

所需用户的Base64编码密码。

使用此选项和值 stringData.password。您不能同时使用两者。

您必须自行将密码编码为Base64,然后粘贴此选项的结果值。大多数平台都有工具,还有多个基于Web的工具。

<我的-base64-编码密码>

5
1
---
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"
...
2
  1. 打开您喜欢的文本编辑器。

  2. 将此MongoDBUser粘贴到新的YAML文件中。

3

使用以下表格引导您更改MongoDB用户资源规范中突出显示的行:MongoDB用户资源规范:

类型
描述
示例

metadata.name

字符串

数据库用户资源的名称。

资源名称必须小于或等于44个字符。

mms-scram-user-1

spec.username

字符串

数据库用户的名称。

mms-scram-user-1

spec.passwordSecretKeyRef.name

字符串

metadata.name 存储用户密码的密钥的值。

my-resource

spec.mongodbResourceRef.name

字符串

此用户关联的MongoDB资源的名称。MongoDB资源

my-resource

spec.roles.db

字符串

角色可以在其上执行数据库。

admin

spec.roles.name

字符串

要授予数据库用户的角色的名称。角色名称可以是任何内置MongoDB角色或存在于Cloud Manager或Ops Manager中的自定义角色Cloud Manager或Ops Manager.

readWriteAnyDatabase

4

您可以授予此用户额外的角色。

5
6

执行以下操作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 数据库资源。

7

您可以在Cloud Manager或Ops Manager:

  1. 从项目的 部署 视图中,点击 安全 选项卡。

  2. 点击嵌套的 MongoDB 用户 选项卡。

要删除数据库用户,将用户 MongoDBUser 的 metadata.name 传递给以下命令

kubectl delete mdbu <metadata.name>

将您的用户认证机制更改为SCRAM

  1. 禁用认证。

    spec.security.authentication 下,将 enabled 更改为 false

    spec:
    security:
    authentication:
    enabled : false
  2. 重新应用用户的资源定义。

  3. 等待MongoDBResource达到 运行 状态。

  4. 启用SCRAM认证。

    spec.security.authentication 下,将 enabled 更改为 true 并设置 spec.security.authentication.modes 为 ``["SCRAM"]``。

    spec:
    security:
    authentication:
    enabled : true
    modes: ["SCRAM"]
  5. 重新应用MongoDBUser资源。

  6. 等待MongoDBResource达到 运行 状态。