Kubernetes Operator は、TLS および OIDC クラスター認証を有効にして実行中配置のデータベースユーザーの管理をサポートしています。これにより、設定された OIDC プロバイダーに対して認証する個々のデータベースユーザーオブジェクトを作成できます。
この方法は主に、OIDC プロバイダーが UserID の authorizationType で構成されている場合に使用されます。
GroupMembership認可の場合、ロールは個々の MongoDBUser リソースではなく、MongoDBリソース仕様で直接管理されます。
Considerations
MongoDBUserリソース: この方法で管理される各 OIDC ユーザーには、対応するMongoDBUserカスタムリソースが必要です。Kubernetes Operator はこのリソースを使用して、 MongoDB内のユーザーを構成します。$externalデータベース: OIDC などの外部メカニズムを介して認証するすべてのユーザーは、$external仮想データベースに作成する必要があります。MongoDBUserリソースで、spec.dbを "$external" に設定する必要があります。ユーザー名の形式:<configurationName> <userClaimValue>仕様。 ユーザー名 は、OIDC プロバイダーの構成名とユーザーのJSON web トークンの一意のクレームを組み合わせて、- という形式に従う必要があります。このクレームは OIDC プロバイダー構成で
userClaimによって指定され、デフォルトはsubです。認証と認可: OIDC IdP(OIDC IdP)はユーザーの認証(ID の検証)を行います。
MongoDBUserリソースは、 MongoDB内でユーザーの認可(実行権限の定義)を担当します。
前提条件
データベースユーザーを管理する前に、OpenID Connect を有効にして レプリカセットまたはシャーディングされたクラスターを配置する必要があります。有効になっている。オプションで、TLS を有効にできます。詳細については、データベース リソースの保護 を参照してください。
データベースユーザーの追加
MongoDBUser YAMLファイルを作成します。
ユーザーを定義するためのファイル(例: my-oidc-user.yaml)を作成します。
metadata.name: Kubernetes内の MongoDBUserリソースの一意の名前。spec.username: ID プロバイダーのconfigurationNameとユーザーのユニーク トークン クレームを<configurationName>/<userClaimValue>形式で組み合わせたユーザーの OIDC ID。spec.db: これは$externalである必要があります。spec.mongodbResourceRef.name: このユーザーが属するMongoDBリソースの名前。spec.roles: このユーザーに付与するMongoDBロールの配列。
以下は、 アプリデータデータベースへの読み取りおよび書込みアクセス権を持つユーザーを作成する例です。
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