Visão geral
As contas de serviço da Atlas API fornecem uma alternativa segura e baseada em token às chaves de API programáticas para autenticar o Atlas Kubernetes Operator com a Atlas Administration API. As contas de serviço usam tokens de acesso de curta duração derivados de um par clientId e clientSecret, reduzindo o risco de exposição de credenciais de longa duração.
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 alterar os segredos da conta de serviço antes que expirem para manter o acesso ininterrupto. O Atlas levanta automaticamente um alerta Os segredos da conta de serviço estão prestes a expirar à medida que a data de expiração se aproxima. Planeje seu agendamento de alteração de acordo.
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
Crie uma conta de serviço no Atlas usando a IU do Atlas ou a Atlas Administration API. Para saber como criar uma conta de serviço em nível de organização, consulte Criar uma conta de serviço em uma organização. Para saber como criar uma conta de serviço em nível de projeto, consulte Criar uma conta de serviço em um projeto.
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 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 em nível de organização e em nível de projeto.
Lista de acesso IP
A lista de acesso à API da conta de serviço deve incluir o endereço IP de saída ou o bloco CIDR usado pelo pod do Atlas Kubernetes Operator, o mesmo que para chaves de API programáticas. Se o IP de saída do pod do operador não estiver na lista de acesso da conta de serviço, as solicitações da API falharão.