Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Menu Docs
Página inicial do Docs
/
Controladores MongoDB para operador Kubernetes
/ /

Autenticação segura de cliente com OIDC

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.

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.

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.

Campo

Tipo e necessidade

Descrição

Exemplo

spec.security.authentication.modes

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.

["SCRAM", "OIDC"]

spec.security.authentication.oidcProviderConfigs.configurationName

corda; necessário

Um nome lógico exclusivo para esta configuração do provedor. Este nome é usado ao mapear papéis.

"example-provider"

spec.security.authentication.oidcProviderConfigs.issuerURI

corda; necessário

O URI do endpoint de descoberta do provedor OIDC.

"https://dev-12345.provider.com"

spec.security.authentication.oidcProviderConfigs.clientId

corda; necessário

O ID do cliente para o aplicação registrado com seu provedor OIDC.

"0oa1b2c3d4e5f6g7h8"

spec.security.authentication.oidcProviderConfigs.audience

corda; necessário

A reivindicação do público para o JSON web token. Deve corresponder ao público do token emitido pelo IdP.

"api://default"

spec.security.authentication.oidcProviderConfigs.userClaim

corda; opcional

A reivindicação de token da web JSON que o MongoDB usa como nome de usuário. Padrão é sub.

"sub"

spec.security.authentication.oidcProviderConfigs.groupsClaim

corda; opcional

A declaração de JSON web token que contém as associações de grupo do usuário. Obrigatório se authorizationType for GroupMembership.

"groups"

spec.security.authentication.oidcProviderConfigs.authorizationMethod

corda; necessário

O método de federação. Pode ser WorkloadIdentityFederation ou WorkforceIdentityFederation.

"WorkforceIdentityFederation"

spec.security.authentication.oidcProviderConfigs.authorizationType

corda; necessário

O modelo de autorização . Pode ser UserID ou GroupMembership.

"GroupMembership"

spec.security.authentication.oidcProviderConfigs.requestedScopes

array de strings; opcional

Uma lista de escopos adicionais a serem solicitados ao provedor OIDC.

["openid", "profile", "groups"]

A configuração do OIDC no MongoDB combina dois conceitos-chave: o método de federação e o tipo de autorização.

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.

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 por groupsClaim) 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 que groupsClaim seja definido.

  • UserID: Com esse tipo, o MongoDB usa uma declaração que identifica exclusivamente o usuário (definido pelo userClaim, que padroniza para sub). Em seguida, mapeie esse ID do usuário individual específico para um MongoDBUser (você precisa criar o MongoDBUser 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.

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.

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"

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.

Siga estas etapas para configurar o OIDC para um conjunto de réplicas.

1

Se você tiver um arquivo de definição de conjunto de réplica existente, abra-o. Caso contrário, você pode copiar todos os exemplos de trabalho abaixo.

2

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: MongoDB
metadata:
name: my-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"

Exemplo B: federação de volume de trabalho com UserID

Use isso para autenticar um aplicação ou serviço com uma identidade específica. Isso é ideal para contas de serviço.

apiVersion: mongodb.com/v1
kind: MongoDB
metadata:
name: my-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: "billing-service-auth"
issuerURI: "https://<your-idp-uri>"
clientId: "<billing-service-client-id>"
audience: "mongodb-api"
userClaim: "sub"
authorizationMethod: "WorkloadIdentityFederation"
authorizationType: "UserID"

Observação

Observação: para conceder permissões para essa identidade, você também deve criar um recurso MongoDBUser. O nome de usuário nesse recurso deve ser definido como billing-service-auth/<user-subject-from-jwt>.

Para saber mais, consulte Gerenciar usuários do banco de dados usando a autenticação OIDC.

Exemplo C: Federação da força de trabalho com UserID

Use isso para conceder permissões exclusivas a um usuário humano específico não coberto por suas associações a grupos.

apiVersion: mongodb.com/v1
kind: MongoDB
metadata:
name: my-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-special-user"
issuerURI: "https://<your-idp-domain>"
clientId: "<your-client-id>"
audience: "api://default"
userClaim: "sub"
authorizationMethod: "WorkforceIdentityFederation"
authorizationType: "UserID"

Observação

Observação: para conceder permissões para essa identidade, você também deve criar um recurso MongoDBUser. O nome de usuário nesse recurso deve ser definido como billing-service-auth/<user-subject-from-jwt>.

Para saber mais, consulte Gerenciar usuários do banco de dados usando a autenticação OIDC.

Exemplo D: Federação de volume de trabalho com associação de grupo

Use isso para autenticar um grupo de serviços ou aplicativos relacionados que exigem as mesmas permissões.

apiVersion: mongodb.com/v1
kind: MongoDB
metadata:
name: my-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: "reporting-services"
issuerURI: "https://<your-idp-uri>"
clientId: "<reporting-services-client-id>"
audience: "mongodb-api"
groupsClaim: "service-roles"
authorizationMethod: "WorkloadIdentityFederation"
authorizationType: "GroupMembership"
roles:
- role: "reporting-services/report-generators"
db: "admin"
roles:
- role: "read"
db: "sales-data"
3
kubectl apply -f <your-replica-set-file>.yaml
4
kubectl get mdb <resource-name> -o yaml -w

Use o exemplo a seguir para configurar o OIDC para um cluster fragmentado. Os princípios e opções de configuração são idênticos a um conjunto de réplicas.

apiVersion: mongodb.com/v1
kind: MongoDB
metadata:
name: my-oidc-shardedcluster
spec:
type: ShardedCluster
shardCount: 2
mongodsPerShardCount: 3
mongosCount: 2
configServerCount: 3
version: 7.0.11-ent
opsManager:
configMapRef:
name: <my-project-configmap>
credentials: <my-credentials-secret>
security:
authentication:
modes: ["SCRAM", "OIDC"]
oidcProviderConfigs:
# Provider 1: For human users (Workforce/Group)
- configurationName: "idp0-human-users"
issuerURI: "https://<your-idp0-domain>"
clientId: "<human-users-client-id>"
audience: "api://default"
groupsClaim: "groups"
authorizationMethod: "WorkforceIdentityFederation"
authorizationType: "GroupMembership"
# Provider 2: For service accounts (Workload/UserID)
- configurationName: "service-accounts"
issuerURI: "https://<your-idp-uri>"
clientId: "<services-client-id>"
audience: "mongodb-api"
userClaim: "sub"
authorizationMethod: "WorkloadIdentityFederation"
authorizationType: "UserID"
roles:
# Role mapping for the human user group
- role: "idp0-human-users/db-admins"
db: "admin"
roles:
- role: "readWriteAnyDatabase"
db: "admin"
  • 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) e aud (audiência) no token correspondam exatamente à configuração do provedor de OIDC. Verifique se o token não expirou (declaração exp).

    • 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 do MongoDB.

  • Confirmar que o banco de dados $external é usado: para autorização UserID, o recurso MongoDBUser deve especificar db: "$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 no groupsClaim 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 o spec.mongodbResourceRef.name no recurso MongoDBUser aponte corretamente para o nome do seu sistema do MongoDB.