Перейти к основному содержимому
Перейти к основному содержимому

Безопасный доступ к данным в 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

Совет

Для доступа только на чтение используйте вместо этого роль Storage Object Viewer Для более гранулярного контроля можно создать пользовательскую роль

Нажмите Continue, затем Done

Запишите адрес электронной почты учётной записи службы:

Предоставьте сервисному аккаунту доступ к бакету

Доступ можно предоставить на уровне проекта или на уровне отдельного бакета.

Вариант 1: Предоставить доступ к конкретным бакетам (рекомендуется)

  1. Перейдите в раздел Cloud StorageBuckets
  2. Нажмите на бакет, к которому хотите предоставить доступ
  3. Откройте вкладку Permissions
  4. В разделе «Permissions» нажмите Grant access для принципала, созданного на предыдущих шагах
  5. В поле "New principals" введите адрес электронной почты сервисного аккаунта
  6. Выберите роль:
  • Пользователь объектного хранилища с правами чтения и записи
  • роль 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»
Рекомендация по безопасности

Предоставляйте доступ только к тем бакетам, к которым необходим доступ 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 — вы не сможете просмотреть секрет повторно.

Примеры ключей приведены ниже:

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.

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

  1. Во время настройки ClickPipe в поле Authentication method выберите Credentials
  2. Укажите учётные данные 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.com
  • clickhouse-gcs-staging@project.iam.gserviceaccount.com
  • clickhouse-gcs-prod@project.iam.gserviceaccount.com

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

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

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

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

Регулярно выполняйте ротацию HMAC-ключей

Настройте план ротации ключей:

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

Google Cloud не устанавливает срок действия 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. Используйте эти журналы для мониторинга активности доступа и обнаружения аномалий