SCRAM 認証を使用したデータベースユーザーの管理
Kubernetes Operator は、MongoDB 配置で SCRAM 認証を使用したデータベースユーザーの管理をサポートしています。
Considerations
サポートされている SCRAM 実装
認証メカニズムとして SCRAM
を指定した場合、使用される SCRAM の実装は以下によって異なります。
MongoDB のバージョンと
データベースが アプリケーション データベース または別のデータベースである場合。
MongoDB バージョン | Database | SCRAM の実装 |
---|---|---|
3.6 またはそれ以前 | アプリケーション データベースを除く | SCRAM-SHA-1 |
4.0 以降 | アプリケーション データベースを除く | SCRAM-SHA-256 |
Any | アプリケーション データベース | SCRAM-SHA-1 |
サポートされている認証メカニズム
Kubernetes Operator は、作成する配置で SCRAM、LDAP、および X. 509認証メカニズムをサポートします。 Kubernetes Operator によって作成された配置では、 MongoDB Ops Managerを使用して次の操作を行うことはできません。
配置用のその他の認証メカニズムを構成します。
SCRAM、LDAP、または X.509 認証を使用せずにユーザーを管理します。
SCRAM認証を有効 にした後、 Ops Manager インターフェースを使用するか、 CustomResourceDefinition でユーザーを構成することで、SCRAM ユーザーを追加できます。 MongoDBユーザー リソース仕様 に基づきます。
前提条件
データベースユーザーを管理する前に、スタンドアロン、レプリカセット、またはシャーディングされたクラスター を配置する必要があります。
MongoDB のマルチ Kubernetes クラスター配置の場合は、レプリカセットを配置する必要があります。 「複数のクラスターの配置 」を参照してください。
データベースユーザーの追加
重要
ユーザー シークレットの作成
kubectl
をデフォルトで名前空間に設定します。
まだ作成していない場合は、次のコマンドを実行して、作成した名前空間ですべてのkubectl
コマンドを実行します。
注意
MongoDB Ops Manager リソースを複数の Kubernetes クラスター MongoDB 配置に配置している場合、次の手順に従います。
context
を中央クラスターの名前に設定します(例:kubectl config set context "$MDB_CENTRAL_CLUSTER_FULL_NAME"
。MongoDB のマルチ配置に使用したのと同じスコープ(例:
kubectl config --namespace "mongodb"
に--namespace
を設定します。
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 を使用している場合 シークレット ストレージ ツール として使用する場合は、代わりに Vault シークレットを作成 できます。
シークレット ストレージのオプションの詳細については、「シークレット ストレージの構成 」を参照してください。
強調表示された行を変更します。
次の表を使用すると、シークレットで強調表示された行を変更する方法がガイドされます。
キー | タイプ | 説明 | 例 |
---|---|---|---|
metadata.name | string | データベース パスワード シークレットの名前。 リソース名は 44 文字以下にする必要があります。 | mms-scram-user-1-password |
stringData.password | string | 任意のユーザーのプレーンテキスト パスワード。 このオプションと値、または | <my-plain-text-password> |
data.password | string | 任意のユーザーの base64 でエンコードされたパスワード。 このオプションと値、または 自分でパスワードを base64 にエンコードしてから、結果の値をこのオプションで貼り付ける必要があります。 ほとんどすべてのプラットフォーム向けのツールや、複数のウェブベースのツールにも対応しています。 | <my-base64-encoded-password> |
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 ユーザー リソース仕様で強調表示された行を変更する方法がガイドします。
キー | タイプ | 説明 | 例 |
---|---|---|---|
metadata.name | string | データベースユーザー リソースの名前。 リソース名は 44 文字以下にする必要があります。 | mms-scram-user-1 |
spec.username | string | データベースユーザーの名前。 | mms-scram-user-1 |
spec.passwordSecretKeyRef.name | string | metadata.name ユーザーのパスワードを保存するシークレットの値。 | my-resource |
spec.mongodbResourceRef.name | string | このユーザーが関連付けられているMongoDB リソースの名前。 | my-resource |
spec.roles.db | string | ロールが機能できるデータベース。 | admin |
spec.roles.name | string | readWriteAnyDatabase |
ユーザーを作成します。
次の Kubernetes コマンドを呼び出して、データベースユーザーを作成します。
kubectl apply -f <database-user-conf>.yaml
新しい MongoDB データベースユーザーを作成すると、Kubernetes Operator は新しい Kubernetes シークレット を自動的に作成します。 。Kubernetes シークレット には、新しいデータベースユーザーに関する次の情報が含まれています。
username
: データベースユーザーのユーザー名password
: データベースユーザーのパスワードconnectionString.standard
: このデータベース ユーザーとしてデータベースに接続できる標準接続string 。connectionString.standardSrv
: このデータベースユーザーとしてデータベースに接続できるDNS シード リスト接続string 。
注意
あるいは、spec.connectionStringSecretName
MongoDB ユーザー リソース仕様 で任意の フィールドを指定して、string KubernetesOperator が作成する接続 シークレットの名前を指定することもできます。
データベースユーザーの削除
データベースユーザーを削除するには、ユーザー MongoDBUser から次のコマンドにmetadata.name
を渡します。
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
状態になるまで待ちます。