Ideally, we could sign an S3 put URL on the queue and return in the task submitter, who then when the task is uploaded to S3, as the queue to accept it. That way the queue can download and validate the submitted task.

For security reasons I don't think that there should be any other component with write access to the s3 bucket of truth. Always having the queue sign URLs for others make it easy to validate that we're not allowing arbitrary uploads, such as overwriting task definitions of release tasks.