Overview
Atlas API服务帐户提供了一种基于令牌的安全编程API密钥替代方案,用于使用Atlas Administration API对Atlas Kubernetes Operator进行身份验证。服务帐户使用从clientId 和clientSecret 对派生的短期访问权限令牌,降低了长期档案暴露的风险。
MongoDB 建议对新部署使用服务账户而不是程序化 API 密钥。服务账户具有以下优点:
由操作符托管的带自动令牌刷新的基于令牌的身份验证。
支持组织级别和项目级别范围。
可审计的独立身份,适用于 Atlas Kubernetes Operator 工作负载。
重要
服务帐户密钥过期
与API密钥不同,服务帐户密钥是可过期的。您可以将TTL最长设立为一年。您必须在服务帐户密钥过期之前进行轮换,以保持访问权限不中断。随着过期日期的临近, Atlas会自动引发“服务帐户密钥即将过期”警报。相应地规划轮换安排。
这适用于组织级和项目级服务账户。
先决条件
在开始之前,请确保您具备以下内容:
具有组织级服务账户的 Organization Owner 角色或项目级服务账户的 Project Owner 角色的 Atlas 账户。
安装了 Atlas Kubernetes Operator 的运行中 Kubernetes 集群。
kubectl访问运行 Atlas Kubernetes Operator 的 Kubernetes 集群。
步骤
在 Atlas 中创建服务帐户
使用Atlas用户界面或Atlas Administration API在Atlas中创建服务帐户。要学习;了解如何创建组织级别的服务帐户,请参阅在组织中创建服务帐户。要学习;了解如何创建项目级服务帐户,请参阅在项目中创建服务帐户。
复制clientId和clientSecret。安全存储它们,因为创建后您无法再次检索clientSecret。
创建 Kubernetes 连接秘密
创建包含orgId 、 和 的Kubernetes密钥。clientIdclientSecret
对于
globalAtlas Kubernetes Operator 密钥,运行以下命令:注意
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 对于
projectAtlas 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>
参考 Secret 来源 AtlasProject
使用 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
YAML 示例
以下示例展示为服务账户配置的连接秘密:
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"
Considerations
令牌管理
Atlas Kubernetes Operator自动管理访问权限令牌。当Atlas Kubernetes Operator检测到服务帐户连接密钥时,它会从Atlas Administration API获取访问权限令牌并将其存储在单独的Kubernetes密钥中。请勿手动编辑或删除访问令牌密钥。 Atlas Kubernetes Operator根据需要刷新令牌。
凭证轮换
在 Atlas 中轮换服务账户秘密时:
使用新的
clientSecret更新 Kubernetes 连接秘密。Atlas Kubernetes Operator 会检测到变更,并在下一个协调周期中获取新的访问令牌。无需重启。
重要
服务帐户密钥的最长TTL为一年。在Atlas中监控服务帐户密钥即将过期警报,并在密钥过期前轮换密钥,以避免身份验证失败。这适用于组织级别和项目级别的服务帐户。
IP 访问列表
服务帐户的API访问权限列表必须包含Atlas Kubernetes Operator Pod 使用的出口IP解决或 CIDR区块,与编程API密钥相同。如果操作符 Pod 的出口IP不在服务帐户访问权限列表中,则API请求将失败。