S'authentifier et se connecter à une base de données
Cette page explique comment vous authentifier et vous connecter à votre base de données Firestore compatible avec MongoDB.Conditions requises de connectivité
Les éléments suivants sont requis pour les clients Firestore compatible 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 SSL activé.
- Les pilotes doivent désactiver les écritures réitérables. Firestore compatible avec MongoDB n'est actuellement pas compatible avec les écritures réitérables.
Récupérez 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 formation de la chaîne de connexion.
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 Google Cloud console, 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 Explorer 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 créer 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)
Pour créer des identifiants utilisateur pour votre base de données et vous y connecter, procédez comme suit :
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 via 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 Google Cloud console, 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 des identifiants 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 l'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 qui utilise la bibliothèque OAuth standardGoogle Cloud .
Cette bibliothèque vous permet d'utiliser plusieurs types d'authentification (identifiants par défaut de l'application, fédération d'identité de charge de travail).
Pour ce faire, 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( 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)); }
Remplacez les éléments suivants :
- DATABASE_UID : nom de votre projet.
- LOCATION: emplacement de votre base de données.
- DATABASE_ID : ID de la base de données.
Se connecter depuis 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éé.
Créer 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 : ID de la base de données.
Pour en savoir plus sur la récupération de l'UID et de l'emplacement, consultez la section 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 valable 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 base de données