我试图让this样本工作没有成功
我安装并初始化了客户端:
export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)"
echo "deb https://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-get update \
&& sudo apt-get -y install google-cloud-sdk \
&& sudo apt-get -y install google-cloud-sdk-app-engine-java \
&& sudo apt-get -y install google-cloud-sdk-app-engine-python \
gcloud init
然后我成功验证了:
gcloud auth activate-service-account 13672300789-compute@developer.gserviceaccount.com --key-file=DockerStorage-e7def0adcafb.json
然后我尝试了快速启动示例:
Storage storage = StorageOptions.getDefaultInstance().getService();
String bucketName = "my-first-bucket"; // "my-new-bucket";
Bucket bucket = storage.create(BucketInfo.of(bucketName));
System.out.printf("Bucket %s created.%n", bucket.getName());
未经授权的BOOM
Exception in thread "main" com.google.cloud.storage.StorageException: 401 Unauthorized
我错过了什么?
答案 0 :(得分:1)
嗯...好问题。从理论上说这应该有效如果你没有另外指定auth,那么该库将首先尝试使用GOOGLE_APPLICATION_CREDENTIALS
环境变量指定的凭证文件,如果没有设置,{{3} }。
我猜测由于某种原因它无法找到您的gcloud凭据。默认情况下,他们会在" .config / gcloud"您的主目录下的目录,但可以覆盖。也许检查一下那里是否有一些文件?
值得一试的是将服务帐户的JSON文件复制到该计算机并使用GOOGLE_APPLICATION_CREDENTIALS
环境变量指定其路径。这不应该是必要的,但如果那也失败了,那就更有趣了。
答案 1 :(得分:1)
首先,您必须生成服务帐户凭据。
生成服务帐户凭据 要生成JSON或PKCS12格式的私钥:
然后只需在代码中使用凭证json文件。
StorageOptions storageOptions = StorageOptions.newBuilder()
.setProjectId("YOUR_PROJECT_ID")
.setCredentials(GoogleCredentials.fromStream(new
FileInputStream("path/YOUR_SERVICE_ACCOUNT_CRENDENTIAL.json"))).build();
Storage storage = storageOptions.getService();