Configurar armazenamento secreto
Nesta página
Você pode escolher a ferramenta de armazenamento secreta para o Kubernetes Operator. A ferramenta de armazenamento secreta é um local seguro para armazenar informações confidenciais para os componentes que o Kubernetes Operator managed. Isso inclui segredos para reconhecimento de data center MongoDB, Ops Manager e AppDB.
Depois de configurar o armazenamento secreto, o Kubernetes Operator acessa a ferramenta, recupera os segredos e os usa para estabelecer conexões com segurança.
Ferramentas de armazenamento secretos suportadas
O Kubernetes Operator oferece suporte às seguintes ferramentas de armazenamento secreto:
Kubernetes: armazene informações confidenciais como segredos (o armazenamento secreto embutido para Kubernetes). Os segredos do Kubernetes armazenam credenciais de autenticação para que apenas os Kubernetes possam acessá-los.
HashiCorp Vault: armazene informações confidenciais no Vault, um serviço de terceiros para gerenciamento secreto.
Segredos que você pode armazenar
Você pode usar qualquer ferramenta de armazenamento de segredos compatível para qualquer segredo na documentação do MongoDB Enterprise Kubernetes Operator, exceto aqueles listados nas limitações.
Importante
Após a configuração, o Kubernetes Operator usa sua ferramenta de armazenamento de segredos selecionada para todos os segredos, exceto aqueles listados nas limitações. Você não pode misturar e combinar ferramentas de armazenamento secreto.
Limitações
Existem as seguintes limitações para as ferramentas de armazenamento de segredos suportadas:
Alguns registros, como o OpenShift, exigem imagemPullSecrets para extrair imagens do repositório. O operador do Kubernetes não pode fornecer imagemPullSecrets do HashiCorp Vault. Você pode especificar um fornecedor de credenciais de imagem do Kubelet para recuperar credenciais de um registro de imagem de contêiner usando o Kubernetes.
Definir a Ferramenta de Armazenamento Secreto
Para definir a ferramenta de armazenamento secreto, selecione uma das seguintes opções:
Para usar o HashiCorp Vault para armazenar segredos para o Operador Kubernetes, conclua o procedimento a seguir.
Pré-requisitos
Antes de começar, você deve:
Configure uma instância do Vault. O cluster Kubernetes em que o Operador Kubernetes está sendo executado deve ter acesso à instância do Vault.
Observação
Certifique-se de que o Vault não esteja em execução no modo de desenvolvimento e que a instalação do Vault segue todas as recomendações de configuração aplicáveis.
Habilitar autenticação do Kubernetes para a instância do Vault. Isso permite que você autentique com o Vault.
Implante o injetor de sidecar do Vault Agent no cluster Kubernetes. Isso permite que você injete segredos do Vault em seus Pods Kubernetes.
Baixe os quatro arquivos de políticas do Vault para o Kubernetes Operator, banco de banco deMongoDB dados , MongoDB Ops Manager e AppDB.
Criar um papel no Vault com o nome
mongodbenterprise
. A configuração de segredos no Operador Kubernetes depende da presença deste papel e seu nome exato.
Procedimento
Adicione as políticas do Vault para o Kubernetes Operator e seus componentes.
Escreva as políticas para os Kubernetes Operator, MongoDB database, MongoDB Ops Manager e AppDB no Vault usando o comando a seguir, substituindo as variáveis pelos valores na tabela:
Espaço reservado | Descrição |
---|---|
{PolicyName} | Rótulo legível por humanos que identifica a política que você está criando no Vault. |
{PathToPolicyFile} | O caminho absoluto para o arquivo de política que você baixou. |
vault policy write {PolicyName} {PathToPolicyFile}
Repita o comando para todos os recursos que você está adicionando ao Vault.
Vincule os roles do Vault às políticas do Vault para o Operador Kubernetes e seus componentes.
Vincule os roles do Vault às políticas para o Kubernetes Operator, MongoDB database, MongoDB Ops Manager e AppDB usando os quatro comandos a seguir, substituindo as variáveis pelos valores na tabela:
Espaço reservado | Descrição |
---|---|
{OperatorPolicyName} | Um rótulo legível por humanos que identifica a política do Kubernetes Operator no Vault. |
{DatabasePolicyName} | Um rótulo legível por humanos que identifica a política de MongoDB database no Vault. |
{OpsManagerPolicyName} | Um etiqueta legível por humanos que identifica a política do MongoDB Ops Manager no Vault. |
{AppDBPolicyName} | Um etiqueta legível por humanos que identifica a política do AppDB no Vault. |
{ServiceAccountNamespace} | Etiqueta que identifica o namespace da conta de serviço vinculada ao seu pod. |
vault write auth/kubernetes/role/{OperatorPolicyName} bound_service_account_names=enterprise-operator bound_service_account_namespaces={ServiceAccountNamespace}
vault write auth/kubernetes/role/{DatabasePolicyName} bound_service_account_names=mongodb-enterprise-database-pods bound_service_account_namespaces={ServiceAccountNamespace}
vault write auth/kubernetes/role/{OpsManagerPolicyName} bound_service_account_names=mongodb-enterprise-ops-manager bound_service_account_namespaces={ServiceAccountNamespace}
vault write auth/kubernetes/role/{AppDBPolicyName} bound_service_account_names=mongodb-enterprise-appdb bound_service_account_namespaces={ServiceAccountNamespace}
Esses comandos garantem que os pods de cada componente tenham somente o acesso especificado em sua política.
Observação
Esta etapa concede ao Operador do Kubernetes acesso ao Vault. Para usar o Vault com aplicativos que o operador Kubernetes não gerencia, você deve gravar e vincular políticas do Vault para esses aplicativos.
Você pode adaptar os comandos nesta etapa para vincular outras políticas substituindo o nome das contas de serviço. Para configurar outros aplicativos para usar o Vault, substitua {ServiceAccountName} no seguinte comando pela conta de serviço usada para o pod do aplicativo:
vault write auth/kubernetes/role/{PolicyName} bound_service_account_names={ServiceAccountName} bound_service_account_namespaces={ServiceAccountNamespace}
Adicione as anotações ao arquivo de sistema do Kubernetes.
Antes de executar os comandos nesta etapa, certifique-se de ter criado uma função no Vault com o nome mongodbenterprise
.
Adicione as seguintes linhas realçadas à seção spec.template.metadata.annotations
do seu arquivo de sistema do Kubernetes Operator. Para a maioria dos usuários, o nome desse arquivo é mongodb-enterprise.yaml
ou mongodb-enterprise-openshift.yaml
.
Observação
Se você instalou o Operador Kubernetes usando o Helm e definiu operator.vaultSecretBackend.enabled como true
, o Operador Kubernetes adicionará as seguintes anotações. Você pode prosseguir para a próxima etapa.
apiVersion: apps/v1 kind: Deployment metadata: name: mongodb-enterprise-operator namespace: production spec: replicas: 1 template: metadata: annotations: vault.hashicorp.com/agent-inject: "true" vault.hashicorp.com/role: "mongodbenterprise"
Se você estiver executando o Vault no modoTLS e especificou o valor operator.vaultSecretBackend.tlsSecretRef , o Kubernetes Operator adicionará as seguintes anotações. Caso contrário, adicione a seguinte linha destacada ao arquivo, substituindo {TLSSecret}
pelo nome do segredo contendo uma entrada ca.crt
. O conteúdo da entrada ca.crt
deve corresponder ao certificado da CA usada para gerar os certificados Vault TLS.
annotations: vault.hashicorp.com/agent-inject: "true" vault.hashicorp.com/role: "mongodbenterprise" vault.hashicorp.com/tls-secret: {TLSSecret} vault.hashicorp.com/ca-cert: /vault/tls/ca.crt
Defina a variável de ambiente no Kubernetes.
Adicione as seguintes linhas realçadas à seção spec.env
do seu arquivo de sistema do Kubernetes Operator. Para a maioria dos usuários, o nome desse arquivo é mongodb-enterprise.yaml
ou mongodb-enterprise-openshift.yaml
.
apiVersion: apps/v1 kind: Deployment metadata: name: mongodb-enterprise-operator namespace: production spec: env: - name: OPERATOR_ENV value: ENVIRONMENT_NAME - name: SECRET_BACKEND value: VAULT_BACKEND
Isso define a variável de ambiente para Vault no Kubernetes.
Crie um arquivo com as informações de configuração do Vault.
Usando seu aplicação de edição de texto preferido, crie um arquivo chamado config
. Cole o seguinte texto no arquivo:
apiVersion: v1 kind: ConfigMap metadata: name: secret-configuration namespace: {Namespace} data: VAULT_SERVER_ADDRESS: {VaultServerAddress} OPERATOR_SECRET_BASE_PATH: mongodbenterprise/operator DATABASE_SECRET_BASE_PATH: mongodbenterprise/database OPS_MANAGER_SECRET_BASE_PATH: mongodbenterprise/opsmanager APPDB_SECRET_BASE_PATH: mongodbenterprise/appdb
Os caminhos neste arquivo são os caminhos padrão. Você pode substituí-los por seus caminhos de base se tiver personalizado a configuração do Kubernetes Operator.
Se estiver executando o Vault no modo TLS , você também deverá adicionar a seguinte linha destacada ao arquivo:
OPS_MANAGER_SECRET_BASE_PATH: mongodbenterprise/opsmanager APPDB_SECRET_BASE_PATH: mongodbenterprise/appdb TLS_SECRET_REF: {TLSSecret}
Substitua os espaços reservados nas informações de configuração do Vault.
Substitua os espaços reservados no arquivo config
por estes valores. Salve o arquivo por um tipo de arquivo YAML substituindo a extensão de arquivo .txt
por .yaml
.
Espaço reservado | Descrição |
---|---|
{Namespace} | O namespace que você criou para o Operador Kubernetes. O namespace padrão é mongodb . |
{VaultServerAddress} | O endereço que o Kubernetes Operator deve usar para se conectar ao Vault. |
{TLSSecret} | Nome de um segredo contendo uma entrada ca.crt . O conteúdo da entrada ca.crt deve corresponder ao certificado da CA usada para gerar os certificados Vault TLS. |
Crie um ConfigMap com a configuração do Vault.
Emitir o seguinte comando para criar um ConfigMap contendo as informações do Vault:
kubectl create configmap secret-configuration --from-file=config.yaml
Isso cria um ConfigMap denominado secret-configuration
. Este ConfigMap contém o conteúdo do config
arquivo .
Migrar manualmente segredos que não migram automaticamente
Você deve migrar manualmente os seguintes segredos para armazená-los no Vault:
Qualquer segredo criado por usuário existente, incluindo credenciais de operador armazenadas como segredos do Kubernetes, se aplicável
As MongoDB Ops Manager credenciais de administrador/chave de administrador Kubernetes Operator criam
Segredos do TLS
Para migrar ou criar manualmente novos segredos, adicione-os ao Vault. Depois de adicioná-los ao Vault, você poderá removê-los do Kubernetes.
Todos os outros segredos que o Kubernetes Operator cria migram automaticamente, e o Kubernetes Operator usa o Vault para novos segredos. Os segredos criados pelo usuário devem ser adicionados ao Vault.
Observação
o cert-manager recria automaticamente os segredos do Kubernetes que ele gera se você excluí-los do Kubernetes. Você deve gerenciar manualmente a remoção desses segredos ou parar de usar o cert-manager para evitar o armazenamento dos segredos no Kubernetes.
Próximos passos
Depois de configurar a ferramenta de armazenamento secreto para o MongoDB Enterprise Kubernetes Operator, você pode:
Leia as considerações.
Conclua os pré- requisitos.