S'authentifier et se connecter à une base de données
Cette page explique comment s'authentifier et se connecter à votre base de données Firestore compatible avec MongoDB.Exigences de connexion
Les éléments suivants sont requis pour les clients Firestore compatibles avec MongoDB :
- Les pilotes doivent se connecter en mode
load balanced
. Cela empêche les pilotes d'essayer de comprendre la topologie exacte du serveur auquel ils se connectent. - Les pilotes doivent se connecter avec le protocole SSL activé.
- Les pilotes doivent désactiver les écritures réessayables. Firestore compatible avec MongoDB n'est actuellement pas compatible avec les écritures pouvant être relancées.
Récupérer la chaîne de connexion
La chaîne de connexion à la base de données dépend de l'UID de la base de données, de son emplacement et du mécanisme d'authentification. Les instructions suivantes décrivent la façon dont la chaîne de connexion est formée.
La chaîne de connexion exacte dépend du mécanisme d'authentification, mais la chaîne de connexion de base utilise le format suivant :
mongodb://UID.LOCATION.firestore.goog:443/DATABASE_ID?loadBalanced=true&tls=true&retryWrites=false
Vous pouvez obtenir la chaîne de connexion de base de l'une des manières suivantes :
Console
-
Dans la console Google Cloud , accédez à la page Bases de données.
- Dans la liste des bases de données, cliquez sur l'ID de la base de données concernée.
- Le panneau Explorateur affiche la chaîne de connexion de base. Copiez et utilisez cette chaîne de connexion pour vous connecter à votre base de données.
gcloud
Utilisez gcloud firestore database describe
pour récupérer l'UID et les informations de localisation :
gcloud firestore databases describe \ --database=DATABASE_ID \ --format='yaml(locationId, uid)'
Remplacez DATABASE_ID par l'ID de la base de données.
La sortie inclut l'emplacement et l'UID de la base de données. Utilisez ces informations pour construire la chaîne de connexion de base.
Utilisez la chaîne de connexion de base et l'une des méthodes suivantes pour vous authentifier et vous connecter à votre base de données :
Se connecter avec un nom d'utilisateur et un mot de passe (SCRAM)
Suivez ces étapes pour créer des identifiants utilisateur pour votre base de données et vous y connecter.
Avant de commencer
Pour obtenir les autorisations nécessaires pour créer un utilisateur, demandez à votre administrateur de vous accorder le rôle IAM userCredsAdmin (roles/datastore.userCredsAdmin
) sur votre base de données.
Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.
Créer un utilisateur et se connecter à une base de données
Pour créer un utilisateur pour votre base de données Firestore compatible avec MongoDB, utilisez l'une des méthodes suivantes :
ConsoleGoogle Cloud
-
Dans la console Google Cloud , accédez à la page Bases de données.
- Sélectionnez une base de données dans la liste.
- Dans le menu de navigation, cliquez sur Authentification.
- Cliquez sur Ajouter un utilisateur.
- Indiquez un nom d'utilisateur.
- Sélectionnez un rôle pour le nouvel utilisateur.
-
Cliquez sur Ajouter.
Le mot de passe du nouvel utilisateur s'affiche dans la boîte de dialogue de confirmation.
CLI gcloud
-
Pour vous authentifier avec SCRAM, vous devez d'abord créer un identifiant utilisateur. Exécutez la commande
gcloud alpha firestore user-creds
: Remplacez les éléments suivants :gcloud alpha firestore user-creds create USERNAME --database=DATABASE_ID
- USERNAME : nom d'utilisateur à créer.
- DATABASE_ID : ID de la base de données.
Le résultat de cette commande inclut le mot de passe de l'utilisateur.
Le résultat se présente comme suit :
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
-
Par défaut, ces nouvelles identifiants utilisateur ne disposent d'aucune autorisation. Pour obtenir un accès en lecture et en écriture à la base de données, ajoutez le rôle
roles/datastore.user
pour cette base de données spécifique : Remplacez les éléments suivants :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 : nom de votre projet.
- PROJECT_NUMBER : numéro de projet.
- DATABASE_ID : ID de la base de données.
- USERNAME : nom d'utilisateur que vous avez créé précédemment.
- CONDITION_TITLE : titre de cette condition. Cette condition limite l'accès à cette base de données uniquement.
Utilisez la chaîne de connexion suivante pour vous connecter à votre base de données avec SCRAM :
mongodb://USERNAME:PASSWORD@UID.LOCATION.firestore.goog:443/DATABASE_ID?loadBalanced=true&authMechanism=SCRAM-SHA-256&tls=true&retryWrites=false
Remplacez les éléments suivants :
- USERNAME : nom d'utilisateur.
- PASSWORD : mot de passe que vous avez généré pour cet utilisateur.
- UID : UID de la base de données.
- LOCATION : emplacement de la base de données.
- DATABASE_ID : ID de la base de données.
Se connecter à la bibliothèque Google Auth
L'exemple de code suivant enregistre un gestionnaire de rappel OIDC et utilise la bibliothèque OAuth standard.Google Cloud
Cette bibliothèque vous permet d'utiliser différents types d'authentification (Identifiants par défaut de l'application, fédération d'identité de charge de travail).
Pour cela, vous devez ajouter la bibliothèque d'authentification en tant que dépendance :
// 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'
L'exemple de code suivant montre comment se connecter :
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)); }
Remplacez les éléments suivants :
- DATABASE_UID : nom de votre projet.
- LOCATION : emplacement de votre base de données.
- DATABASE_ID, l'ID de la base de données.
Se connecter à partir d'une VM Compute Engine
Vous pouvez vous authentifier et vous connecter à votre base de données à l'aide d'un compte de service Compute Engine. Pour ce faire, créez une stratégie IAM pour le projet Google Cloud qui contient votre base de données.
Avant de commencer
Configurez un compte de service géré par l'utilisateur pour votre VM :
- Pour configurer un compte de service lors de la création de la VM, consultez la page Créer une VM qui utilise un compte de service géré par l'utilisateur.
- Pour configurer un compte de service sur une VM existante, consultez la section Modifier le compte de service associé.
Notez l'adresse e-mail de votre compte de service.
Configurer les identifiants
Pour accorder au compte de service le rôle roles/datastore.user
pour la lecture et l'écriture dans Firestore, exécutez la commande suivante :
gcloud projects add-iam-policy-binding PROJECT_NAME --member="SERVICE_ACCOUNT_EMAIL" --role=roles/datastore.user
Remplacez les éléments suivants :
- PROJECT_NAME : nom de votre projet.
- SERVICE_ACCOUNT_EMAIL : adresse e-mail du compte de service que vous avez créé.
Construire la chaîne de connexion
Utilisez le format suivant pour créer la chaîne de connexion :
mongodb://DATABASE_UID.LOCATION.firestore.goog:443/DATABASE_ID?loadBalanced=true&tls=true&retryWrites=false&authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:FIRESTORE
Remplacez les éléments suivants :
- DATABASE_UID : nom de votre projet.
- LOCATION : emplacement de votre base de données.
- DATABASE_ID, l'ID de la base de données.
Pour savoir comment récupérer l'UID et l'emplacement, consultez Récupérer la chaîne de connexion.
Se connecter avec un jeton d'accès temporaire
Vous pouvez utiliser un jeton d'accès Google Cloud temporaire pour exécuter des outils de diagnostic tels que mongosh
. Vous pouvez utiliser gcloud auth print-access-token
pour vous authentifier avec un jeton d'accès à court terme. Ce jeton est valide pendant une heure.
Par exemple, utilisez la commande suivante pour vous connecter à votre base de données avec 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'
Remplacez les éléments suivants :
- DATABASE_UID : UID de la base de données
- LOCATION : emplacement de la base de données
- DATABASE_ID : ID de la base de données