Overview
Las cuentas de servicio de la API de Atlas proporcionan una alternativa segura basada en tokens a las claves de API programáticas para autenticar Atlas Kubernetes Operator con Atlas Administration API. Las cuentas de servicio utilizan tokens de acceso de corta duración derivados de un par clientId y clientSecret, lo que reduce el riesgo de exposición de credenciales de larga duración.
MongoDB recomienda las cuentas de servicio sobre las claves de API programáticas para las nuevas implementaciones. Las cuentas de servicio ofrecen los siguientes beneficios:
Autenticación basada en tokens con actualización automática de tokens gestionada por el operador.
Soporte para ámbitos a nivel de organización y de proyecto.
Identidad auditable y distinta para sus cargas de trabajo de Atlas Kubernetes Operator.
Importante
Caducidad del secreto de la cuenta de servicio
A diferencia de las claves API, los secretos de la cuenta de servicio tienen fecha de caducidad. Puede establecer un tiempo de vida útil (TTL) de hasta un año. Debe rotar los secretos de la cuenta de servicio antes de que caduquen para mantener un acceso ininterrumpido. Atlas genera automáticamente una alerta cuando se acerca la fecha de caducidad de los secretos de la cuenta de servicio. Planifique su calendario de rotación en consecuencia.
Esto se aplica tanto a las cuentas de servicio a nivel de organización como a nivel de proyecto.
Requisitos previos
Antes de comenzar, asegúrate de tener lo siguiente:
Una cuenta de Atlas con el rol de Organization Owner para cuentas de servicio a nivel de organización, o el rol de Project Owner para cuentas de servicio a nivel de proyecto.
Un clúster de Kubernetes en ejecución con Atlas Kubernetes Operator instalado.
kubectlacceso al clúster de Kubernetes donde se ejecuta Atlas Kubernetes Operator.
Procedimiento
Crear la cuenta de servicio en Atlas
Cree una cuenta de servicio en Atlas mediante la interfaz de usuario de Atlas o la Atlas Administration API. Para aprender a crear una cuenta de servicio a nivel de organización, consulte Crear una cuenta de servicio en una organización. Para aprender a crear una cuenta de servicio a nivel de proyecto, consulte Crear una cuenta de servicio en un proyecto.
Copia el clientId y el clientSecret. Almacénelos de forma segura, ya que no podrá recuperar el clientSecret de nuevo después de la creación.
Crear el secreto de conexión de Kubernetes
Crea un secreto de Kubernetes que orgId clientIdcontenga,clientSecret y.
Para un secreto de Atlas Kubernetes Operator
global, ejecute los siguientes comandos:Nota
El nombre del secreto del operador de
globalAtlas Kubernetes debe ajustarse al formato predefinido. El nombre predeterminado del despliegue del operador de Atlas Kubernetesmongodb-atlas-operatores. Por lo tanto, el secreto debemongodb-atlas-operator-service-accountllamarse.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 Para un secreto de Atlas Kubernetes Operator
project, ejecute los siguientes comandos: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>
Haga referencia al secreto de AtlasProject
Haz referencia al secreto de tu AtlasProject recurso personalizado usando spec.connectionSecretRef.name.
Si creaste un global secreto, todos los proyectos lo usarán por defecto y no se necesita ninguna configuración adicional.
Si creaste un project secreto, agrega el connectionSecretRef a tu AtlasProject recurso personalizado:
apiVersion: atlas.mongodb.com/v1 kind: AtlasProject metadata: name: my-project spec: name: "My Project" connectionSecretRef: name: my-project-connection
Verificar que el operador utilice la cuenta de servicio
Después de configurar el secreto, verifique que el operador de Atlas Kubernetes se autentique correctamente:
kubectl get atlasproject my-project -o jsonpath='{.status.conditions}'
Compruebe que la condición Ready sea True. Si Atlas Kubernetes Operator no puede autenticarse con las credenciales de la cuenta de servicio, las condiciones muestran un error que describe el problema.
Ejemplo de YAML
El siguiente ejemplo muestra un secreto de conexión configurado para una cuenta de servicio:
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
Gestión de tokens
El operador de Atlas Kubernetes gestiona automáticamente los tokens de acceso. Cuando detecta un secreto de conexión de cuenta de servicio, obtiene un token de acceso de la API de administración de Atlas y lo almacena en un secreto de Kubernetes independiente.No edite ni elimine manualmente el secreto del token de acceso. El operador de Atlas Kubernetes actualiza los tokens según sea necesario.
Rotación de credenciales
Cuando rote el secreto de la cuenta de servicio en Atlas:
Actualice el secreto de conexión de Kubernetes con el nuevo
clientSecret.El Atlas Kubernetes Operator detecta el cambio y adquiere un nuevo token de acceso en el siguiente ciclo de conciliación. No se requiere reiniciar.
Importante
Las claves de servicio tienen una vida útil máxima de un año. Supervise la alerta de Atlas que indica que las claves de servicio están a punto de caducar y rote sus claves antes de que caduquen para evitar fallos de autenticación. Esto se aplica tanto a las cuentas de servicio a nivel de organización como a las de nivel de proyecto.
Lista de acceso IP
La lista de acceso a la API de la cuenta de servicio debe incluir la dirección IP de salida o el bloque CIDR utilizado por el pod del operador de Atlas Kubernetes, al igual que para las claves de API programáticas. Si la IP de salida del pod del operador no se encuentra en la lista de acceso a la cuenta de servicio, las solicitudes a laAPI fallarán.