When you use Google Takeout, Google creates a Google Cloud Storage bucket and places the exported data on that bucket. The bucket is owned by Google and the user you exported with is granted read-only access to the data. Since the bucket is owned by Google, no one other than the initiating user has read access to the bucket (others being able to read your data would be bad). This is why your service account didn't work.
gcloud always requests the full cloud.platform
OAuth scope which gives it full permissions for Cloud Storage. The Takeout bucket itself only granted you read permission but any other buckets you have read-write access to will be read-write accessible by gcloud.
To achieve what you are asking you'll need to write a script that interacts with Cloud Storage API and only uses the devstorage.read_only
scope. There are also third party tools like rsync and GAM which support downloading Takeout files from a bucket with read-only access.