Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Безопасный доступ к данным в GCS

В этом руководстве показано, как безопасно пройти аутентификацию в Google Cloud Storage (GCS) и получить доступ к своим данным из ClickHouse Cloud.

Введение

ClickHouse Cloud подключается к GCS с помощью HMAC-ключей (Hash-based Message Authentication Code), связанных с сервисным аккаунтом Google Cloud. Этот подход обеспечивает безопасный доступ к вашим бакетам GCS без прямой передачи учетных данных в запросах.

Как это работает:

  1. Вы создаете сервисный аккаунт Google Cloud с соответствующими разрешениями для GCS
  2. Вы генерируете HMAC-ключи для этого сервисного аккаунта
  3. Вы предоставляете эти HMAC-учетные данные ClickHouse Cloud
  4. ClickHouse Cloud использует эти учетные данные для доступа к вашим бакетам GCS

Этот подход позволяет централизованно управлять доступом к бакетам GCS через политики IAM сервисного аккаунта, поэтому предоставлять или отзывать доступ можно без изменения политик отдельных бакетов.

Предварительные требования

Чтобы следовать этому руководству, вам потребуется:

  • Активный сервис ClickHouse Cloud
  • Проект Google Cloud с включенным Cloud Storage
  • Разрешения на создание сервисных аккаунтов и генерацию HMAC-ключей в вашем проекте GCP

Настройка

Создайте сервисный аккаунт Google Cloud

  1. В консоли Google Cloud перейдите в IAM & Admin → Service Accounts
  1. В левом меню выберите 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: Предоставить доступ к конкретным бакетам (рекомендуется)

  1. Перейдите в Cloud StorageBuckets
  2. Нажмите на бакет, к которому хотите предоставить доступ
  3. Откройте вкладку Permissions
  4. В разделе "Permissions" нажмите Grant access для субъекта, созданного на предыдущих шагах
  5. В поле "New principals" введите адрес электронной почты вашего сервисного аккаунта
  6. Выберите подходящую роль:
  • Storage Object User для доступа на чтение и запись
  • Storage Object Viewer для доступа только для чтения
  1. Нажмите Save
  2. Повторите эти действия для всех остальных бакетов

Вариант 2: Предоставить доступ на уровне проекта

  1. Перейдите в IAM & AdminIAM
  2. Нажмите Grant access
  3. Введите адрес электронной почты вашего сервисного аккаунта в поле New principals
  4. Выберите Storage Object User (или Storage Object Viewer для доступа только для чтения)
  5. Нажмите SAVE

Сгенерируйте HMAC-ключи для сервисного аккаунта

Перейдите в Cloud StorageSettingsInteroperability:

Если раздела "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.

При настройке GCS ClickPipe:

  1. Выберите Credentials в разделе Authentication method при настройке ClickPipe
  2. Укажите учетные данные HMAC, полученные на предыдущих шагах

Ключи HMAC должны быть связаны с сервисным аккаунтом, которому назначена роль roles/storage.objectViewer, включающая:

  • storage.objects.list: для получения списка объектов в бакете
  • storage.objects.get: для чтения объектов

Рекомендации

Используйте отдельные сервисные аккаунты для разных сред

Создайте отдельные сервисные аккаунты для сред разработки, стейджинга и продакшна. Например:

  • clickhouse-gcs-dev@project.iam.gserviceaccount.com
  • clickhouse-gcs-staging@project.iam.gserviceaccount.com
  • clickhouse-gcs-prod@project.iam.gserviceaccount.com

Это позволит вам легко отозвать доступ для конкретной среды, не затрагивая остальные.

Применяйте принцип наименьших привилегий

Предоставляйте только минимально необходимые разрешения:

  • Используйте Storage Object Viewer для доступа только для чтения
  • Предоставляйте доступ к конкретным бакетам, а не ко всему проекту
  • При необходимости используйте условия на уровне бакета, чтобы ограничить доступ к определённым путям

Регулярно меняйте ключи HMAC

Настройте график ротации ключей:

  • Сгенерируйте новые ключи HMAC
  • Обновите конфигурации ClickHouse, указав новые ключи
  • Проверьте работу с новыми ключами
  • Удалите старые ключи HMAC

Мониторинг доступа с помощью Cloud Audit Logs

Включите Cloud Audit Logs для Cloud Storage и отслеживайте доступ:

  1. Перейдите в IAM & Admin → Audit Logs
  2. Найдите в списке Cloud Storage
  3. Включите Admin Read, Data Read и Data Write logs
  4. Используйте эти журналы для мониторинга шаблонов доступа и выявления аномалий
Navigation