- Deploy and Configure MongoDB Database Resources >
- Secure a Database Resource >
- Secure Internal Authentication with X.509 and TLS
Secure Internal Authentication with X.509 and TLS¶
On this page
This guide instructs you on how to configure:
- X.509 internal authentication between MongoDB nodes in a cluster.
- X.509 authentication from clients to your MongoDB instances.
- TLS to encrypt connections between MongoDB hosts in a replica set or sharded cluster.
- TLS to encrypt connections client applications and MongoDB deployments.
The Kubernetes Operator doesn’t support other authentication schemes between MongoDB nodes in a cluster.
Note
You can’t secure a Standalone Instance of MongoDB in a Kubernetes cluster.
Deprecation Notice
Automatically generating TLS certificates with the Kubernetes Operator is deprecated and will be removed in a future release.
You must provide certificates from your own CA, as described in the following procedures, for production environments.
General Prerequisites¶
Before you secure any of your MongoDB deployments using TLS encryption, complete the following:
Enabling X.509 authentication at the project level configures all agents to use X.509 client authentication when communicating with MongoDB deployments.
X.509 client authentication requires one of the following:
- Cloud Manager
- Ops Manager 4.1.7 or later
- Ops Manager 4.0.11 or later
Configure X.509 Internal Authentication for a Replica Set¶
Prerequisites¶
Before you secure your replica set using TLS encryption, complete the following:
- Deploy the Replica Set that you want to secure
Create a PEM file for each of the following components:
PEM file purpose Save File As… Your custom CA ca-pem
Each member of your replica set <metadata.name>-<X>-pem
Your project’s Automation or MongoDB Agent mms-automation-agent-pem
Your project’s Backup Agent (if needed) mms-backup-agent-pem
Your project’s Monitoring Agent (if needed) mms-monitoring-agent-pem
For the Agent PEM files, ensure that:
- the Common Name in each TLS certificate is not empty, and
- the combined Organization and Organizational Unit in each TLS certificate differs from the combined Organization and Organizational Unit in the TLS certificates for your replica set members.
Note
About the example filenames
- Name these files the exact names provided, substituting the
appropriate variables. If a filename doesn’t match, deployment
errors occur.
- Replace
<metadata.name>
with the value ofmetadata.name
in your deployment resource. - Replace
<Y>
with a 0-based number for the sharded cluster. - Replace
<X>
with the member of a shard or replica set.
- Replace
- End the PEM files with
-pem
and not.pem
. These files shouldn’t have a file extension.
To create the PEM file, concatenate the TLS certificate and the Private Key. An example of a PEM file would resemble:
Note
About the Domain Names in certificates
Each certificate should include a valid Domain Name.
For each replica set or sharded cluster member, the Common Name, also known as the Domain Name, for that member’s certificate must match the FQDN of the POD on which this cluster member is deployed.
The FQDN name in each certificate has the following syntax:
pod-name.service-name.namespace.svc.cluster.local
. This name is different for each Pod hosting a member of the replica set or a sharded cluster.For example, for a member of a replica set deployed on a Pod with the name
rs-mongos-0-0
, in the Kubernetes Operator service namedmongo-0
that is created in the defaultmongodb
namespace, the FQDN is:
Create Internal Authentication X.509 Certificates for a Replica Set¶
Copy the highlighted section of this replica set resource.¶
Change the highlighted settings of this YAML file to match your desired replica set configuration.
Paste the copied example section into your existing replica set resource.¶
Open your preferred text editor and paste the object specification
at the end of your resource file in the spec
section.
Configure the TLS settings for your replica set resource using a Custom Certificate Authority.¶
To enable TLS in your deployment, configure the following settings in your Kubernetes object:
Key | Type | Necessity | Description | Example |
---|---|---|---|---|
spec.security |
boolean | Required | If this value is By default, Kubernetes Operator requires hosts to use and accept TLS encrypted connections. |
true |
spec.security |
string | Required | Add the ConfigMap’s name that stores the custom CA that you used to sign your deployment’s TLS certificates. | <custom-ca> |
Configure the general X.509 settings for your replica set resource.¶
To enable TLS and X.509 in your deployment, configure the following settings in your Kubernetes object:
Key | Type | Necessity | Description | Example |
---|---|---|---|---|
boolean | Required | Set this value to true to enable authentication on the
MongoDB deployment. |
true |
|
array | Conditional | Set this value to ["X509"] . |
["X509"] |
Configure the internal X.509 settings for your replica set resource.¶
To enable TLS and X.509 in your deployment, configure the following settings in your Kubernetes object:
Key | Type | Necessity | Description | Example |
---|---|---|---|---|
string | Required | Use this setting to enable X.509 internal cluster authentication. Important Once internal cluster authentication is enabled, it can’t be disabled. |
X509 |
Save your replica set config file.¶
Apply your changes to your replica set deployment.¶
Invoke the following Kubernetes command to update your replica set:
Track the status of your deployment.¶
To check the status of your MongoDB Kubernetes resource, invoke the following command:
The -w
flag means “watch”. With the “watch” flag set, the output
refreshes immediately when the configuration changes until the status phase
achieves the Running
state.
See Troubleshoot the Kubernetes Operator for information about the resource deployment statuses.
Renew Internal Authentication X.509 Certificates for a Replica Set¶
If you have already created certificates, we recommend that you renew them periodically using the following procedure.
Restart the Pods in Your Deployment.¶
Run this kubectl
command to force a rolling update
of the StatefulSets to restart the Pods.
The Pods restart and begin watching the renewed secrets.
Track the status of your deployment.¶
To check the status of your MongoDB Kubernetes resource, invoke the following command:
The -w
flag means “watch”. With the “watch” flag set, the output
refreshes immediately when the configuration changes until the status phase
achieves the Running
state.
See Troubleshoot the Kubernetes Operator for information about the resource deployment statuses.
Configure X.509 Internal Authentication for a Sharded Cluster¶
Prerequisites¶
Before you secure your sharded cluster using TLS encryption, complete the following:
- Deploy the Sharded Cluster that you want to secure
Create a PEM file for each of the following components:
PEM file purpose Save File As… Your custom CA ca-pem
Each shard in your sharded cluster <metadata.name>-<Y>-<X>-pem
Each member of your config server replica set <metadata.name>-config-<X>-pem
Each mongos
<metadata.name>-mongos-<X>-pem
Your project’s Automation or MongoDB Agent mms-automation-agent-pem
Your project’s Backup Agent (if needed) mms-backup-agent-pem
Your project’s Monitoring Agent (if needed) mms-monitoring-agent-pem
For the Agent PEM files, ensure that:
- the Common Name in each TLS certificate is not empty, and
- the combined Organization and Organizational Unit in each TLS
certificate differs from the combined Organization and
Organizational Unit in the TLS certificates for your
sharded cluster members, config server members, and each
mongos
.
To create the PEM file, concatenate the TLS certificate and the Private Key. An example of a PEM file would resemble:
Note
About the example filenames
- Name these files the exact names provided, substituting the
appropriate variables. If a filename doesn’t match, deployment
errors occur.
- Replace
<metadata.name>
with the value ofmetadata.name
in your deployment resource. - Replace
<Y>
with a 0-based number for the sharded cluster. - Replace
<X>
with the member of a shard or replica set.
- Replace
- End the PEM files with
-pem
and not.pem
. These files shouldn’t have a file extension.
Note
About the Domain Names in certificates
Each certificate should include a valid Domain Name.
For each replica set or sharded cluster member, the Common Name, also known as the Domain Name, for that member’s certificate must match the FQDN of the POD on which this cluster member is deployed.
The FQDN name in each certificate has the following syntax:
pod-name.service-name.namespace.svc.cluster.local
. This name is different for each Pod hosting a member of the replica set or a sharded cluster.For example, for a member of a replica set deployed on a Pod with the name
rs-mongos-0-0
, in the Kubernetes Operator service namedmongo-0
that is created in the defaultmongodb
namespace, the FQDN is:
Create Internal Authentication X.509 Certificates for a Sharded Cluster¶
Create the secret for your Shards’ TLS certificates.¶
Run this kubectl
command to create a new secret that stores
the sharded cluster shards’ certificates:
This example covers a two-shard sharded cluster with five members per
shard. If you have more than two shards or five members per shard,
you can add them to the certificate using the --from-file
option.
Create the secret for your Shards’ X.509 certificates.¶
Run this kubectl
command to create a new secret that stores
the sharded cluster shards’ certificates:
This example covers a two-shard sharded cluster with five members per
shard. If you have more than two shards or five members per shard,
you can add them to the certificate using the --from-file
option.
Copy the highlighted section of this sharded cluster resource.¶
Change the highlighted settings of this YAML file to match your desired sharded cluster configuration.
Paste the copied example section into your existing sharded cluster resource.¶
Open your preferred text editor and paste the object specification
at the end of your resource file in the spec
section.
Configure the TLS settings for your sharded cluster resource using a Custom Certificate Authority.¶
To enable TLS in your deployment, configure the following settings in your Kubernetes object:
Key | Type | Necessity | Description | Example |
---|---|---|---|---|
spec.security |
boolean | Required | If this value is By default, Kubernetes Operator requires hosts to use and accept TLS encrypted connections. |
true |
spec.security |
string | Required | Add the ConfigMap’s name that stores the custom CA that you used to sign your deployment’s TLS certificates. | <custom-ca> |
Configure the general X.509 settings for your sharded cluster resource.¶
To enable TLS and X.509 in your deployment, configure the following settings in your Kubernetes object:
Key | Type | Necessity | Description | Example |
---|---|---|---|---|
boolean | Required | Set this value to true to enable authentication on the
MongoDB deployment. |
true |
|
array | Conditional | Set this value to ["X509"] . |
["X509"] |
Configure the internal X.509 settings for your sharded cluster resource.¶
To enable TLS and X.509 in your deployment, configure the following settings in your Kubernetes object:
Key | Type | Necessity | Description | Example |
---|---|---|---|---|
string | Required | Use this setting to enable X.509 internal cluster authentication. Important Once internal cluster authentication is enabled, it can’t be disabled. |
X509 |
Save your sharded cluster config file.¶
Update and restart your sharded cluster deployment.¶
Invoke the following Kubernetes command to update and restart your sharded cluster:
Track the status of your deployment.¶
To check the status of your MongoDB Kubernetes resource, invoke the following command:
The -w
flag means “watch”. With the “watch” flag set, the output
refreshes immediately when the configuration changes until the status phase
achieves the Running
state.
See Troubleshoot the Kubernetes Operator for information about the resource deployment statuses.
Renew Internal Authentication X.509 Certificates for a Sharded Cluster¶
If you have already created certificates, we recommend that you renew them periodically using the following procedure.
Renew the secret for your Shards’ TLS certificates.¶
Run this kubectl
command to renew an existing secret that
stores the sharded cluster shards’ certificates:
This example covers a two-shard sharded cluster with five members per
shard. If you have more than two shards or five members per shard,
you can add them to the certificate using the --from-file
option.
Renew the secret for your Shards’ X.509 certificates.¶
Run this kubectl
command to renew an existing secret that stores
the sharded cluster shards’ certificates:
This example covers a two-shard sharded cluster with five members per
shard. If you have more than two shards or five members per shard,
you can add them to the certificate using the --from-file
option.
Restart the Pods in Your Deployment.¶
Run this kubectl
command to force a rolling update
of the StatefulSets to restart the Pods.
The Pods restart and begin watching the renewed secrets.
Track the status of your deployment.¶
To check the status of your MongoDB Kubernetes resource, invoke the following command:
The -w
flag means “watch”. With the “watch” flag set, the output
refreshes immediately when the configuration changes until the status phase
achieves the Running
state.
See Troubleshoot the Kubernetes Operator for information about the resource deployment statuses.