对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

使用服务账户配置 Atlas 访问

Atlas API服务帐户提供了一种基于令牌的安全编程API密钥替代方案,用于使用Atlas Administration API对Atlas Kubernetes Operator进行身份验证。服务帐户使用从clientIdclientSecret 对派生的短期访问权限令牌,降低了长期档案暴露的风险。

MongoDB 建议对新部署使用服务账户而不是程序化 API 密钥。服务账户具有以下优点:

  • 由操作符托管的带自动令牌刷新的基于令牌的身份验证。

  • 支持组织级别和项目级别范围。

  • 可审计的独立身份,适用于 Atlas Kubernetes Operator 工作负载。

重要

服务帐户密钥过期

与API密钥不同,服务帐户密钥是可过期的。您可以将TTL最长设立为一年。您必须在服务帐户密钥过期之前进行轮换,以保持访问权限不中断。随着过期日期的临近, Atlas会自动引发“服务帐户密钥即将过期”警报。相应地规划轮换安排。

这适用于组织级和项目级服务账户。

在开始之前,请确保您具备以下内容:

  • 具有组织级服务账户的 Organization Owner 角色或项目级服务账户的 Project Owner 角色的 Atlas 账户。

  • 安装了 Atlas Kubernetes Operator 的运行中 Kubernetes 集群。

  • kubectl 访问运行 Atlas Kubernetes Operator 的 Kubernetes 集群。

1

使用Atlas用户界面或Atlas Administration API在Atlas中创建服务帐户。要学习;了解如何创建组织级别的服务帐户,请参阅在组织中创建服务帐户。要学习;了解如何创建项目级服务帐户,请参阅在项目中创建服务帐户。

复制clientIdclientSecret。安全存储它们,因为创建后您无法再次检索clientSecret

2

创建包含orgId 、 和 的Kubernetes密钥。clientIdclientSecret

  • 对于 global Atlas Kubernetes Operator 密钥,运行以下命令:

    注意

    globalAtlas Kubernetes Operator密钥的名称必须符合预定义的格式。 Atlas Kubernetes Operator部署的默认名称是mongodb-atlas-operator 。因此,密钥应命名为 mongodb-atlas-operator-service-account

    kubectl create secret generic mongodb-atlas-operator-service-account \
    --from-literal="orgId=<the_atlas_organization_id>" \
    --from-literal="clientId=<the_service_account_client_id>" \
    --from-literal="clientSecret=<the_service_account_client_secret>" \
    -n <operator_namespace>
    kubectl label secret mongodb-atlas-operator-service-account \
    atlas.mongodb.com/type=credentials \
    -n mongodb-atlas-system
  • 对于 project Atlas Kubernetes Operator 密钥,运行以下命令:

    kubectl create secret generic my-project-connection \
    --from-literal="orgId=<the_atlas_organization_id>" \
    --from-literal="clientId=<the_service_account_client_id>" \
    --from-literal="clientSecret=<the_service_account_client_secret>" \
    -n <atlas_project_namespace>
    kubectl label secret my-project-connection \
    atlas.mongodb.com/type=credentials \
    -n <atlas_project_namespace>
3

使用 spec.connectionSecretRef.name 自定义资源引用密钥。AtlasProject

如果您创建了global 密钥,则默认下所有项目都会使用它,无需其他配置。

如果您创建了project 密钥,请将connectionSecretRef AtlasProject添加到您的 自定义资源中:

apiVersion: atlas.mongodb.com/v1
kind: AtlasProject
metadata:
name: my-project
spec:
name: "My Project"
connectionSecretRef:
name: my-project-connection
4

配置密钥后,验证Atlas Kubernetes Operator是否成功进行身份验证:

kubectl get atlasproject my-project -o jsonpath='{.status.conditions}'

检查 Ready 条件是否为 True。如果 Atlas Kubernetes Operator 无法使用 Service Account 凭证进行身份验证,条件中将显示描述该问题的错误。

以下示例展示为服务账户配置的连接秘密:

apiVersion: v1
kind: Secret
metadata:
name: my-project-connection
namespace: atlas-operator
labels:
atlas.mongodb.com/type: credentials
type: Opaque
stringData:
orgId: "5d39f0719ccf646554345678"
clientId: "mdb_sa_id_67890abcdef1234567890abc"
clientSecret: "mdb_sa_sk_abcdef1234567890abcdef12"

Atlas Kubernetes Operator自动管理访问权限令牌。当Atlas Kubernetes Operator检测到服务帐户连接密钥时,它会从Atlas Administration API获取访问权限令牌并将其存储在单独的Kubernetes密钥中。请勿手动编辑或删除访问令牌密钥。 Atlas Kubernetes Operator根据需要刷新令牌。

在 Atlas 中轮换服务账户秘密时:

  1. 使用新的 clientSecret 更新 Kubernetes 连接秘密。

  2. Atlas Kubernetes Operator 会检测到变更,并在下一个协调周期中获取新的访问令牌。无需重启。

重要

服务帐户密钥的最长TTL为一年。在Atlas中监控服务帐户密钥即将过期警报,并在密钥过期前轮换密钥,以避免身份验证失败。这适用于组织级别和项目级别的服务帐户。

服务帐户的API访问权限列表必须包含Atlas Kubernetes Operator Pod 使用的出口IP解决或 CIDR区块,与编程API密钥相同。如果操作符 Pod 的出口IP不在服务帐户访问权限列表中,则API请求将失败。