Eseguire l'autenticazione e connettersi a un database
In questa pagina viene descritto come autenticarsi e connettersi al database Firestore con compatibilità MongoDB.Requisiti di connessione
Per i client Firestore con compatibilità MongoDB sono richiesti i seguenti elementi:
- I conducenti devono connettersi in modalità
load balanced
. In questo modo i driver non cercano di capire la topologia esatta del server a cui si connettono. - I driver devono connettersi con SSL abilitato.
- I driver devono disattivare le scritture ripetibili. Al momento Firestore con compatibilità MongoDB non supporta le scritture ripetibili.
Recupera la stringa di connessione
La stringa di connessione al database dipende dall'UID del database, dalla sua posizione e dal meccanismo di autenticazione. Le istruzioni riportate di seguito 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
-
Nella Google Cloud console, vai alla pagina Database.
- Nell'elenco dei database, fai clic sull'ID del database pertinente.
- Il riquadro Esplora mostra la stringa di connessione di base. Copia e utilizza questa stringa di connessione per connetterti al database.
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 del 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 database:
Connettiti con nome utente e password (SCRAM)
Segui questi passaggi per creare le credenziali utente per il tuo database e connettiti 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
) nel database.
Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Creare un utente e connettersi a un database
Per creare un utente per il database Firestore con compatibilità MongoDB, utilizza uno dei seguenti metodi:
Google Cloud console
-
Nella Google Cloud console, vai alla pagina Database.
- Seleziona un database dall'elenco dei database.
- Nel menu di navigazione, fai clic su Auth.
- 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.
Interfaccia a riga di comando gcloud
-
Per autenticarti 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 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, questa nuova credenziale utente non ha 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 del progetto.
- DATABASE_ID: l'ID database.
- USERNAME: il nome utente 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 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 database.
Connettiti alla libreria di autenticazione Google
Il seguente codice di esempio 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 Workload Identity).
Per farlo, devi aggiungere la libreria auth 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 effettuare la connessione:
val db = MongoClients.create( connectIgnite( "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 Whether to try and fetch an auth credential from the GCE VM metadata service or whether to call gcloud. */ private static MongoClientSettings.Builder connectIgnite( 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)); }
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 account di servizio Compute Engine. Per farlo, crea un criterio IAM per il Google Cloud progetto che contiene il database.
Prima di iniziare
Configura un account di servizio gestito dall'utente per la VM:
- Per configurare l'account di servizio durante la creazione della VM, consulta Creare una VM che utilizza un account di servizio gestito dall'utente.
- Per configurare l'account di servizio su una VM esistente, consulta Modificare l'account di servizio associato.
Prendi nota dell'indirizzo email del tuo account di servizio.
Configura le credenziali
Per concedere all'account di servizio il ruolo roles/datastore.user
per le operazioni di lettura e scrittura su Firestore, esegui il seguente 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 dell'account di servizio che hai creato.
Crea 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 Recupero della stringa di connessione.
Connettiti con un token di accesso temporaneo
Puoi utilizzare un Google Cloud token di accesso temporaneo per eseguire strumenti di diagnostica come mongosh
. Puoi utilizzare
gcloud auth print-access-token
per autenticarti 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