Mecanismos de autenticação empresarial
Nesta página
Visão geral
Neste guia, você aprenderá como autenticar no MongoDB usando os mecanismos de autenticação disponíveis no MongoDB Enterprise Edition. Os mecanismos de autenticação são processos pelos quais o driver e o servidor confirmam a identidade de um cliente para garantir maior segurança antes de se conectar.
Você pode usar os seguintes mecanismos de autenticação com a versão mais recente do MongoDB Enterprise Edition:
Para autenticar usando outro mecanismo, consulte a página de fundamentos do Autenticação Mecanismos . Para saber mais sobre como estabelecer uma conexão com seu Cluster MongoDB , consulte o Guia de Conexão.
Você pode especificar seu mecanismo de autenticação e credenciais ao se conectar ao MongoDB por meio dos seguintes métodos:
Usando um URI de string de conexão. Para saber mais sobre como usar um URI de string de conexão para autenticação empresarial, consulte a entrada manual do servidor em URIs de string.
Especificar credenciais e um mecanismo de autenticação no tipo
Credential
.
Autenticação no GSSAPI/Kerberos
O mecanismo de autenticação GSSAPI (Generic Security Services API) permite que o usuário autentique em um serviço Kerberos usando a entidade de segurança do usuário.
Você deve usar a tag de construção gssapi
e especificar o suporte cgo durante a compilação para usar a autenticação Kerberos. O suporte cgo
é habilitado por padrão, a menos que você defina anteriormente variáveis de ambiente para compilação cruzada em uma plataforma diferente. Para usar a tag de construção gssapi
, compile seu código com o seguinte comando:
go build -tags gssapi
Exemplo
Este exemplo especifica o mecanismo de autenticação usando os seguintes espaços reservados:
Kerberos principal
: Seu principal Kerberos. Um exemplo de nome de usuário émyuser@KERBEROS.EXAMPLE.COM
.password
: A senha do usuário Kerberos. Você também pode armazenar sua senha em um arquivokeytab
para evitar expor sua senha no código.connection uri
Seu URI da cadeia de conexão.
O código a seguir mostra como você pode definir uma estrutura Credential
para se autenticar no Kerberos e criar um cliente com suas preferências de autenticação:
credential := options.Credential{ AuthMechanism: "GSSAPI", Username: "<Kerberos principal>", Password: "<password>", PasswordSet: true, } uri := "<connection uri>" clientOpts := options.Client().ApplyURI(uri).SetAuth(credential) client, err := mongo.Connect(context.TODO(), clientOpts)
Você não precisa definir uma senha nem o campo PasswordSet
em sua estrutura Credential
se armazenar chaves de autenticação em arquivos keytab
. Você pode inicializar um cache de credenciais para autenticar a entidade Kerberos utilizando o binário kinit
. Para saber mais sobre o kinit
binário, consulte a documentação da Oracle.
O comando a seguir mostra como você pode chamar um cache de credenciais para um exemplo de nome de usuário:
kinit myuser@KERBEROS.EXAMPLE.COM
Como alternativa, é possível se autenticar usando uma URI de string de conexão especificando a entidade Kerberos codificada por URL, a senha, o hostname
e o endereço de rede do servidor MongoDB:
uri := "mongodb://<Kerberos principal>:<password>@<hostname>/?authMechanism=GSSAPI"
SERVICE_NAME
Definir SERVICE_REALM
campos personalizados e
Você pode especificar propriedades adicionais com seu mecanismo de autenticação usando o campo AuthMechanismProperties
na estrutura Credential
. O nome de serviço padrão para Kerberos é "mongodb". O código a seguir mostra como você pode definir valores personalizados para os campos SERVICE_NAME
e SERVICE_REALM
ao definir uma estrutura Credential
:
credential := options.Credential{ AuthMechanism: "GSSAPI", Username: "<Kerberos principal>", Password: "<password>", AuthMechanismProperties: map[string]string{ "SERVICE_REALM": "<Kerberos service realm>", "SERVICE_NAME": "<service name>", }, }
Para mais informações sobre propriedades adicionais, consulte a entrada manual do servidor sobre propriedades de autenticação.
Autenticar no LDAP (PLAIN)
Você pode autenticar em um servidor LDAP (Lightweight Directory Access Protocol) usando seu nome de usuário e senha do servidor de diretórios.
Aviso
Esse mecanismo de autenticação envia a senha para o servidor em texto simples, portanto, use esse mecanismo somente com conexões TLS.
Exemplo
Este exemplo especifica o mecanismo de autenticação usando os seguintes espaços reservados:
LDAP username
: Seu nome de usuário LDAPpassword
: Sua senha LDAPconnection uri
: Seu URI da cadeia de conexão
O código a seguir mostra como você pode definir uma estrutura Credential
para se autenticar no LDAP e criar um cliente com suas preferências de autenticação:
credential := options.Credential{ AuthMechanism: "PLAIN", Username: "<LDAP username>", Password: "<password>", } uri := "<connection uri>" clientOpts := options.Client().ApplyURI(uri).SetAuth(credential) client, err := mongo.Connect(context.TODO(), clientOpts)
Como alternativa, você pode autenticar usando uma URI de string de conexão, especificando seu nome de usuário LDAP, senha e hostname
, o endereço de rede do seu servidor MongoDB:
uri := "mongodb://<LDAP username>:<password>@<hostname>/?authMechanism=PLAIN"
Observação
O método refere-se a PLAIN em vez de LDAP, pois ele autentica usando o PLAIN Simple Authentication and Security Layer (SASL) definido em RFC-4616.
MONGODB-OIDC
Importante
O mecanismo de autenticação MONGODB-OIDC requer MongoDB Server v7.0 ou posterior em execução em uma plataforma Linux.
O driver Go suporta autenticação OpenID Connect (OIDC) para identidades de volume de trabalho. Uma identidade de carga de trabalho é uma identidade que você atribui a uma carga de trabalho de software, como um aplicação, serviço, script ou contêiner, para autenticar e acessar outros serviços e recursos.
As seções a seguir descrevem como usar o mecanismo de autenticação MONGODB-OIDC para autenticar em várias plataformas.
Para saber mais sobre o mecanismo de autenticação MONGODB-OIDC, consulte Autenticação do OpenID Connect e MongoDB Server do MongoDB Server no manual do Servidor MongoDB.
IMDS do Azure
Se seu aplicação for executado em uma VM do Azure ou usar o Serviço de Metadados de Instância do Azure (IMDS), você pode autenticar no MongoDB usando o suporte Azure integrado do driver Go.
Você pode configurar o OIDC para o Azure IMDS das seguintes maneiras:
Ao criar uma estrutura
Credential
e passá-la para o métodoSetAuth()
ao criar um clienteAo definir parâmetros em sua string de conexão
Observação
Se os valores do campo de estrutura AuthMechanismProperties
incluírem uma vírgula, você deverá criar uma instância Credential
para definir suas opções de autenticação.
Primeiro, crie um mapa para armazenar as propriedades do mecanismo de autenticação , conforme mostrado no exemplo a seguir. Substitua o espaço reservado <audience>
pelo valor do parâmetro audience
configurado em sua deployment do MongoDB .
props := map[string]string{ "ENVIRONMENT": "azure", "TOKEN_RESOURCE": "<audience>", }
Em seguida, defina os seguintes campos de estrutura Credential
:
Username
: Se você estiver usando uma identidade gerenciada pelo Azure, defina para a ID do cliente da identidade gerenciada. Se você estiver usando um principal de serviço para representar um aplicativo empresarial, defina para o ID do aplicativo do principal de serviço.AuthMechanism
: Defina como"MONGODB-OIDC"
.AuthMechanismProperties
: Defina para o mapaprops
que você criou anteriormente.
O seguinte exemplo de código mostra como definir estas opções ao criar um Client
:
uri := "mongodb://<hostname>:<port>" props := map[string]string{ "ENVIRONMENT": "azure", "TOKEN_RESOURCE": "<audience>", } opts := options.Client().ApplyURI(uri) opts.SetAuth( options.Credential{ Username: "<Azure client ID or application ID>", AuthMechanism: "MONGODB-OIDC", AuthMechanismProperties: props, }, ) client, err := mongo.Connect(context.TODO(), opts) if err != nil { panic(err) }
Inclua as seguintes opções de conexão em sua connection string:
username
: Se você estiver usando uma identidade gerenciada pelo Azure, defina para a ID do cliente da identidade gerenciada. Se você estiver usando um principal de serviço para representar um aplicativo empresarial, defina para o ID do aplicativo do principal de serviço.authMechanism
: Defina comoMONGODB-OIDC
.authMechanismProperties
: Defina comoENVIRONMENT:azure,TOKEN_RESOURCE:<audience>
. Substitua o espaço reservado<audience>
pelo valor do parâmetroaudience
configurado em sua deployment do MongoDB .
O exemplo de código a seguir mostra como definir essas opções em sua string de conexão:
uri := "mongodb://<hostname>:<port>/?" + "username=<Azure client ID or application ID>" + "&authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:<percent-encoded audience>" client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(uri)) if err != nil { panic(err) }
Dica
Se seu aplicativo estiver em execução em uma VM do Azure e somente uma identidade gerenciada estiver associada à VM, você poderá omitir a opção de conexão username
.
GCP IMDS
Se seu aplicação é executado em uma VM do Google Compute Engine ou usa o Serviço de Metadados de Instância GCP, você pode autenticar no MongoDB usando o suporte GCP integrado do driver Go.
Você pode configurar o OIDC para o GCP IMDS das seguintes maneiras:
Ao criar uma estrutura
Credential
e passá-la para o métodoSetAuth()
ao criar um clienteAo definir parâmetros em sua string de conexão
Observação
Se os valores do campo de estrutura AuthMechanismProperties
incluírem uma vírgula, você deverá criar uma instância Credential
para definir suas opções de autenticação.
Primeiro, crie um mapa para armazenar as propriedades do mecanismo de autenticação , conforme mostrado no exemplo a seguir. Substitua o espaço reservado <audience>
pelo valor do parâmetro audience
configurado em sua deployment do MongoDB .
props := map[string]string{ "ENVIRONMENT": "gcp", "TOKEN_RESOURCE": "<audience>", }
Em seguida, defina os seguintes campos de estrutura Credential
:
AuthMechanism
: Defina como"MONGODB-OIDC"
.AuthMechanismProperties
: Defina para o mapaprops
que você criou anteriormente.
O seguinte exemplo de código mostra como definir estas opções ao criar um Client
:
uri := "mongodb://<hostname>:<port>" props := map[string]string{ "ENVIRONMENT": "gcp", "TOKEN_RESOURCE": "<audience>", } opts := options.Client().ApplyURI(uri) opts.SetAuth( options.Credential{ AuthMechanism: "MONGODB-OIDC", AuthMechanismProperties: props, }, ) client, err := mongo.Connect(context.TODO(), opts) if err != nil { panic(err) }
Inclua as seguintes opções de conexão em sua connection string:
authMechanism
: Defina comoMONGODB-OIDC
.authMechanismProperties
: Defina comoENVIRONMENT:gcp,TOKEN_RESOURCE:<audience>
. Substitua o espaço reservado<audience>
pelo valor do parâmetroaudience
configurado em sua deployment do MongoDB .
O exemplo de código a seguir mostra como definir essas opções em sua string de conexão:
uri := "mongodb://<hostname>:<port>/?" + "&authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:<percent-encoded audience>" client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(uri)) if err != nil { panic(err) }
Chamada de resposta personalizada
O driver Go não oferece suporte integrado para todas as plataformas, incluindo o Amazon Web Services Elastic Kubernetes Service (EKS). Para autenticar em plataformas não suportadas, você deve definir uma função de chamada de resposta de chamada personalizada para usar o OIDC para autenticar. No driver, você pode definir uma função options.OIDCCallback
e defini-la como o valor do campo de estrutura OIDCMachineCallback
em sua estrutura Credential
.
O exemplo a seguir define um retorno de chamada de resposta personalizado para um cluster EKS com um fornecedor IAM OIDC configurado. O token de acesso é lido a partir de um caminho definido na variável de ambiente AWS_WEB_IDENTITY_TOKEN_FILE
:
eksCallback := func(_ context.Context, _ *options.OIDCArgs) (*options.OIDCCredential, error) { accessToken, err := os.ReadFile( os.Getenv("AWS_WEB_IDENTITY_TOKEN_FILE")) if err != nil { return nil, err } return &options.OIDCCredential{ AccessToken: string(accessToken), }, nil }
Em seguida, você pode criar uma estrutura Credential
que use a função de chamada de resposta de resposta EKS definida por você:
uri := "mongodb://<hostname>:<port>" opts := options.Client().ApplyURI(uri) opts.SetAuth( options.Credential{ AuthMechanism: "MONGODB-OIDC", OIDCMachineCallback: eksCallback, }, ) client, err := mongo.Connect(context.TODO(), opts) if err != nil { panic(err) }
Outros ambientes Azure
Se o seu aplicação for executado no Azure Functions, App Service Environment (ASE) ou Azure Kubernetes Service (AKS), você pode usar a azidentity módulo para buscar credenciais de autenticação.
Primeiro, instale o módulo azidentity
executando o seguinte comando:
go get -u github.com/Azure/azure-sdk-for-go/sdk/azidentity
Sua função OIDCCallback
deve retornar uma instância OIDCCredential
que utilize o AccessToken
gerado a partir do pacote azidentity
. Consulte a seção anterior Chamada de resposta personalizada para obter um exemplo que implementa uma chamada de resposta de resposta personalizada para recuperar um token de acesso e, em seguida, cria um Credential
.
GCP GKE
Se o seu aplicação for executado em um cluster GCP do Google Kubernetes Engine (GKE) com uma conta de serviço configurada, você pode ler o token OIDC a partir do local padrão do arquivo de token da conta de serviço.
Primeiro, defina a função OIDCCallback
. Esta função lê o token OIDC e retorna uma instância do OIDCCredential
.
O exemplo seguinte define uma função de chamada de resposta de chamada denominada gkeCallback
. A função recupera um token OIDC de um arquivo no local padrão do arquivo de token da conta de serviço:
gkeCallback := func(_ context.Context, _ *options.OIDCArgs) (*options.OIDCCredential, error) { accessToken, err := os.ReadFile( "/var/run/secrets/kubernetes.io/serviceaccount/token") if err != nil { return nil, err } return &options.OIDCCredential{ AccessToken: string(accessToken), }, nil }
Em seguida, você pode criar uma estrutura Credential
que use a função de chamada de resposta de chamada do GKE definida:
uri := "mongodb://<hostname>:<port>" opts := options.Client().ApplyURI(uri) opts.SetAuth( options.Credential{ AuthMechanism: "MONGODB-OIDC", OIDCMachineCallback: gkeCallback, }, ) client, err := mongo.Connect(context.TODO(), opts) if err != nil { panic(err) }
Informações adicionais
Para saber mais sobre os conceitos deste guia, consulte a seguinte documentação:
Documentação da API
Tipo de Credencial
SetAuth() método
OIDCCredential tipo
OIDCCallback função