Docs 菜单

设置 X.509 身份验证

X.509 客户端证书允许数据库用户访问项目中的数据库部署。 您可以使用 Atlas Kubernetes Operator 为AtlasProject资源AtlasDatabaseUser资源启用 X.509 身份验证。

X. 509身份验证选项包括 Atlas 托管的 X. 509身份验证和自管理 X. 509身份验证。 要了解有关自管理 X. 509身份验证的更多信息,请参阅设置自管理 X. 509身份验证。

要设置 X.509 身份验证:

  1. 生成 X.509 证书。

  2. 配置AtlasProject自定义资源以使用该证书。

  3. 配置AtlasDatabaseUser自定义资源以使用 Atlas 托管或自管理的 X.509 身份验证。

注意

要使用自管理的 X.509 证书,您必须拥有公钥基础架构才能与 MongoDB Atlas 集成。

使用509 cert-manager 生成 X. 证书 ,执行以下步骤:

1

要安装 cert-manager,请参阅 cert-manager 安装文档

2

要创建证书管理器Issuer ,请参阅 证书管理器配置文档

要了解更多信息,请参阅 示例。

3

要创建证书,请参阅 cert-manager 使用文档

要了解更多信息,请参阅 示例。

使用 create_X509 生成 X. 证书。 .go509脚本,执行以下步骤:

1

运行 create_X.509 .go脚本:

go run scripts/create_x509.go --path={pem-file-path}

示例:

go run scripts/create_x509.go --path=tmp/x509/
2

将证书添加到 密钥 ,运行以下命令:

kubectl create secret generic {secret-name} --from-file={pem-file-directory}
kubectl label secret {secret-name} atlas.mongodb.com/type=credentials

示例:

kubectl create secret generic my-x509-cert --from-file=./tmp/x509/cert.pem
kubectl label secret my-x509-cert atlas.mongodb.com/type=credentials
1

指定 密钥spec.x509CertRef.name AtlasProject自定义资源 的 参数内。

示例:

cat <<EOF | kubectl apply -f -
apiVersion: atlas.mongodb.com/v1
kind: AtlasProject
metadata:
name: my-project
spec:
name: Test Project
projectIpAccessList:
- ipAddress: "192.0.2.15"
comment: "IP address for Application Server A"
- cidrBlock: "203.0.113.0/24"
comment: "CIDR block for Application Servers B - D"
x509CertRef:
name: my-x509-cert
EOF
2

AtlasDatabaseUser自定义资源指定x509Type参数。

此参数接受:

不使用 X.509 身份验证的用户。

托管

使用 Atlas 托管的 X.509 的用户。

您必须为spec.databaseName参数指定\$external

客户

使用自管理 X. 509的用户。 使用此x509Type创建的用户需要在username字段中使用公用名 (CN)。 要了解详情,请参阅 RFC2253 。

您必须为spec.databaseName参数指定\$external

要学习;了解有关API提供的配置参数的更多信息,请参阅Atlas数据库用户API。

示例:

cat <<EOF | kubectl apply -f -
apiVersion: atlas.mongodb.com/v1
kind: AtlasDatabaseUser
metadata:
name: my-database-user
spec:
username: CN=my-x509-authenticated-user,OU=organizationalunit,O=organization
databaseName: "\$external"
x509Type: "CUSTOMER"
roles:
- roleName: "readWriteAnyDatabase"
databaseName: "admin"
projectRef:
name: my-project
EOF