Получение 403 при попытке вызова API конечных точек Google Cloud, размещенного на App Engine Java 8, сервер приложений для разработчиков

Запуск приложения App Engine Java 8 с конечными точками Google Cloud. Я создал openapi.json, развернул его на своем портале конечных точек и вижу API на моем портале с правильно указанными различными методами и ресурсами.

Я запускаю сервер приложений для разработчиков локально в IntelliJ, используя плагин Cloud Code. Когда я запускаю его, он открывает вкладку браузера, которая выдает ошибку 403 со следующей трассировкой стека (сокращенно):

SEVERE: direct send of a check request service_name: "my-project-redacted.appspot.com"
operation {
  operation_id: "11b8f9a6-c9cb-4895-95fb-8bb39176efb9"
  operation_name: "1.my_project_dot_appspot_com.MyAPI"
  consumer_id: "project:my-project"
  start_time {
    seconds: 1596075164
    nanos: 812000000
  }
  end_time {
    seconds: 1596075164
    nanos: 812000000
  }
  labels {
    key: "servicecontrol.googleapis.com/caller_ip"
    value: "127.0.0.1"
  }
  labels {
    key: "servicecontrol.googleapis.com/user_agent"
    value: "ESP"
  }
  labels {
    key: "servicecontrol.googleapis.com/service_agent"
    value: "EF_JAVA/1.0.12"
  }
}
 failed
endpoints.repackaged.com.google.api.client.http.HttpResponseException: 403
{
  "error": {
    "code": 403,
    "message": "The caller does not have permission",
    "errors": [
      {
        "message": "The caller does not have permission",
        "domain": "global",
        "reason": "forbidden"
      }
    ],
    "status": "PERMISSION_DENIED"
  }
}

    at endpoints.repackaged.com.google.api.client.googleapis.services.AbstractGoogleClientRequest.newExceptionOnError(AbstractGoogleClientRequest.java:456)
    at endpoints.repackaged.com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:321)
    at endpoints.repackaged.com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1065)
    at endpoints.repackaged.com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
    at endpoints.repackaged.com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
    at endpoints.repackaged.com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)
    at com.google.api.control.Client.check(Client.java:205)

Стоит отметить, что API, похоже, работает - у меня есть симулятор iOS, который подключается к моему локальному серверу приложений для разработчиков и выполняет вызовы Endpoints. Мне просто надоело видеть 403 в моем браузере каждый раз, когда я запускаю сервер приложений для разработчиков, и опасаюсь, что это может предвещать подобную проблему в производственной среде, когда я, в конце концов, продвиню эту новую службу.


person Stevey    schedule 30.07.2020    source источник


Ответы (1)


Эта ошибка указывает на то, что что-то не так с разрешениями или что в вашем проекте отключен API управления службами, поэтому, чтобы исправить это, вы можете:

  • Убедитесь, что у вашей службы есть доступ к servicecontrol.googleapis.com, включив его, выполнив следующую команду в Cloud Shell:

    gcloud services enable servicecontrol.googleapis.com
    
  • Дважды проверьте параметр ENDPOINTS_SERVICE_NAME в вашем appengine-web.xml файле, он должен выглядеть так:

    <env-var name="ENDPOINTS_SERVICE_NAME" value="$PROJECT"/>
    
  • Проверьте, развернуты ли спецификации OpenAPI в облаке, вы можете проверить это, выполнив эту команду в Cloud Shell:

    gcloud endpoints configs list --service=$PROJECT
    
  • Дважды проверьте, имеет ли учетная запись службы, на которой запущен ваш экземпляр, правильные роли IAM.

person Rafael Lemos    schedule 30.07.2020
comment
Спасибо. Не решил мою проблему, но, по крайней мере, я (думаю, что) добился большего прогресса. У меня есть еще несколько вопросов; это все очень сбивает с толку. Есть ли форум, где я могу задать вопросы в более тематическом стиле? - person Stevey; 31.07.2020
comment
На самом деле, Stack Overflow - лучшее место для этого, кроме этого вы можете либо взглянуть на официальную документацию для Cloud Endpoints и App Engine, или вы можете обратиться к платная поддержка Google Cloud для более «персонализированного» решения проблем, поскольку они будут иметь доступ к особенностям или вашей Проект GCP в целом. - person Rafael Lemos; 31.07.2020