В этом руководстве показано, как безопасно пройти аутентификацию в Google Cloud Storage (GCS) и получить доступ к своим данным из ClickHouse Cloud.
Введение
ClickHouse Cloud подключается к GCS с помощью HMAC-ключей (Hash-based Message Authentication Code), связанных с сервисным аккаунтом Google Cloud. Этот подход обеспечивает безопасный доступ к вашим бакетам GCS без прямой передачи учетных данных в запросах.
Как это работает:
- Вы создаете сервисный аккаунт Google Cloud с соответствующими разрешениями для GCS
- Вы генерируете HMAC-ключи для этого сервисного аккаунта
- Вы предоставляете эти HMAC-учетные данные ClickHouse Cloud
- ClickHouse Cloud использует эти учетные данные для доступа к вашим бакетам GCS
Этот подход позволяет централизованно управлять доступом к бакетам GCS через политики IAM сервисного аккаунта, поэтому предоставлять или отзывать доступ можно без изменения политик отдельных бакетов.
Предварительные требования
Чтобы следовать этому руководству, вам потребуется:
- Активный сервис ClickHouse Cloud
- Проект Google Cloud с включенным Cloud Storage
- Разрешения на создание сервисных аккаунтов и генерацию HMAC-ключей в вашем проекте GCP
Настройка
Создайте сервисный аккаунт Google Cloud
- В консоли Google Cloud перейдите в IAM & Admin → Service Accounts

- В левом меню выберите
Service accounts, затем нажмитеCreate service account:

Введите имя и описание для сервисного аккаунта, например:
Service account name: clickhouse-gcs-access (or your preferred name)
Service account description: Service account for ClickHouse Cloud to access GCS bucketsНажмите Create and continue

Назначьте сервисному аккаунту роль Storage Object User:

Эта роль предоставляет доступ к объектам GCS на чтение и запись
Нажмите Continue, затем Done
Сохраните адрес электронной почты сервисного аккаунта:

Предоставьте сервисному аккаунту доступ к бакету
Вы можете предоставить доступ либо на уровне проекта, либо на уровне отдельного бакета.
Вариант 1: Предоставить доступ к конкретным бакетам (рекомендуется)
- Перейдите в
Cloud Storage→Buckets - Нажмите на бакет, к которому хотите предоставить доступ
- Откройте вкладку
Permissions - В разделе "Permissions" нажмите
Grant accessдля субъекта, созданного на предыдущих шагах - В поле "New principals" введите адрес электронной почты вашего сервисного аккаунта
- Выберите подходящую роль:
- Storage Object User для доступа на чтение и запись
- Storage Object Viewer для доступа только для чтения
- Нажмите
Save - Повторите эти действия для всех остальных бакетов
Вариант 2: Предоставить доступ на уровне проекта
- Перейдите в
IAM & Admin→IAM - Нажмите
Grant access - Введите адрес электронной почты вашего сервисного аккаунта в поле
New principals - Выберите Storage Object User (или Storage Object Viewer для доступа только для чтения)
- Нажмите SAVE
Сгенерируйте HMAC-ключи для сервисного аккаунта
Перейдите в Cloud Storage → Settings → Interoperability:

Если раздела "Access keys" нет, нажмите Enable interoperability access
В разделе "Access keys for service accounts" нажмите Create a key for a service account:

Выберите сервисный аккаунт, который вы создали ранее (например, clickhouse-gcs-access@your-project.iam.gserviceaccount.com)
Нажмите Create key:

На экране отобразится HMAC-ключ. Сразу сохраните и Access Key, и Secret — позже секретный ключ посмотреть уже не получится.
Ниже приведены примеры ключей:
Access Key: GOOG1EF4YBJVNFQ2YGCP3SLV4Y7CMFHW7HPC6EO7RITLJDDQ75639JK56SQVD
Secret: nFy6DFRr4sM9OnV6BG4FtWVPR25JfqpmcdZ6w9nVИспользование HMAC-ключей с ClickHouse Cloud
Теперь вы можете использовать учетные данные HMAC для доступа к GCS из ClickHouse Cloud. Для этого используйте табличную функцию GCS:
SELECT *
FROM gcs(
'https://storage.googleapis.com/clickhouse-docs-example-bucket/epidemiology.csv',
'GOOG1E...YOUR_ACCESS_KEY',
'YOUR_SECRET_KEY',
'CSVWithNames'
);Используйте подстановочные шаблоны для нескольких файлов:
SELECT *
FROM gcs(
'https://storage.googleapis.com/clickhouse-docs-example-bucket/*.parquet',
'GOOG1E...YOUR_ACCESS_KEY',
'YOUR_SECRET_KEY',
'Parquet'
);HMAC-аутентификация в ClickPipes для GCS
ClickPipes использует ключи HMAC (Hash-based Message Authentication Code) для аутентификации в Google Cloud Storage.
- Выберите
Credentialsв разделеAuthentication methodпри настройке ClickPipe - Укажите учетные данные HMAC, полученные на предыдущих шагах

Ключи HMAC должны быть связаны с сервисным аккаунтом, которому назначена роль roles/storage.objectViewer, включающая:
storage.objects.list: для получения списка объектов в бакетеstorage.objects.get: для чтения объектов
Рекомендации
Используйте отдельные сервисные аккаунты для разных сред
Создайте отдельные сервисные аккаунты для сред разработки, стейджинга и продакшна. Например:
clickhouse-gcs-dev@project.iam.gserviceaccount.comclickhouse-gcs-staging@project.iam.gserviceaccount.comclickhouse-gcs-prod@project.iam.gserviceaccount.com
Это позволит вам легко отозвать доступ для конкретной среды, не затрагивая остальные.
Применяйте принцип наименьших привилегий
Предоставляйте только минимально необходимые разрешения:
- Используйте Storage Object Viewer для доступа только для чтения
- Предоставляйте доступ к конкретным бакетам, а не ко всему проекту
- При необходимости используйте условия на уровне бакета, чтобы ограничить доступ к определённым путям
Регулярно меняйте ключи HMAC
Настройте график ротации ключей:
- Сгенерируйте новые ключи HMAC
- Обновите конфигурации ClickHouse, указав новые ключи
- Проверьте работу с новыми ключами
- Удалите старые ключи HMAC
Мониторинг доступа с помощью Cloud Audit Logs
Включите Cloud Audit Logs для Cloud Storage и отслеживайте доступ:
- Перейдите в IAM & Admin → Audit Logs
- Найдите в списке Cloud Storage
- Включите
Admin Read,Data ReadиData Write logs - Используйте эти журналы для мониторинга шаблонов доступа и выявления аномалий