Melakukan autentikasi dan terhubung ke database
Persyaratan koneksi:
Berikut ini diperlukan untuk klien Firestore dengan kompatibilitas MongoDB:
- Driver harus terhubung dalam mode
load balanced
. Hal ini mencegah driver mencoba memahami topologi server persis yang terhubung dengannya. - Driver harus terhubung dengan SSL yang diaktifkan.
- Driver harus menonaktifkan operasi tulis yang dapat dicoba lagi. Firestore dengan kompatibilitas MongoDB tidak mendukung operasi tulis yang dapat dicoba lagi. Anda tidak perlu menonaktifkan operasi baca yang dapat dicoba lagi karena operasi ini didukung.
Mengambil string koneksi
String koneksi database bergantung pada UID database, lokasi database, dan mekanisme autentikasi. Petunjuk berikut menjelaskan cara string koneksi dibentuk.
String koneksi yang tepat bergantung pada mekanisme autentikasi, tetapi string koneksi dasar menggunakan format berikut:
mongodb://UID.LOCATION.firestore.goog:443/DATABASE_ID?loadBalanced=true&tls=true&retryWrites=false
Anda dapat memperoleh string koneksi dasar dengan salah satu cara berikut:
Konsol
-
Di konsol Google Cloud , buka halaman Databases.
- Dalam daftar database, klik ID database yang relevan.
- Panel Explorer menampilkan string koneksi dasar. Salin dan gunakan string koneksi ini untuk terhubung ke database Anda.
gcloud
Gunakan gcloud firestore database describe
untuk mengambil UID dan informasi
lokasi:
gcloud firestore databases describe \ --database=DATABASE_ID \ --format='yaml(locationId, uid)'
Ganti DATABASE_ID dengan ID database.
Output mencakup lokasi dan UID database. Gunakan informasi ini untuk membuat string koneksi dasar.
Gunakan string koneksi dasar dan salah satu metode berikut untuk mengautentikasi dan menghubungkan ke database Anda:
Menghubungkan dengan Nama pengguna dan sandi (SCRAM)
Ikuti langkah-langkah berikut untuk membuat kredensial pengguna untuk database Anda dan menghubungkan ke database Anda.
Sebelum memulai
Untuk mendapatkan izin yang diperlukan guna membuat pengguna, minta administrator untuk memberi Anda peran IAM userCredsAdmin (roles/datastore.userCredsAdmin
) di database Anda.
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran kustom atau peran yang telah ditentukan lainnya.
Membuat pengguna dan menghubungkan ke database
Untuk membuat pengguna bagi database Firestore dengan kompatibilitas MongoDB, gunakan salah satu metode berikut:
Google Cloud console
-
Di konsol Google Cloud , buka halaman Databases.
- Pilih database dari daftar database.
- Di menu navigasi, klik Auth.
- Klik Add user.
- Masukkan Nama pengguna.
- Pilih peran untuk pengguna baru.
-
Klik Tambahkan.
Sandi pengguna baru akan ditampilkan di dialog konfirmasi.
gcloud CLI
-
Untuk mengautentikasi dengan SCRAM,
Anda harus membuat kredensial pengguna terlebih dahulu. Gunakan
perintah
gcloud alpha firestore user-creds
: Ganti kode berikut:gcloud alpha firestore user-creds create USERNAME --database=DATABASE_ID
- USERNAME: nama pengguna yang akan dibuat.
- DATABASE_ID: ID database.
Output perintah ini mencakup sandi pengguna.
Outputnya akan terlihat seperti berikut:
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
-
Secara default, kredensial pengguna baru ini tidak memiliki izin apa pun. Untuk akses baca dan tulis ke database, tambahkan peran
roles/datastore.user
untuk database tertentu ini: Ganti kode berikut: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: nama project Anda.
- PROJECT_NUMBER: nomor project.
- DATABASE_ID: ID database.
- USERNAME: nama pengguna yang Anda buat sebelumnya.
- CONDITION_TITLE: judul untuk kondisi ini. Kondisi ini membatasi akses hanya ke database ini.
Gunakan string koneksi berikut untuk menghubungkan ke database Anda dengan SCRAM:
mongodb://USERNAME:PASSWORD@UID.LOCATION.firestore.goog:443/DATABASE_ID?loadBalanced=true&authMechanism=SCRAM-SHA-256&tls=true&retryWrites=false
Ganti kode berikut:
- USERNAME: nama pengguna.
- PASSWORD: sandi yang Anda buat untuk pengguna ini.
- UID: UID database.
- LOCATION: lokasi database.
- DATABASE_ID: ID database.
Menghubungkan dengan Library Google Auth
Contoh kode berikut mendaftarkan handler callback OIDC menggunakan library OAuth standarGoogle Cloud .
Library ini memungkinkan Anda menggunakan sejumlah jenis autentikasi yang berbeda (Kredensial Default Aplikasi, Workload Identity Federation).
Hal ini memerlukan penambahan library auth sebagai dependensi:
// 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'
Contoh kode berikut menunjukkan cara menghubungkan:
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); }
Ganti kode berikut:
- DATABASE_UID: nama project Anda.
- LOCATION: lokasi database Anda.
- DATABASE_ID ID database.
Terhubung dari VM Compute Engine
Anda dapat mengautentikasi dan terhubung ke database menggunakan akun layanan Compute Engine. Untuk melakukannya, buat kebijakan IAM untuk project Google Cloud yang berisi database Anda.
Sebelum memulai
Mengonfigurasi akun layanan yang dikelola pengguna untuk VM Anda:
- Untuk mengonfigurasi akun layanan selama pembuatan VM, lihat Membuat VM yang menggunakan akun layanan yang dikelola pengguna.
- Untuk mengonfigurasi akun layanan di VM yang ada, lihat Mengubah akun layanan yang ditambahkan.
Catat alamat email akun layanan Anda.
Mengonfigurasi kredensial
Untuk memberikan peran roles/datastore.user
kepada akun layanan untuk membaca dan menulis
ke Firestore, jalankan perintah berikut:
gcloud projects add-iam-policy-binding PROJECT_NAME --member="SERVICE_ACCOUNT_EMAIL" --role=roles/datastore.user
Ganti kode berikut:
- PROJECT_NAME: nama project Anda.
- SERVICE_ACCOUNT_EMAIL: alamat email untuk akun layanan yang Anda buat.
Membangun string koneksi
Gunakan format berikut untuk membangun string koneksi:
mongodb://DATABASE_UID.LOCATION.firestore.goog:443/DATABASE_ID?loadBalanced=true&tls=true&retryWrites=false&authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:FIRESTORE
Ganti kode berikut:
- DATABASE_UID: nama project Anda.
- LOCATION: lokasi database Anda.
- DATABASE_ID: ID database.
Untuk mengetahui informasi selengkapnya tentang cara mengambil UID dan lokasi, lihat Mengambil string koneksi.
Menghubungkan dengan token akses sementara
Anda dapat menggunakan token akses Google Cloud sementara untuk menjalankan alat diagnostik
seperti mongosh
. Anda dapat menggunakan
gcloud auth print-access-token
untuk mengautentikasi dengan token akses jangka pendek. Token ini valid selama satu jam.
Misalnya, gunakan perintah berikut untuk menghubungkan ke database Anda menggunakan
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'
Ganti kode berikut:
- DATABASE_UID: UID database
- LOCATION: lokasi database
- DATABASE_ID: ID database.