Pertinente solo per la versione Enterprise di Cloud Firestore. |
Requisiti di connessione
Per i client Cloud Firestore con compatibilità MongoDB sono necessari i seguenti elementi:
- I conducenti devono connettersi in modalità
load balanced
. In questo modo, i driver non tentano di comprendere la topologia esatta del server a cui si connettono. - I driver devono connettersi con SSL abilitato.
- I driver devono disattivare le scritture ripetibili. Cloud Firestore con compatibilità MongoDB al momento non supporta le scritture ripetibili.
Recuperare la stringa di connessione
La stringa di connessione al database dipende dall'UID del database, dalla posizione del database e dal meccanismo di autenticazione. Le istruzioni seguenti descrivono come viene formata la stringa di connessione.
La stringa di connessione esatta dipende dal meccanismo di autenticazione, ma la stringa di connessione di base utilizza il seguente formato:
mongodb://UID.LOCATION.firestore.goog:443/DATABASE_ID?loadBalanced=true&tls=true&retryWrites=false
Puoi ottenere la stringa di connessione di base in uno dei seguenti modi:
Console Firebase
-
Nella console Firebase, vai alla pagina Database Firestore.
- Fai clic sul database da autenticare.
- Nel riquadro Explorer, fai clic su Visualizza altro.
- Seleziona Connettiti utilizzando gli strumenti MongoDB.
- Copia la stringa di connessione.
gcloud
Utilizza gcloud firestore database describe
per recuperare l'UID e le informazioni sulla posizione:
gcloud firestore databases describe \ --database=DATABASE_ID \ --format='yaml(locationId, uid)'
Sostituisci DATABASE_ID con l'ID database.
L'output include la posizione e l'UID del database. Utilizza queste informazioni per creare la stringa di connessione di base.
Utilizza la stringa di connessione di base e uno dei seguenti metodi per autenticarti e connetterti al tuo database:
Connettersi con nome utente e password (SCRAM)
Segui questi passaggi per creare una credenziale utente per il tuo database e connetterti al database.
Prima di iniziare
Per ottenere le autorizzazioni necessarie per creare un utente, chiedi all'amministratore di concederti il ruolo IAM userCredsAdmin (roles/datastore.userCredsAdmin
) sul database. Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Crea un utente e connettiti a un database
Per creare un utente per il tuo database Cloud Firestore con compatibilità MongoDB, utilizza uno dei seguenti metodi:
Console Google Cloud
-
Nella console Google Cloud, vai alla pagina Database.
- Seleziona un database dall'elenco.
- Nel menu di navigazione, fai clic su Autenticazione.
- Fai clic su Aggiungi utente.
- Inserisci un nome utente.
- Seleziona un ruolo per il nuovo utente.
-
Fai clic su Aggiungi.
La password del nuovo utente verrà visualizzata nella finestra di dialogo di conferma.
gcloud CLI
-
Per l'autenticazione con SCRAM,
devi prima creare una credenziale utente. Utilizza il
comando
gcloud alpha firestore user-creds
: Sostituisci quanto segue:gcloud alpha firestore user-creds create USERNAME --database=DATABASE_ID
- USERNAME: il nome utente da creare.
- DATABASE_ID: l'ID del database.
L'output di questo comando include la password dell'utente.
L'output è simile al seguente:
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
-
Per impostazione predefinita, queste nuove credenziali utente non dispongono di autorizzazioni. Per l'accesso in lettura e scrittura al database, aggiungi il ruolo
roles/datastore.user
per questo database specifico: Sostituisci quanto segue: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: il nome del progetto.
- PROJECT_NUMBER: il numero di progetto.
- DATABASE_ID: l'ID del database.
- USERNAME: il nome utente che hai creato in precedenza.
- CONDITION_TITLE: un titolo per questa condizione. Questa condizione limita l'accesso solo a questo database.
Utilizza la seguente stringa di connessione per connetterti al tuo database con SCRAM:
mongodb://USERNAME:PASSWORD@UID.LOCATION.firestore.goog:443/DATABASE_ID?loadBalanced=true&authMechanism=SCRAM-SHA-256&tls=true&retryWrites=false
Sostituisci quanto segue:
- USERNAME: il nome utente.
- PASSWORD: la password che hai generato per questo utente.
- UID: l'UID del database.
- LOCATION: la posizione del database.
- DATABASE_ID: l'ID del database.
Connettersi alla libreria di autenticazione Google
Il seguente codice campione registra un gestore di callback OIDC che utilizza la Google Cloud libreria OAuth standard.
Questa libreria ti consente di utilizzare diversi tipi di autenticazione (credenziali predefinite dell'applicazione, federazione delle identità per la forza lavoro).
Per questo è necessario aggiungere la libreria di autenticazione come dipendenza:
// 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'
Il seguente esempio di codice mostra come connettersi:
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)).retryWrites(false); }
Sostituisci quanto segue:
- DATABASE_UID: il nome del progetto.
- LOCATION: la posizione del database.
- DATABASE_ID l'ID database.
Connettiti da una VM Compute Engine
Puoi autenticarti e connetterti al tuo database utilizzando un service account Compute Engine. Per farlo, crea un criterio IAM per il progetto Google Cloud che contiene il tuo database.
Prima di iniziare
Configura un service account gestito dall'utente per la tua VM:
- Per configurare il service account durante la creazione della VM, consulta Crea una VM che utilizza un service account gestito dall'utente.
- Per configurare il service account su una VM esistente, consulta Modifica il service account collegato.
Prendi nota dell'indirizzo email del service account.
Configurare le credenziali
Per concedere all'account di servizio il ruolo roles/datastore.user
per la lettura e la scrittura
in Cloud Firestore, esegui questo comando:
gcloud projects add-iam-policy-binding PROJECT_NAME --member="SERVICE_ACCOUNT_EMAIL" --role=roles/datastore.user
Sostituisci quanto segue:
- PROJECT_NAME: il nome del progetto.
- SERVICE_ACCOUNT_EMAIL: l'indirizzo email del service account che hai creato.
Costruisci la stringa di connessione
Utilizza il seguente formato per creare la stringa di connessione:
mongodb://DATABASE_UID.LOCATION.firestore.goog:443/DATABASE_ID?loadBalanced=true&tls=true&retryWrites=false&authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:FIRESTORE
Sostituisci quanto segue:
- DATABASE_UID: il nome del progetto.
- LOCATION: la posizione del database.
- DATABASE_ID l'ID database.
Per ulteriori informazioni sul recupero dell'UID e della posizione, consulta Recuperare la stringa di connessione.
Connettiti con un token di accesso temporaneo
Puoi utilizzare un token di accesso temporaneo Google Cloud per eseguire strumenti di diagnostica
come mongosh
. Puoi utilizzare
gcloud auth print-access-token
per l'autenticazione con un token di accesso a breve termine. Questo token è valido per un'ora.
Ad esempio, utilizza il seguente comando per connetterti al tuo database con
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'
Sostituisci quanto segue:
- DATABASE_UID: l'UID del database
- LOCATION: la posizione del database
- DATABASE_ID: un ID database