【问题标题】:Google cloud: insufficient authentication scopes谷歌云:身份验证范围不足
【发布时间】:2018-10-20 20:31:39
【问题描述】:

我在向部署在我的 Google Cloud Kubernetes 集群中的 Spring Boot 应用程序发送请求时遇到困难。我的应用程序收到一张照片并将其发送到 Google Vision API。我正在使用提供的客户端库 (https://cloud.google.com/vision/docs/libraries#client-libraries-install-java),如此处所述 https://cloud.google.com/vision/docs/auth:

如果您使用客户端库调用 Vision API,请使用应用默认凭据 (ADC)。使用 ADC 的服务在 GOOGLE_APPLICATION_CREDENTIALS 环境变量中查找凭据。除非您特别希望 ADC 使用其他凭据(例如,用户凭据),否则我们建议您将此环境变量设置为指向您的服务帐户密钥文件。

在我的本地机器上一切正常,我有一个带有 env 的 docker 容器。变量 GOOGLE_APPLICATION_CREDENTIALS 指向我的服务帐户密钥文件。

我的集群中没有此变量。这是我从 Kubernetes 集群中的应用程序得到的响应:

{
    "timestamp": "2018-05-10T14:07:27.652+0000",
    "status": 500,
    "error": "Internal Server Error",
    "message": "io.grpc.StatusRuntimeException: PERMISSION_DENIED: Request had insufficient authentication scopes.",
    "path": "/image"
}

我做错了什么?提前谢谢!

【问题讨论】:

    标签: kubernetes google-cloud-platform google-vision


    【解决方案1】:

    我还必须在我的 GKE 设置中指定 GOOGLE_APPLICATION_CREDENTIALS 环境变量,感谢How to set GOOGLE_APPLICATION_CREDENTIALS on GKE running through Kubernetes,这些是我完成的步骤:

    1.创建秘密(在我的情况下,在 Gitlab 上的部署步骤中):

    kubectl create secret generic google-application-credentials --from-file=./application-credentials.json
    

    2。设置音量:

    ...
    volumes:
    - name: google-application-credentials-volume
      secret:
        secretName: google-application-credentials
        items:
        - key: application-credentials.json # default name created by the create secret from-file command
          path: application-credentials.json
    

    3.设置卷挂载:

    spec:
      containers:
      - name: my-service
        volumeMounts:
        - name: google-application-credentials-volume
          mountPath: /etc/gcp
          readOnly: true
    

    4.设置环境变量:

    spec:
      containers:
      - name: my-service
        env:
        - name: GOOGLE_APPLICATION_CREDENTIALS
          value: /etc/gcp/application-credentials.json
    

    【讨论】:

    • Jdruwe,您是如何完成第 2 步和第 3 步的?您是否将其添加到自定义charts.yml?我已经尝试通过 auto-deploy-values.yaml 执行此操作,但它没有通过这些覆盖。
    • @JasonBuchanan 这对我来说已经太久了。有人可以帮助杰森吗?
    【解决方案2】:

    这意味着您正在尝试访问未启用或已通过身份验证使用的服务。您确定启用了对 Google vision 的访问权限吗?

    您可以在https://console.cloud.google.com/apis/dashboard 的仪表板中检查/启用 API,或从菜单导航到 API 和服务

    【讨论】:

    • 已启用。我也在当地得到了有效的回应。只是不确定我需要如何在 Google 云平台上的集群上配置它。
    【解决方案3】:

    如果您将 GOOGLE_APPLICATION_CREDENTIALS 环境变量添加到您的部署/pod/容器配置中会有帮助吗?

    这里是Kubernetesdocumentation中描述的设置环境变量的例子:

    apiVersion: v1
    kind: Pod
    metadata:
      name: envar-demo
      labels:
        purpose: demonstrate-envars
    spec:
      containers:
      - name: envar-demo-container
        image: gcr.io/google-samples/node-hello:1.0
        env:
        - name: DEMO_GREETING
          value: "Hello from the environment"
        - name: DEMO_FAREWELL
          value: "Such a sweet sorrow"
    

    【讨论】:

    • 我不确定这是在 Google 云平台中部署时要走的路。
    • 问题还在于 env 的值。变量是指向包含服务帐户信息的 json 文件的路径。
    • 这就是重点。您可以使用 Secrets 添加文件的内容,并使用 yaml 文件中的环境变量添加文件的路径。
    • 你有一个在 env.variable 中使用秘密作为文件的例子。我将 service-account.json 的内容保密,但我不确定如何在我的部署中使用它。
    • 环境值。变量必须包含包含服务帐户详细信息的文件的路径。
    猜你喜欢
    • 1970-01-01
    • 2022-11-11
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 2021-10-23
    • 2017-08-09
    相关资源
    最近更新 更多