O Operador Kubernetes suporta OpenID Connect (OIDC) como um mecanismo de autenticação. Quando você configura a autenticação OIDC, os aplicativos do cliente apresentam um JSON web token (JSON web token) para o recurso MongoDB . O MongoDB valida o JSON web token em relação ao OIDC Identity Provider (IdP) configurado e usa declarações dentro do token para determinar a identidade do usuário e, opcionalmente, suas associações de grupo para mapeamento de funções.
Este guia descreve como configurar a autenticação OIDC para aplicativos cliente que se conectam às suas implementações do MongoDB usando o Kubernetes Operator.
Observação
Você não pode proteger uma instância standalone do MongoDB com OIDC em um cluster Kubernetes.
Considerações
Ao ativar a autenticação OIDC, considere o seguinte:
Fornecedores de identidade: você deve ter um fornecedor de identidade (IdP) OIDC pré-existente e configurado. O Operador Kubernetes não gerencia o IdP em si.
Autorização: o operador do Kubernetes configura a autenticação (verificação de identidade) via OIDC. A autorização (contribuição de permissões) é tratada pelo mapeamento de declarações OIDC para funções do MongoDB dentro do recurso personalizado do MongoDB .
Federação: o MongoDB oferece suporte ao Workload Identity Federation (para autenticação de máquina para máquina) e ao Workforce Identity Federation (para autenticação de usuário humano).
Criptografia TLS: para melhorar a segurança, é altamente recomendável implantar um conjunto de réplicas criptografadas por TLS ou um cluster fragmentado criptografado por TLS. Enquanto a comunicação OIDC com seu provedor de identidade é protegida por HTTPS, habilitar TLS em seu recurso MongoDB criptografa a conexão entre seu aplicação cliente e o banco de dados. Isso protege o token OIDC e todo o outro tráfego do banco de dados contra ataques de rede.
Pré-requisitos gerais
Antes de configurar a autenticação OIDC para seus sistemas MongoDB , conclua as seguintes tarefas:
Certifique-se de implementar o recurso de banco de dados MongoDB Enterprise . Os bancos de dados da MongoDB Community não suportam autenticação OIDC.
Implemente o conjunto de réplicas ou implemente o cluster fragmentado cuja autenticação de cliente você deseja proteger com o OpenID Connect.
Detalhes de configuração OIDC
Campo | Tipo e necessidade | Descrição | Exemplo |
| array de strings; necessário | Uma série de mecanismos de autenticação para habilitar. Deve incluir "OIDC" para habilitar a autenticação do OIDC. |
|
| corda; necessário | Um nome lógico exclusivo para esta configuração do provedor. Este nome é usado ao mapear papéis. |
|
| corda; necessário | O URI do endpoint de descoberta do provedor OIDC. |
|
| corda; necessário | O ID do cliente para o aplicação registrado com seu provedor OIDC. |
|
| corda; necessário | A reivindicação do público para o JSON web token. Deve corresponder ao público do token emitido pelo IdP. |
|
| corda; opcional | A reivindicação de token da web JSON que o MongoDB usa como nome de usuário. Padrão é |
|
| corda; opcional | A declaração de JSON web token que contém as associações de grupo do usuário. Obrigatório se |
|
| corda; necessário | O método de federação. Pode ser |
|
| corda; necessário | O modelo de autorização . Pode ser |
|
| array de strings; opcional | Uma lista de escopos adicionais a serem solicitados ao provedor OIDC. |
|
Noções básicas sobre os modelos de autorização OIDC
A configuração do OIDC no MongoDB combina dois conceitos-chave: o método de federação e o tipo de autorização.
Método de Federação (authorizationMethod
)
Esta configuração informa ao MongoDB sobre o tipo de identidade que está sendo autenticada.
WorkforceIdentityFederation
: Use isso para usuários humanos. Esse método é destinado a pessoas que fazem login em sistemas, como desenvolvedores, analistas ou administradores que se autenticam por meio de um IdP.WorkloadIdentityFederation
: use isso para aplicativos ou serviços (ou seja, comunicação máquina a máquina). Esse método é para identidades não humanos, como um microsserviço, um tarefa em lote ou um script de automação que precisa se conectar ao banco de dados.
Tipo de autorizaçãoauthorizationType
()
Esta configuração define como o MongoDB deve conceder permissões depois que um usuário ou serviço é autenticado.
GroupMembership
: essa é a abordagem mais comum e escalável. Com este tipo, o MongoDB utiliza uma declaração específica no JSON web token (definido porgroupsClaim
) que contém uma lista de grupos aos quais o usuário pertence. Em seguida, mapeie esses nomes de grupo para as funções do MongoDB . Requer quegroupsClaim
seja definido.UserID
: Com esse tipo, o MongoDB usa uma declaração que identifica exclusivamente o usuário (definido pelouserClaim
, que padroniza parasub
). Em seguida, mapeie esse ID do usuário individual específico para um MongoDBUser (você precisa criá-lo separadamente). Isso é mais granular e é útil para conceder permissões a um único usuário ou a uma identidade de serviço específica sem usar grupos.
Gerenciamento de funções e permissões do OIDC
Depois de configurar um provedor OIDC, você deve conceder permissões. O método que você usa para fazer isso depende do authorizationType
que você selecionou.
Método 1: mapeamento de função para associação a grupos
Se você usar authorizationType: GroupMembership
, concederá permissões adicionando mapeamentos de função à array spec.security.roles
em seu recurso MongoDB . O campo role deve ser formatado como <configurationName>/<groupNameFromToken>
.
roles: - role: "idp-human-users/app-devs" # Maps the "app-devs" group from the IdP db: "admin" roles: - role: "readWrite" db: "app-data"
Método 2: criação de usuário para UserID
Se você usar authorizationType: UserID
, deverá criar um recurso MongoDBUser
separado para conceder permissões.
Para saber mais, consulte Autenticação e autorização com OIDC/OAuth 2.0.
Configurar autenticação de cliente OIDC para um conjunto de réplicas Multi-Kubernetes-Cluster
Siga estas etapas para configurar o OIDC para um conjunto de réplicas. Para obter exemplos adicionais, consulte Autenticação segura de cliente com OIDC.
Adicione as configurações de autenticação do OIDC.
No seu arquivo de definição, modifique a seção spec.security
. Escolha um ou mais dos exemplos a seguir com base no seu caso de uso. Você pode combinar várias configurações de fornecedor na array oidcProviderConfigs
.
Exemplo A: Federação da Força de Trabalho com Associação de Grupo
Use isso para autenticar usuários humanos com base em sua associação a grupos em seu IdP. Este é o modelo mais comum para gerenciar equipes de usuários.
apiVersion: mongodb.com/v1 kind: MongoDBMultiCluster metadata: name: my-multi-cluster-oidc-replicaset spec: type: ReplicaSet members: 3 version: 7.0.11-ent opsManager: configMapRef: name: <my-project-configmap> credentials: <my-credentials-secret> security: authentication: modes: ["SCRAM", "OIDC"] oidcProviderConfigs: - configurationName: "idp-human-users" issuerURI: "https://<your-idp-domain>" clientId: "<your-client-id>" audience: "api://default" groupsClaim: "groups" authorizationMethod: "WorkforceIdentityFederation" authorizationType: "GroupMembership" roles: - role: "idp-human-users/app-devs" db: "admin" roles: - role: "readWrite" db: "app-data" clusterSpecList: - clusterName: ${MDB_CLUSTER_1_FULL_NAME} members: 3 - clusterName: ${MDB_CLUSTER_2_FULL_NAME} members: 2 - clusterName: ${MDB_CLUSTER_3_FULL_NAME} members: 3
Solução de problemas do OIDC
- Validar manualmente o token JSON web token: Use uma ferramenta para decodificar o token OIDC.
Declarações principais: certifique-se de que as declarações
iss
(emissor) eaud
(audiência) no token correspondam exatamente à configuração do provedor de OIDC. Verifique se o token não expirou (declaraçãoexp
).Declarações de usuário/grupo esperadas: verifique se as declarações esperadas para identidade de usuário (
userClaim
) e grupos (groupsClaim
) estão presentes no token e contêm os valores corretos.
Verificar Formato de Nome de Usuário para Autenticação do UserID: O nome de usuário
MongoDBUser
deve estar no formato exato<configurationName>/<userClaimValue>
. O<configurationName>
deve corresponder ao nome do provedor OIDC em seu recurso doMongoDB
.Confirmar que o banco de dados $external é usado: para autorização
UserID
, o recursoMongoDBUser
deve especificardb: "$external"
. Os usuários autenticados por uma fonte externa são sempre resolvidos por meio desse banco de dados virtual.Verificar mapeamento de função de grupo para autenticação do GroupMembership: verifique se a função definida na seção
spec.security.roles
do recurso do MongoDB está formatada corretamente como<configurationName>/<groupName>
, onde<groupName>
corresponde exatamente a um grupo nogroupsClaim
do JSON web token.Validar permissões de função atribuídas: verifique se as funções do MongoDB atribuídas ao usuário ou grupo do OIDC realmente concedem as permissões necessárias (por exemplo,
readWrite
no banco de dados correto).Verificar Referência do Recurso MongoDBUser: Para autorização do
UserID
, certifique-se de que ospec.mongodbResourceRef.name
no recursoMongoDBUser
aponte corretamente para o nome do seu sistema doMongoDB
.