如何在不提供密钥的情况下通过 Alpakka-gcs 从 Google 云存储下载?

How to download from Google Cloud Storage by Alpakka-gcs without providing secret-key?

如果我像下面这样在 application.conf 上提供 gcs-secret-key,我正在使用 Alpakka-gcs 从 google-compute-engine 完美连接到 GCS。

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

如果你查看 Alpakka 源代码,你可以看到一个 accessToken creation. Sadly, this version only support the internal call to GoogleTokenApi,一个 Alpakka 制作的版本,用于向 Google 云请求令牌。并且仅基于私钥,而不基于元数据服务器或 GOOGLE_APPLICATION_CREDENTIALS 环境变量。

您可以在项目中提出更改,甚至开发它并使用 Google Cloud oauth 客户端库将其推送到项目中。