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.