Menu Docs
Página inicial do Docs
/ / /
Driver GO
/

Mecanismos de autenticação empresarial

Nesta página

  • Visão geral
  • Autenticação no GSSAPI/Kerberos
  • Exemplo
  • Definir campos personalizados SERVICE_NAME e SERVICE_REALM
  • Autenticar no LDAP (PLAIN)
  • Exemplo
  • MONGODB-OIDC
  • IMDS do Azure
  • GCP IMDS
  • Chamada de resposta personalizada
  • Outros ambientes Azure
  • GCP GKE
  • Informações adicionais
  • Documentação da API

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:

  • GSSAPI/Kerberos

  • LDAP (Plain)

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 .

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

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 arquivo keytab para evitar expor sua senha no código.

  • connection uriSeu 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"

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.

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.

Este exemplo especifica o mecanismo de autenticação usando os seguintes espaços reservados:

  • LDAP username: Seu nome de usuário LDAP

  • password: Sua senha LDAP

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

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.

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étodo SetAuth() ao criar um cliente

  • Ao 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 mapa props 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 como MONGODB-OIDC.

  • authMechanismProperties: Defina como ENVIRONMENT:azure,TOKEN_RESOURCE:<audience>. Substitua o espaço reservado <audience> pelo valor do parâmetro audience 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 .

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étodo SetAuth() ao criar um cliente

  • Ao 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 mapa props 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 como MONGODB-OIDC.

  • authMechanismProperties: Defina como ENVIRONMENT:gcp,TOKEN_RESOURCE:<audience>. Substitua o espaço reservado <audience> pelo valor do parâmetro audience 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)
}

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)
}

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.

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)
}

Para saber mais sobre os conceitos deste guia, consulte a seguinte documentação:

Voltar

Mecanismos de autenticação