问题描述
如果我在 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。遗憾的是,此版本仅支持对 GoogleTokenApi 的内部调用,这是一个 Alpakka 制作的版本,用于向 Google Cloud 请求令牌。并且仅基于私钥,而不基于元数据服务器或 GOOGLE_APPLICATION_CREDENTIALS 环境变量。
您可以在项目中提出更改建议,甚至可以使用 Google Cloud oauth 客户端库进行开发并将其推送到项目中。