从 GCP 元数据服务器获取 403

问题描述 投票:0回答:1

我正在使用 GCP 存储上传文件并返回其签名/公共 URL。

将文件上传到 gcp 存储后尝试 SignUrl 时出现以下错误。

Caused by: java.io.IOException: Unexpected Error code 403 trying to get service accounts from Compute Engine metadata: This metadata endpoint is concealed for ?recursive calls

    at com.google.auth.oauth2.ComputeEngineCredentials.getDefaultServiceAccount(ComputeEngineCredentials.java:383)
    at com.google.auth.oauth2.ComputeEngineCredentials.getAccount(ComputeEngineCredentials.java:336)
    ... 18 common frames omitted

特别是当服务帐户调用转到 GCP 元数据时。

com.google.auth.oauth2.ComputeEngineCredentials#getDefaultServiceAccount
HttpResponse response = getMetadataResponse(getServiceAccountsUrl());

我的GCP java库版本是1.80.0。

无法在任何地方找到此错误。

如果需要更多详细信息,请告诉我。

编辑1:

这是实际代码的最小版本,是正在发生的事情的要点。

int ttlInMinutes = 5;
String objectName = "object-name";
String bucket = "some-bucket";
Storage storage = StorageOptions.getDefaultInstance().getService();
BlobInfo blobinfo = BlobInfo.newBuilder(BlobId.of(bucket, objectName)).build();
URL url = storage.signUrl(blobinfo, ttlInMinutes, TimeUnit.MINUTES, withV4Signature());

此时,我收到了上述错误。

java google-cloud-platform google-cloud-storage
1个回答
0
投票

我们将 GCE 与 k8s 结合使用,我们在 GCE 服务器上部署 pod,服务帐户与部署 pod 的服务器链接,而不是直接与 pod 本身链接。

问题是在用于部署 pod 的 k8s yaml 文件中,我们没有设置

hostNetwork
。将
hostNetwork
设置为
true
后,元数据请求成功返回结果。

在此设置之前,我猜 pod 将在它自己的网络中运行,而不是使用服务器的网络。更多信息:Kubernetes 中的 hostNetwork 是什么?

© www.soinside.com 2019 - 2024. All rights reserved.