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
/ / /
Driver GO
/ /

Mecanismo de autenticação 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 Parâmetros do MongoDB Server no manual do MongoDB Server.

Se o seu aplicação for executado em uma VM do Azure ou de outra forma usar o Azure Instance Metadata Service (IMDS), você poderá autenticar no MongoDB usando o suporte integrado do Azure driver Go.

Você pode configurar o OIDC para o Azure IMDS das seguintes maneiras:

  • Criando uma estrutura Credential e passando-a 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.

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

  • 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(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 a sua aplicação é executada numa VM do Google Compute Engine ou utiliza 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(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(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(opts)
if err != nil {
panic(err)
}

Se a sua aplicação for executada no Azure Functions, App Service Environment (ASE) ou Azure Kubernetes Service (AKS), você poderá usar o módulo azidentity 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 seu aplicação for executado em um cluster GCP do Google Kubernetes Engine (GKE) com uma conta de serviço configurada, você poderá ler o token OIDC a partir do local padrão do arquivo de token de 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(opts)
if err != nil {
panic(err)
}

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

Voltar

AWS IAM

Nesta página