Autenticar e se conectar a um banco de dados
Nesta página, descrevemos como autenticar e se conectar ao seu banco de dados do Firestore com compatibilidade com o MongoDB.Requisitos de conexão
Os seguintes itens são necessários para clientes do Firestore com compatibilidade com o MongoDB:
- Os motoristas precisam se conectar no modo
load balanced
. Isso impede que os drivers tentem entender a topologia exata do servidor a que estão se conectando. - Os drivers precisam se conectar com o SSL ativado.
- Os drivers precisam desativar as gravações repetíveis. No momento, o Firestore com compatibilidade com o MongoDB não oferece suporte a gravações que podem ser repetidas.
Recuperar a string de conexão
A string de conexão do banco de dados depende do UID do banco de dados, da localização do banco de dados e do mecanismo de autenticação. As instruções a seguir descrevem como a string de conexão é formada.
A string de conexão exata depende do mecanismo de autenticação, mas a string de conexão básica usa o seguinte formato:
mongodb://UID.LOCATION.firestore.goog:443/DATABASE_ID?loadBalanced=true&tls=true&retryWrites=false
É possível conseguir a string de conexão básica de uma das seguintes maneiras:
Console
-
No console do Google Cloud , acesse a página Bancos de dados.
- Na lista de bancos de dados, clique no ID do banco de dados relevante.
- O painel Explorer mostra a string de conexão básica. Copie e use essa string de conexão para se conectar ao banco de dados.
gcloud
Use gcloud firestore database describe
para recuperar o UID e as informações de local:
gcloud firestore databases describe \ --database=DATABASE_ID \ --format='yaml(locationId, uid)'
Substitua DATABASE_ID pelo ID do banco de dados.
A saída inclui o local e o UID do banco de dados. Use essas informações para construir a string de conexão básica.
Use a string de conexão básica e um dos seguintes métodos para autenticar e se conectar ao banco de dados:
- Nome de usuário e senha (SCRAM)
- Conta de serviço do Compute Engine
- Biblioteca de autenticação do Google
Conectar com nome de usuário e senha (SCRAM)
Siga estas etapas para criar uma credencial de usuário para seu banco de dados e se conectar a ele.
Antes de começar
Para receber as permissões necessárias para criar um usuário,
peça ao administrador para conceder a você o
papel do IAM userCredsAdmin (roles/datastore.userCredsAdmin
)
no seu banco de dados.
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.
Criar um usuário e se conectar a um banco de dados
Para criar um usuário para seu banco de dados do Firestore com compatibilidade com o MongoDB, use um dos seguintes métodos:
Google Cloud console
-
No console do Google Cloud , acesse a página Bancos de dados.
- Selecione um banco de dados na lista.
- No menu de navegação, clique em Auth.
- Clique em Adicionar usuário.
- Digite um Nome de usuário.
- Selecione uma função para o novo usuário.
-
Clique em Adicionar.
A senha do novo usuário vai aparecer na caixa de diálogo de confirmação.
CLI da gcloud
-
Para autenticar com SCRAM,
primeiro crie uma credencial de usuário. Use o comando
gcloud alpha firestore user-creds
: Substitua o seguinte:gcloud alpha firestore user-creds create USERNAME --database=DATABASE_ID
- USERNAME: o nome de usuário a ser criado.
- DATABASE_ID: o ID do banco de dados.
A saída desse comando inclui a senha do usuário.
A saída será assim:
name: projects/PROJECT_NAME/databases/DATABASE_ID/userCreds/USERNAME resourceIdentity: principal: principal://firestore.googleapis.com/projects/PROJECT_NUMBER/name/databases/DATABASE_ID/userCreds/USERNAME securePassword: PASSWORD
-
Por padrão, essa nova credencial de usuário não tem permissões. Para acesso de leitura e gravação ao banco de dados, adicione a função
roles/datastore.user
a esse banco de dados específico: Substitua o seguinte:gcloud projects add-iam-policy-binding PROJECT_NAME \ --member='principal://firestore.googleapis.com/projects/PROJECT_NUMBER/name/databases/DATABASE_ID/userCreds/USERNAME' \ --role=roles/datastore.user \ --condition='expression=resource.name == "projects/PROJECT_NAME/databases/DATABASE_ID",title="CONDITION_TITLE"'
- PROJECT_NAME: o nome do projeto.
- PROJECT_NUMBER: o número do projeto.
- DATABASE_ID: o ID do banco de dados.
- USERNAME: o nome de usuário que você criou anteriormente.
- CONDITION_TITLE: um título para essa condição. Essa condição restringe o acesso apenas a esse banco de dados.
Use a seguinte string de conexão para se conectar ao banco de dados com SCRAM:
mongodb://USERNAME:PASSWORD@UID.LOCATION.firestore.goog:443/DATABASE_ID?loadBalanced=true&authMechanism=SCRAM-SHA-256&tls=true&retryWrites=false
Substitua:
- USERNAME: o nome de usuário.
- PASSWORD: a senha gerada para esse usuário.
- UID: o UID do banco de dados.
- LOCATION: o local do banco de dados.
- DATABASE_ID: o ID do banco de dados.
Conectar-se à biblioteca de autenticação do Google
A exemplo de código a seguir registra um manipulador de callback do OIDC e usa a Google Cloud biblioteca OAuth padrão.
Com ela, é possível usar vários tipos diferentes de autenticação (Application Default Credentials, federação de identidade da carga de trabalho).
Isso exige adicionar a biblioteca de autenticação como uma dependência:
// Maven
<dependency>
<groupId>com.google.auth</groupId>
<artifactId>google-auth-library-oauth2-http</artifactId>
<version>1.19.0</version>
</dependency>
// Gradle
implementation 'com.google.auth:google-auth-library-oauth2-http:1.19.0'
O exemplo de código a seguir demonstra como se conectar:
val db = MongoClients.create( clientSettings( "DATABASE_UID", "LOCATION" ).build() ).getDatabase("DATABASE_ID") /** * Creates a connection to a Firestore with MongoDB Compatibility database. * @param databaseUid The uid of the database to connect to as a string. For example: f116f93a-519c-208a-9a72-3ef6c9a1f081 * @param locationId The location of the database to connect to, for example: nam5, us-central1, us-east4 etc... * @param environment Determines whether to try and fetch an authentication credential from the * Compute Engine VM metadata service or whether to call gcloud. */ private static MongoClientSettings.Builder clientSettings( String databaseUid: String String locationId:String ): MongoClientSettings.Builder { MongoCredential credential = MongoCredential.createOidcCredential(null) .withMechanismProperty( MongoCredential.OIDC_CALLBACK_KEY, new MongoCredential.OidcCallback() { @Override MongoCredential.OidcCallbackResult onRequest( MongoCredential.OidcCallbackContext context) { // Customize this credential builder for additional credential types. GoogleCredentials credentials = GoogleCredentials.getApplicationDefault(); return new MongoCredential.OidcCallbackResult( credentials.getAccessToken().getTokenValue(), Duration.between(Instant.now(), credentials.getAccessToken().getExpirationTime().toInstant())); } }, ); return MongoClientSettings.builder() .hosts(listOf(ServerAddress( "$databaseUid.$locationId.firestore.goog", 443))) .credential(credential) .applyToClusterSettings(builder -> builder.mode(ClusterConnectionMode.LOAD_BALANCED)) ).applyToSslSettings(ssl -> ssl.enabled(true)); }
Substitua:
- DATABASE_UID: o nome do projeto.
- LOCATION: o local do banco de dados.
- DATABASE_ID o ID do banco de dados.
Conectar-se de uma VM do Compute Engine
É possível autenticar e se conectar ao banco de dados usando uma conta de serviço do Compute Engine. Para isso, crie uma política do IAM para o projeto Google Cloud que contém seu banco de dados.
Antes de começar
Configure uma conta de serviço gerenciado pelo usuário para sua VM:
- Para configurar a conta de serviço durante a criação da VM, consulte Criar uma VM que usa uma conta serviço gerenciado pelo usuário.
- Para configurar a conta de serviço em uma VM atual, consulte Alterar a conta de serviço anexada.
Anote o e-mail da sua conta de serviço.
Configurar credenciais
Para conceder à conta de serviço o papel roles/datastore.user
de leitura e gravação
no Firestore, execute o seguinte comando:
gcloud projects add-iam-policy-binding PROJECT_NAME --member="SERVICE_ACCOUNT_EMAIL" --role=roles/datastore.user
Substitua:
- PROJECT_NAME: o nome do projeto.
- SERVICE_ACCOUNT_EMAIL: o endereço de e-mail da conta de serviço que você criou.
Construir a string de conexão
Use o seguinte formato para criar a string de conexão:
mongodb://DATABASE_UID.LOCATION.firestore.goog:443/DATABASE_ID?loadBalanced=true&tls=true&retryWrites=false&authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:FIRESTORE
Substitua:
- DATABASE_UID: o nome do projeto.
- LOCATION: o local do banco de dados.
- DATABASE_ID o ID do banco de dados.
Para mais informações sobre como recuperar o UID e o local, consulte Recuperar a string de conexão.
Conectar com um token de acesso temporário
Você pode usar um token de acesso Google Cloud temporário para executar ferramentas de diagnóstico
como o mongosh
. É possível usar
gcloud auth print-access-token
para autenticar com um token de acesso de curta duração. Esse token é válido por uma hora.
Por exemplo, use o seguinte comando para se conectar ao banco de dados com
mongosh
:
mongosh --tls \ --username access_token --password $(gcloud auth print-access-token) \ 'mongodb://UID.LOCATION.firestore.goog:443/DATABASE_ID?loadBalanced=true&authMechanism=PLAIN&authSource=$external&retryWrites=false'
Substitua:
- DATABASE_UID: o UID do banco de dados
- LOCATION: o local do banco de dados
- DATABASE_ID: um ID do banco de dados