Безопасный доступ к данным в GCS
В этом руководстве показано, как безопасно аутентифицироваться в 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:

Введите имя и описание для сервисной учётной записи, например:
Нажмите Create and continue

Назначьте сервисной учётной записи роль Storage Object User:

Данная роль предоставляет доступ на чтение и запись объектов GCS
Для доступа только на чтение используйте вместо этого роль Storage Object Viewer
Для более гранулярного контроля можно создать пользовательскую роль
Нажмите Continue, затем Done
Запишите адрес электронной почты учётной записи службы:

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

Если вы не видите раздел "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 — вы не сможете просмотреть секрет повторно.
Примеры ключей приведены ниже:
Храните эти учетные данные в безопасном месте. После закрытия этого экрана секретный ключ невозможно будет получить повторно. В случае утери секретного ключа потребуется сгенерировать новые ключи.
Использование HMAC-ключей с ClickHouse Cloud
Теперь вы можете использовать учётные данные HMAC для доступа к GCS из ClickHouse Cloud. Для этого используйте табличную функцию GCS:
Используйте маски для указания нескольких файлов:
HMAC-аутентификация в ClickPipes для GCS
ClickPipes использует ключи HMAC (Hash-based Message Authentication Code) для аутентификации с Google Cloud Storage.
При настройке ClickPipe для GCS:
- Во время настройки ClickPipe в поле
Authentication methodвыберитеCredentials - Укажите учётные данные HMAC, полученные на предыдущих шагах

Аутентификация через сервисный аккаунт в настоящее время не поддерживается — необходимо использовать HMAC-ключи
URL бакета GCS должен иметь формат: https://storage.googleapis.com/<bucket>/<path> (а не gs://)
HMAC-ключи должны быть связаны с сервисной учетной записью, которая имеет роль roles/storage.objectViewer, включающую:
storage.objects.list: для вывода списка объектов в бакетеstorage.objects.get: для извлечения/чтения объектов
Рекомендации
Используйте отдельные сервисные аккаунты для разных сред
Создавайте отдельные сервисные аккаунты для сред разработки, тестирования (staging) и промышленной эксплуатации (production). Например:
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-ключи
Google Cloud не устанавливает срок действия HMAC-ключей, поэтому вам необходимо реализовать собственную политику ротации.
Мониторинг доступа с помощью Cloud Audit Logs
Включите и отслеживайте Cloud Audit Logs для Cloud Storage:
- Перейдите в IAM & Admin → Audit Logs
- Найдите Cloud Storage в списке
- Включите
Admin Read,Data ReadиData Write logs - Используйте эти журналы для мониторинга активности доступа и обнаружения аномалий