Kimlik doğrulaması yapma ve veritabanına bağlanma

Yalnızca Cloud Firestore Enterprise sürümü için geçerlidir.

Bağlantı koşulları

MongoDB uyumluluğu istemcileriyle Cloud Firestore için aşağıdakiler gereklidir:

  • Sürücüler load balanced modunda bağlanmalıdır. Bu, sürücülerin bağlandıkları sunucu topolojisini tam olarak anlamaya çalışmasını engeller.
  • Sürücüler, SSL etkinleştirilmiş olarak bağlanmalıdır.
  • Sürücüler, yeniden denenebilir yazma işlemlerini devre dışı bırakmalıdır. MongoDB uyumluluğu olan Cloud Firestore şu anda yeniden denenebilir yazma işlemlerini desteklememektedir.

Bağlantı dizesini alma

Veritabanı bağlantı dizesi, veritabanının UID'sine, veritabanının konumuna ve kimlik doğrulama mekanizmasına bağlıdır. Aşağıdaki talimatlarda bağlantı dizesinin nasıl oluşturulduğu açıklanmaktadır.

Tam bağlantı dizesi, kimlik doğrulama mekanizmasına bağlıdır. Ancak temel bağlantı dizesi aşağıdaki biçimi kullanır:

mongodb://UID.LOCATION.firestore.goog:443/DATABASE_ID?loadBalanced=true&tls=true&retryWrites=false

Temel bağlantı dizesini aşağıdaki yöntemlerden biriyle elde edebilirsiniz:

Firebase konsolu
  1. Firebase konsolunda Firestore Database sayfasına gidin.

    Firestore veritabanına gitme

  2. Kimliğini doğrulamak istediğiniz veritabanını tıklayın.
  3. Gezgin panelinde Daha fazla göster'i tıklayın.
  4. MongoDB araçlarını kullanarak bağlan'ı seçin.
  5. Bağlantı dizesini kopyalayın.
gcloud

UID ve konum bilgilerini almak için gcloud firestore database describe öğesini kullanın:

gcloud firestore databases describe \
--database=DATABASE_ID \
--format='yaml(locationId, uid)'

DATABASE_ID yerine veritabanı kimliğini yazın.

Çıkış, veritabanının konumunu ve UID'sini içerir. Temel bağlantı dizesini oluşturmak için bu bilgileri kullanın.

Kimlik doğrulamak ve veritabanınıza bağlanmak için temel bağlantı dizesini ve aşağıdaki yöntemlerden birini kullanın:

Kullanıcı adı ve şifreyle (SCRAM) bağlanma

Veritabanınız için kullanıcı kimliği oluşturmak ve veritabanınıza bağlanmak üzere aşağıdaki adımları uygulayın.

Başlamadan önce

Kullanıcı oluşturmak için gereken izinleri almak üzere yöneticinizden veritabanınızda userCredsAdmin (roles/datastore.userCredsAdmin) IAM rolünü vermesini isteyin. Rol verme hakkında daha fazla bilgi için Projelere, klasörlere ve kuruluşlara erişimi yönetme başlıklı makaleyi inceleyin.

Gerekli izinleri özel roller veya diğer önceden tanımlanmış roller aracılığıyla da alabilirsiniz.

Kullanıcı oluşturma ve veritabanına bağlanma

MongoDB uyumluluğu olan Cloud Firestore veritabanınız için kullanıcı oluşturmak üzere aşağıdaki yöntemlerden birini kullanın:

Google Cloud konsolu
  1. Google Cloud Console'da Veritabanları sayfasına gidin.

    Veritabanları'na gidin

  2. Veritabanları listesinden bir veritabanı seçin.
  3. Gezinme menüsünde Auth'u (Kimlik Doğrulama) tıklayın.
  4. Kullanıcı Ekle'yi tıklayın.
  5. Bir kullanıcı adı girin.
  6. Yeni kullanıcı için bir rol seçin.
  7. Ekle'yi tıklayın.

    Yeni kullanıcının şifresi onay iletişim kutusunda gösterilir.

