Kubernetes Operator 支持管理在启用 TLS 和 OIDC集群身份验证的情况下运行的部署的数据库用户。这允许您创建单独的数据库用户对象,根据您配置的 OIDC提供商进行身份验证。
此方法主要在 OIDC提供商配置为 UserID
的 authorizationType
时使用。
对于 GroupMembership
授权,直接在 MongoDB
资源规范中托管角色,而不是通过单独的 MongoDBUser
资源。
Considerations
MongoDBUser
资源:以这种方式托管的每个 OIDC 用户都需要相应的MongoDBUser
自定义资源。Kubernetes Operator 使用此资源在MongoDB中配置用户。$external
数据库:通过 OIDC 等外部机制进行身份验证的所有用户都必须在$external
虚拟数据库中创建。您必须在MongoDBUser
资源中将spec.db
设立为“$external”。用户名格式:规范。 用户名必须遵循 <configurationName>/<userClaimValue> 格式,将 OIDC 提供商的配置名称 与用户的JSON web token中的唯一声明相结合。 此声明由 OIDC提供商配置中的
userClaim
指定,默认为sub
。身份验证与授权:OIDC 身份提供者 (IdP) 负责对用户进行身份验证(验证其身份)。
MongoDBUser
资源负责在MongoDB中授权用户(定义他们有权执行的操作)。
先决条件
在管理数据库用户之前,您必须部署启用了 OpenID Connect 的 副本集或分片集群。已启用。(可选)您可以启用TLS 。要学习;了解更多信息,请参阅保护数据库资源。
添加数据库用户
创建 MongoDBUser YAML文件。
创建一个文件(例如 my-oidc-user.yaml
)来定义用户。
metadata.name
: Kubernetes中 MongoDBUser资源的唯一名称。spec.username
:用户的 OIDC 身份,以 oidc 提供商的configurationName
和用户的唯一令牌声明相结合,格式为<configurationName>/<userClaimValue>
。spec.db
:必须是$external
。spec.mongodbResourceRef.name
:此用户所属的MongoDB
资源的名称。spec.roles
:要授予此用户的MongoDB角色大量。
以下示例创建了一个对 app-data数据库具有读写访问权限的用户。
apiVersion: mongodb.com/v1 kind: MongoDBUser metadata: # A unique name for this Kubernetes resource. name: oidc-app-user-1 spec: # This username MUST match the 'userClaim' from the OIDC token. username: "idp0/a1b2c3d4e5f6g7h8" # OIDC users MUST be created in the $external database. db: "$external" # Point to the MongoDB deployment where this user should be created. mongodbResourceRef: name: my-oidc-replicaset # Grant MongoDB roles to the user. roles: - db: "app-data" name: "readWrite"
删除数据库用户
要删除数据库用户,只需删除与其关联的 MongoDBUser
资源即可。Kubernetes Operator 将自动从MongoDB 数据库中删除用户。将 MongoDBUser
资源的 metadata.name
传递给以下命令:
kubectl delete mongodbuser oidc-app-user-1