应用程序使用案例:-我们有两个Google帐户(1个免费帐户(例如A1),1个付费帐户(例如A2)),现在,我们希望在App Engine上部署一个Java应用程序,将收听/订阅A2帐户上的pubsub-topic,阅读消息并将消息发布到A1上的主题。
它涉及3个服务帐户1. A1帐户服务帐户密码; 2. A2帐号服务帐号机密; 3. App Engine服务帐户。
进度:我能够使应用程序从本地VM实现此用例,能够从gcloud shell执行相同的应用程序,但是当我部署到App Engine 时,低于错误。
错误:
> 2019-11-13 13:05:39.611 PST
> [m~dcim-apps-and-apis/v1.422431275017436690].<stdout>: 2019-11-13
> 21:05:39.611 INFO 1 --- [pool-4-thread-1]
> c.e.dcim.connector.pub.GoogleProducer : destination topic name
> =TOPIC_2578
>
> 2019-11-13 13:05:40.269 PST
> [m~dcim-apps-and-apis/v1.422431275017436690].<stdout>: 2019-11-13
> 21:05:40.269 WARN 1 --- [ault-executor-0]
> i.g.n.s.i.n.u.internal.MacAddressUtil : Failed to find a usable
> hardware address from the network interfaces; using random bytes:
> 7e:a1:5d:23:e6:c9:b8:11
>
> 2019-11-13 13:05:41.293 PST
> com.google.cloud.pubsub.v1.StreamingSubscriberConnection$1 onFailure:
> terminated streaming with exception
> (StreamingSubscriberConnection.java:243)
> com.google.api.gax.rpc.PermissionDeniedException:
> io.grpc.StatusRuntimeException: PERMISSION_DENIED: User not authorized
> to perform this action. at
> com.google.api.gax.rpc.ApiExceptionFactory.createException(ApiExceptionFactory.java:55)
> at
> com.google.cloud.pubsub.v1.StreamingSubscriberConnection$1.onFailure(StreamingSubscriberConnection.java:241)
> at com.google.common.util.concurrent.Futures$4.run(Futures.java:1123)
> at
> com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:435)
> at
> com.google.common.util.concurrent.AbstractFuture.executeListener(AbstractFuture.java:900)
> at
> com.google.common.util.concurrent.AbstractFuture.complete(AbstractFuture.java:811)
> at
> com.google.common.util.concurrent.AbstractFuture.setException(AbstractFuture.java:675)
> at
> com.google.common.util.concurrent.SettableFuture.setException(SettableFuture.java:53)
> at
> com.google.cloud.pubsub.v1.StreamingSubscriberConnection$StreamingPullResponseObserver.onError(StreamingSubscriberConnection.java:178)
> at
> io.grpc.stub.ClientCalls$StreamObserverToCallListenerAdapter.onClose(ClientCalls.java:419)
> at
> io.grpc.ForwardingClientCallListener.onClose(ForwardingClientCallListener.java:41)
> at
> io.grpc.internal.CensusStatsModule$StatsClientInterceptor$1$1.onClose(CensusStatsModule.java:684)
> at
> io.grpc.ForwardingClientCallListener.onClose(ForwardingClientCallListener.java:41)
> at
> io.grpc.internal.CensusTracingModule$TracingClientInterceptor$1$1.onClose(CensusTracingModule.java:391)
> at
> io.grpc.internal.ClientCallImpl.closeObserver(ClientCallImpl.java:475)
> at io.grpc.internal.ClientCallImpl.access$300(ClientCallImpl.java:63)
> at
> io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl.close(ClientCallImpl.java:557)
> at
> io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl.access$600(ClientCallImpl.java:478)
> at
> io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInContext(ClientCallImpl.java:590)
> at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37) at
> io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:123)
> at
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
> at java.util.concurrent.FutureTask.run(FutureTask.java:266) at
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
> at
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:295)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
> at java.lang.Thread.run(Thread.java:748) Caused by:
> io.grpc.StatusRuntimeException: PERMISSION_DENIED: User not authorized
> to perform this action. at
> io.grpc.Status.asRuntimeException(Status.java:526) ... 19 more
我已为App Engine服务帐户授予所有者角色,但没有运气。
如果您有任何解决方案和建议,请告诉我。如果有任何疑问,请告诉我。