Visão geral
Atlas API Service Accounts provide a secure, token-based alternative to Programmatic API Keys for authenticating Atlas Kubernetes Operator with the Atlas Administration API. Service Accounts use short-lived access tokens derived from a clientId and clientSecret pair, reducing the risk of long-lived credential exposure.
O MongoDB recomenda contas de serviço em vez de chaves de API programáticas para novas implantações. As contas de serviço oferecem os seguintes benefícios:
Autenticação baseada em token com atualização automática de token gerenciada pelo operador.
Suporte para escopos de nível de organização e de nível de projeto.
Identidade auditável e distinta para suas cargas de trabalho do Atlas Kubernetes Operator.
Importante
Expiração do segredo da conta de serviço
Ao contrário das chaves de API, os segredos da conta de serviço são expiráveis. Você pode definir um TTL de até um ano no máximo. Você deve alternar os segredos da conta de serviço antes que eles expirem para manter o acesso ininterrupto. O Atlas gera automaticamente um alerta de segredos de conta de serviço que estão prestes a expirar à medida que a data de expiração se aproxima. Planeje seu cronograma de rotação adequadamente.
Isso se aplica a contas de serviço de nível de organização e de nível de projeto.
Pré-requisitos
Antes de começar, verifique se você tem o seguinte:
Uma conta Atlas com a função Organization Owner para contas de serviço de nível de organização ou a função Project Owner para contas de serviço de nível de projeto.
Um cluster Kubernetes em execução com o Atlas Kubernetes Operator instalado.
kubectlacesso ao cluster Kubernetes onde o Atlas Kubernetes Operator é executado.
Procedimento
Crie a conta de serviço no Atlas
Create a Service Account in Atlas using the Atlas UI or the Atlas Administration API. To learn how to create an organization-level Service Account, see Create a Service Account in an Organization. To learn how to create a project-level Service Account, see Create a Service Account in a Project.
Copie o clientId e clientSecret. Armazene-os com segurança, pois você não poderá recuperar o clientSecret novamente após a criação.
Crie o segredo de conexão do Kubernetes
Crie um secret do Kubernetes secret contendo orgId, clientId e clientSecret.
Para obter um segredo
globaldo Atlas Kubernetes Operator segredo, execute os seguintes comandos:Observação
O nome do segredo do Atlas Kubernetes Operator
globaldeve estar em conformidade com o formato predefinido. O nome padrão do sistema Atlas Kubernetes Operator émongodb-atlas-operator. Então, o segredo deve ser nomeado comomongodb-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 Para obter um segredo
projectdo Atlas Kubernetes Operator segredo, execute os seguintes 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>
Referencie o segredo de AtlasProject
Referência o segredo do seu recurso personalizado AtlasProject usando spec.connectionSecretRef.name.
Se você criou um global segredo, todos os projetos o utilizam por padrão e nenhuma configuração adicional é necessária.
Se você criou um project segredo, adicione o connectionSecretRef ao seu recurso personalizado AtlasProject:
apiVersion: atlas.mongodb.com/v1 kind: AtlasProject metadata: name: my-project spec: name: "My Project" connectionSecretRef: name: my-project-connection
Verifique se o operador usa a conta de serviço
Depois de configurar o secret, verifique se o Atlas Kubernetes Operator autentica com sucesso:
kubectl get atlasproject my-project -o jsonpath='{.status.conditions}'
Verifique se a condição Ready é True. Se o Atlas Kubernetes Operator não puder autenticar com as credenciais da conta de serviço, as condições mostrarão um erro descrevendo o problema.
Exemplo de YAML
O exemplo a seguir mostra um segredo de conexão configurado para uma conta de serviço:
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"
Considerações
Gerenciamento de tokens
O Atlas Kubernetes Operator gerencia tokens de acesso automaticamente. Quando o Atlas Kubernetes Operator detecta um Service Account Connection Secret, ele obtém um token de acesso da Atlas Administration API e o armazena em um secret do Kubernetes separado. Não edite ou exclua manualmente o Access Token Secret. O Atlas Kubernetes Operator atualiza os tokens conforme necessário.
Rotação de credenciais
Quando você gira o segredo da conta de serviço no Atlas:
Atualizar o Kubernetes Connection Secret com o novo
clientSecret.O Atlas Kubernetes Operator detecta a alteração e adquire um novo token de acesso no próximo ciclo de reconciliação. Nenhuma reinicialização é necessária.
Importante
Os segredos da conta de serviço têm um TTL máximo de um ano. Monitore o alerta de que os segredos da conta de serviço estão prestes a expirar no Atlas e gire seus segredos antes que eles expirem para evitar falhas de autenticação. Isso se aplica a contas de serviço no nível da organização e no nível do projeto.
Lista de acesso IP
The Service Account's API access list must include the egress IP address or CIDR block used by the Atlas Kubernetes Operator pod, the same as for Programmatic API Keys. If the operator pod's egress IP is not on the Service Account access list, API requests fail.