Как загрузить из облачного хранилища Google с помощью Alpakka-gcs без предоставления секретного ключа?

#scala #google-cloud-storage #google-compute-engine #alpakka

# #scala #google-облачное хранилище #google-compute-engine #alpakka

Вопрос:

Я использую Alpakka-gcs для подключения к GCS из google-compute-engine, если я предоставляю gcs-secret-key в application.conf, как показано ниже.

 alpakka.google.cloud.storage {
  project-id = "project_id"
  client-email = "client_email"
  private-key = "************gcs-secret-key************"
  base-url = "https://www.googleapis.com/" // default
  base-path = "/storage/v1" // default
  token-url = "https://www.googleapis.com/oauth2/v4/token" // default
  token-scope = "https://www.googleapis.com/auth/devstorage.read_write" // default
}

 

Мой вопрос
в том, как подключить вычислительный движок, уже имеющий учетные данные, без предоставления секретного ключа для alpakka.

Приведенный ниже пример кода работает нормально, но я хочу знать способ alpakka.

   def downloadObject(objectName:String, destFilePath: String): Unit = {

    import com.google.cloud.storage.BlobId
    import com.google.cloud.storage.StorageOptions
    import java.nio.file.Paths
    def credential:GoogleCredentials = ComputeEngineCredentials.create()
    val storage = StorageOptions.newBuilder.setCredentials(credential).setProjectId(projectId).build.getService

    val blob = storage.get(BlobId.of(bucketName, objectName))
    blob.downloadTo(Paths.get(destFilePath))
  }
 

Ответ №1:

Если вы заглянете в исходники Alpakka, то увидите творение accessToken. К сожалению, эта версия поддерживает только внутренний вызов GoogleTokenApi, созданной Alpakka версии для запроса токена в Google Cloud. И основан только на закрытом ключе, а не на сервере метаданных или переменной среды GOOGLE_APPLICATION_CREDENTIALS.

Вы можете предложить внести изменения в проект или даже разработать его и внедрить в проект, используя клиентскую библиотеку Google Cloud oauth.

Комментарии:

1. Я понимаю. Спасибо за подробное объяснение!