Мое приложение 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, которые мне не нужны.