Быть может кто-то не знает, но утилита gsutil умеет работать как с GCS, так и с S3. Например, посмотреть список файлов в бакете можно так:

gsutil ls s3://bucket-name

Есть несколько способов указать, какие именно данные авторизации использовать при доступе к S3. По умолчанию, gsutil читает access_key и secret_key из файла credentials в директории ~/.aws. Кроме того, можно использовать ~/.boto для указания файла, откуда читать ключи.

У меня была ситуация, при которой потребовалось скопировать данные из бакета S3, который принадлежит другой организации и для доступа к нему были выданы необходимые ключи. При этом на сервере использовались ключи для доступа к нашим бакетам. Утилита s3cmd, например, позволяет указать файл, откуда следует читать ключи, с помощью ключа -c FILE или —config=FILE.

Для gsutil также можно указать файл, но это происходит слегка непрозрачно. В первую очередь следует учесть, что ~/.aws/credentials и профиль [default] очень часто имеет приоритет.

Итак, как же сделать так, что оно работало?

Если еще нет настроенного аккаунта AWS

Использовать ~/.boto или создать отдельный файл boto, например, ~/.boto-<profile-name>. Указать там aws_access_key_id и aws_secret_access_key в разделе [Credentials]. И можно запускать gsutil:

BOTO_CONFIG=~/.boto-<profile-name> gsutil ls s3://bucket

Это сработает, если нет файла ~/.aws/credentials и профиля [default] в нем.

Или создать ~/.aws/credentials и создать там профиль [default]:

[default]
aws_access_key_id = <access-key>
aws_secret_access_key = <secret-key>

В другом случае

Если же уже существует настроенный аккаунт AWS и не хочется переписывать дефолтные настройки, то можно добавить в существующий файл ~/.boto отдельный профиль в разделе [Credentials]. Например:

[Credentials]
…
[profile profile-name]
aws_access_key_id = <access-key>
aws_secret_access_key = <secret-key>
…
[Boto]
…

И запустить gsutil уже с указанием другой переменной окружения:

AWS_PROFILE=<profile-name> gsutil ls s3://bucket

Второй вариант работает при условии, что boto >= 2.24.0.