gcloud CLI
  1. SCRAM ile kimlik doğrulaması yapmak için önce bir kullanıcı kimlik bilgisi oluşturmanız gerekir. Şu komutu kullanın: gcloud alpha firestore user-creds
    gcloud alpha firestore user-creds create USERNAME --database=DATABASE_ID
    Aşağıdakileri değiştirin:
    • USERNAME: Oluşturulacak kullanıcı adı.
    • DATABASE_ID: Veritabanı kimliği.

    Bu komutun çıktısı, kullanıcının şifresini içerir.

    Çıkış şu şekilde görünür:

    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
  2. Varsayılan olarak, bu yeni kullanıcı kimlik bilgilerinin herhangi bir izni yoktur. Veritabanına okuma ve yazma erişimi için bu veritabanına roles/datastore.user rolünü ekleyin:

    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"'
    Aşağıdakileri değiştirin:

SCRAM ile veritabanınıza bağlanmak için aşağıdaki bağlantı dizesini kullanın:

mongodb://USERNAME:PASSWORD@UID.LOCATION.firestore.goog:443/DATABASE_ID?loadBalanced=true&authMechanism=SCRAM-SHA-256&tls=true&retryWrites=false

Aşağıdakini değiştirin:

  • USERNAME: Kullanıcı adı.
  • PASSWORD: Bu kullanıcı için oluşturduğunuz şifre.
  • UID: Veritabanının UID'si.
  • LOCATION: Veritabanının konumu.
  • DATABASE_ID: Veritabanı kimliği.

Google Auth Library ile bağlantı kurma

Aşağıdaki kod örneği, Google Cloud standart OAuth kitaplığını kullanan bir OIDC geri çağırma işleyicisini kaydeder.

Bu kitaplık, çeşitli kimlik doğrulama türlerini (Application Default Credentials, Workload Identity Federation) kullanmanıza olanak tanır.

Bunun için kimlik doğrulama kitaplığının bağımlı kaynak olarak eklenmesi gerekir:

// 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'

Aşağıdaki kod örneğinde nasıl bağlanılacağı gösterilmektedir:

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);
}

Aşağıdakini değiştirin:

  • DATABASE_UID: Projenizin adı.
  • LOCATION: Veritabanınızın konumu.
  • DATABASE_ID veritabanı kimliği.

Compute Engine sanal makinesinden bağlanma

Compute Engine hizmet hesabı kullanarak veritabanınızda kimlik doğrulaması yapabilir ve veritabanınıza bağlanabilirsiniz. Bunu yapmak için veritabanınızı içeren Google Cloud projesi için bir IAM politikası oluşturun.

Başlamadan önce

Sanal makineniz için kullanıcı tarafından yönetilen bir hizmet hesabı yapılandırın:

Hizmet hesabınızın e-posta adresini not edin.

Kimlik bilgilerini yapılandırma

Hizmet hesabına roles/datastore.user rolünü vererek Cloud Firestore üzerinde okuma ve yazma izni vermek için aşağıdaki komutu çalıştırın:

gcloud projects add-iam-policy-binding PROJECT_NAME --member="SERVICE_ACCOUNT_EMAIL" --role=roles/datastore.user

Aşağıdakini değiştirin:

  • PROJECT_NAME: Projenizin adı.
  • SERVICE_ACCOUNT_EMAIL: Oluşturduğunuz hizmet hesabının e-posta adresi.

Bağlantı dizesini oluşturma

Bağlantı dizesini oluşturmak için aşağıdaki biçimi kullanın:

mongodb://DATABASE_UID.LOCATION.firestore.goog:443/DATABASE_ID?loadBalanced=true&tls=true&retryWrites=false&authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:FIRESTORE

Aşağıdakini değiştirin:

  • DATABASE_UID: Projenizin adı.
  • LOCATION: Veritabanınızın konumu.
  • DATABASE_ID veritabanı kimliği.

UID ve konumun alınması hakkında daha fazla bilgi için Bağlantı dizesini alma başlıklı makaleyi inceleyin.

Geçici erişim jetonuyla bağlanma

Google Cloud gibi teşhis araçlarını çalıştırmak için geçici bir mongosh erişim jetonu kullanabilirsiniz. Kısa süreli erişim jetonuyla kimlik doğrulamak için gcloud auth print-access-token kullanabilirsiniz. Bu jeton bir saat boyunca geçerlidir.

Örneğin, mongosh ile veritabanınıza bağlanmak için aşağıdaki komutu kullanın:

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'

Aşağıdakini değiştirin:

  • DATABASE_UID: Veritabanının UID'si
  • LOCATION: veritabanı konumu
  • DATABASE_ID: veritabanı kimliği