UPDATE: Check Will's comment. This answer might be outdated and no longer work. Before applying it, be sure to test extensively.
According to the Cloud Tasks documentation, requests incoming from Cloud Tasks will have the X-AppEngine-QueueName
header.
This header does not appear listed in the GAE docs about requests headers removed, but I just tested it and this header is also removed.
To secure your GAE app to only be called through Cloud Tasks, validate that the X-AppEngine-QueueName
header is in one of the approved queues that you want to allow to call your app.