Ошибка недостаточных областей проверки подлинности при создании облачной задачи

Мое приложение Java выполняет 2 задачи. Прослушивание pub-sub новых сообщений и создание облачных задач. Кроме того, он использует учетную запись службы вычислений по умолчанию, которой назначены все роли. Теперь мы запускаем вычислительный экземпляр с учетной записью службы по умолчанию, имеющей следующие области.

serviceAccounts:
- email: ***********[email protected]
  scopes:
  - https://www.googleapis.com/auth/devstorage.read_only
  - https://www.googleapis.com/auth/logging.write
  - https://www.googleapis.com/auth/monitoring.write
  - https://www.googleapis.com/auth/pubsub
  - https://www.googleapis.com/auth/service.management.readonly
  - https://www.googleapis.com/auth/servicecontrol
  - https://www.googleapis.com/auth/taskqueue
  - https://www.googleapis.com/auth/trace.append

Однако во время выполнения мы можем получать сообщения. Но мы получаем исключение при создании облачной задачи.

 com.google.api.gax.rpc.PermissionDeniedException: io.grpc.StatusRuntimeException: PERMISSION_DENIED: Request had insufficient authentication scopes.
        at com.google.api.gax.rpc.ApiExceptionFactory.createException(ApiExceptionFactory.java:55)
        at com.google.api.gax.grpc.GrpcApiExceptionFactory.create(GrpcApiExceptionFactory.java:72)
        at com.google.api.gax.grpc.GrpcApiExceptionFactory.create(GrpcApiExceptionFactory.java:60)
        at com.google.api.gax.grpc.GrpcExceptionCallable$ExceptionTransformingFuture.onFailure(GrpcExceptionCallable.java:97)
        at com.google.api.core.ApiFutures$1.onFailure(ApiFutures.java:68)
        at com.google.common.util.concurrent.Futures$CallbackListener.run(Futures.java:1041)
        at com.google.common.util.concurrent.DirectExecutor.execute(DirectExecutor.java:30)
        at com.google.common.util.concurrent.AbstractFuture.executeListener(AbstractFuture.java:1215)
        at com.google.common.util.concurrent.AbstractFuture.addListener(AbstractFuture.java:724)
        at com.google.common.util.concurrent.ForwardingListenableFuture.addListener(ForwardingListenableFuture.java:45)
        at com.google.api.core.ApiFutureToListenableFuture.addListener(ApiFutureToListenableFuture.java:52)
        at com.google.common.util.concurrent.Futures.addCallback(Futures.java:1014)
        at com.google.api.core.ApiFutures.addCallback(ApiFutures.java:63)
        at com.google.api.gax.grpc.GrpcExceptionCallable.futureCall(GrpcExceptionCallable.java:67)
        at com.google.api.gax.rpc.UnaryCallable$1.futureCall(UnaryCallable.java:126)
        at com.google.api.gax.tracing.TracedUnaryCallable.futureCall(TracedUnaryCallable.java:75)
        at com.google.api.gax.rpc.UnaryCallable$1.futureCall(UnaryCallable.java:126)
        at com.google.api.gax.rpc.UnaryCallable.futureCall(UnaryCallable.java:87)
        at com.google.api.gax.rpc.UnaryCallable.call(UnaryCallable.java:112)
        at com.google.cloud.tasks.v2.CloudTasksClient.createTask(CloudTasksClient.java:1258)
        at com.google.cloud.tasks.v2.CloudTasksClient.createTask(CloudTasksClient.java:1241)
        at gcp.storage.services.ExternalURLGenService.lambda$createTask$0(ExternalURLGenService.java:94)

Кроме того, чтобы проверить, все ли назначены для учетной записи роли, мы включили все облачные API на экземпляре и снова попытались запустить приложение, и это нам удалось.

Может ли кто-нибудь сказать мне, какую дополнительную область я должен назначить своему экземпляру?

В качестве домашнего задания я проверил документацию, указаны только 2 объема. т.е.

https://www.googleapis.com/auth/cloud-platform
https://www.googleapis.com/auth/cloud-tasks

Я уже дал своему экземпляру cloud-tasks область видимости. Однако область видимости cloud-platform эквивалентна включению всех API Google, которые мне не нужны.


person Manish Bansal    schedule 08.03.2021    source источник


Ответы (1)


Область видимости - это устаревший способ управления доступом. Сегодня, даже если объем правильный, доступы проверяются службами IAM.

Доказательство этого: если вы используете настраиваемую учетную запись службы с Compute Engine, вы не можете выбрать область действия, вы можете выбрать область только с помощью учетной записи службы по умолчанию Compute Engine.

Итак, не беспокойтесь, вы можете разрешить использование облачной платформы в полном объеме. Но вам необходимо удалить роль редактора учетной записи службы вычислительного ядра по умолчанию. И только дайте необходимое разрешение.

Если вы используете учетную запись службы Compute Engine по умолчанию с другими продуктами, создайте новую учетную запись службы и добавьте ее в свой Compute Engine. На данный момент больше нет области действия, предоставляется только роль IAM.

person guillaume blaquiere    schedule 08.03.2021
comment
Спасибо. Надеюсь, мой менеджер согласится с этим аргументом. Поскольку в документации по gcp все еще говорится о добавлении к экземпляру только соответствующей области. - person Manish Bansal; 08.03.2021
comment
Устаревшие прицелы бесполезны. Если вы удалите роль редактора (слишком широкая роль !!) в учетной записи службы Compute Engine по умолчанию, у нее не будет доступа к API, даже если задана область действия. Область действия - это дополнительное ограничение, но не достаточное разрешение. - person guillaume blaquiere; 08.03.2021