Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

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

В этом руководстве показано, как клиенты ClickHouse Cloud могут использовать ролевой доступ для аутентификации в Amazon Simple Storage Service (S3) и безопасного доступа к своим данным. Прежде чем переходить к настройке безопасного доступа к S3, важно понять, как это работает. Ниже приведен обзор того, как сервисы ClickHouse могут получать доступ к приватным S3 бакетам, принимая на себя роль в аккаунте AWS клиента.

Обзор безопасного доступа к S3 с ClickHouse

Этот подход позволяет клиентам управлять всем доступом к своим S3 бакетам в одном месте (в политике IAM для принимаемой роли), не просматривая все политики бакетов, чтобы добавить или удалить доступ. В разделе ниже вы узнаете, как это настроить.

Получение ARN роли IAM вашего сервиса ClickHouse

  1. Войдите в свой аккаунт ClickHouse Cloud.

  2. Выберите сервис ClickHouse, для которого хотите создать интеграцию.

  3. Выберите вкладку Settings.

  4. Прокрутите страницу вниз до раздела Network security information в нижней части страницы.

  5. Скопируйте значение Service role ID (IAM) для сервиса, как показано ниже.

Получение ARN роли IAM сервиса ClickHouse

Настройка IAM Assume Role

IAM Assume Role можно настроить одним из двух способов:

Развертывание с помощью стека CloudFormation

  1. Войдите в свою учетную запись AWS в браузере под пользователем IAM, у которого есть права на создание роли IAM и управление ею.

  2. Перейдите по следующему URL CloudFormation, чтобы заполнить параметры стека CloudFormation.

  3. Введите (или вставьте) Service role ID (IAM) для вашего сервиса, который вы получили ранее, в поле "ClickHouse Instance Roles" ID сервисной роли можно вставить в точности так, как он отображается в консоли Cloud.

  4. Введите имя вашего бакета в поле "Bucket Names". Если URL вашего бакета — https://ch-docs-s3-bucket.s3.eu-central-1.amazonaws.com/clickhouseS3/, то имя бакета — ch-docs-s3-bucket.

  1. Настройте стек CloudFormation. Ниже приведена дополнительная информация об этих параметрах.
Параметр Значение по умолчанию Описание
RoleName ClickHouseAccess-001 Имя новой роли, которую ClickHouse Cloud будет использовать для доступа к вашему S3 бакету.
Role Session Name * Role Session Name можно использовать как общий секрет для дополнительной защиты вашего бакета.
ClickHouse Instance Roles Список ролей IAM сервиса ClickHouse, разделенных запятыми, которые могут использовать эту защищенную интеграцию с S3.
Bucket Access Read Задает уровень доступа для указанных бакетов.
Bucket Names Список имен бакетов, разделенных запятыми, к которым эта роль будет иметь доступ. Примечание: используйте имя бакета, а не полный ARN бакета.
  1. Установите флажок I acknowledge that AWS CloudFormation might create IAM resources with custom names.

  2. Нажмите кнопку Create stack в правом нижнем углу

  3. Убедитесь, что создание стека CloudFormation завершилось без ошибок.

  4. Выберите только что созданный Stack, затем откройте вкладку Outputs этого стека CloudFormation

  5. Скопируйте значение RoleArn для этой интеграции — оно потребуется для доступа к вашему S3 бакету.

Вывод стека CloudFormation с IAM Role ARN

Создайте роль IAM вручную

  1. Войдите в свой аккаунт AWS в браузере под пользователем IAM, у которого есть права на создание и управление ролью IAM.

  2. Перейдите в консоль сервиса IAM

  3. Создайте новую роль IAM со следующими политиками IAM и доверия. Замените {ClickHouse_IAM_ARN} на ARN роли IAM, относящейся к вашему экземпляру ClickHouse.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "{ClickHouse_IAM_ARN}"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

Политика IAM

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:GetBucketLocation",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::{BUCKET_NAME}"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "s3:Get*",
                "s3:List*"
            ],
            "Resource": [
                "arn:aws:s3:::{BUCKET_NAME}/*"
            ],
            "Effect": "Allow"
        }
    ]
}
  1. После создания скопируйте новый ARN роли IAM — он понадобится для доступа к вашему S3 бакету.

Получите доступ к S3 бакету с ролью ClickHouseAccess

ClickHouse Cloud позволяет указывать extra_credentials в табличной функции S3. Ниже приведён пример выполнения запроса с использованием только что созданной роли, скопированной выше.

DESCRIBE TABLE s3('https://s3.amazonaws.com/BUCKETNAME/BUCKETOBJECT.csv','CSVWithNames',extra_credentials(role_arn = 'arn:aws:iam::111111111111:role/ClickHouseAccessRole-001'))

Ниже приведён пример запроса, в котором role_session_name используется в качестве общего секрета для запроса данных из бакета. Если role_session_name указан неверно, эта операция завершится ошибкой.

DESCRIBE TABLE s3('https://s3.amazonaws.com/BUCKETNAME/BUCKETOBJECT.csv','CSVWithNames',extra_credentials(role_arn = 'arn:aws:iam::111111111111:role/ClickHouseAccessRole-001', role_session_name = 'secret-role-name'))

Расширенный контроль действий

Для более строгого управления доступом можно ограничить политику бакета так, чтобы она принимала только запросы, поступающие через конечные точки VPC ClickHouse Cloud, с помощью условия aws:SourceVpce. Чтобы получить конечные точки VPC для вашего региона ClickHouse Cloud, откройте терминал и выполните:

# Replace <your-region> with your ClickHouse Cloud region
curl -s https://api.clickhouse.cloud/static-ips.json | jq -r '.aws[] | select(.region == "<your-region>") | .s3_endpoints[]'

Затем добавьте в политику IAM правило запрета, используя полученные конечные точки:

{
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "VisualEditor0",
                "Effect": "Allow",
                "Action": [
                    "s3:List*",
                    "s3:Get*"
                ],
                "Resource": [
                    "arn:aws:s3:::{BUCKET_NAME}",
                    "arn:aws:s3:::{BUCKET_NAME}/*"
                ]
            },
            {
                "Sid": "VisualEditor3",
                "Effect": "Deny",
                "Action": [
                    "s3:GetObject"
                ],
                "Resource": "*",
                "Condition": {
                    "StringNotEquals": {
                        "aws:SourceVpce": [
                            "{ClickHouse VPC ID from your S3 region}",
                            "{ClickHouse VPC ID from your S3 region}",
                            "{ClickHouse VPC ID from your S3 region}"
                        ]
                    }
                }
            }
        ]
}

Подробнее о том, как получить доступ к конечным точкам сервисов ClickHouse Cloud, см. в разделе IP-адреса Cloud.

Navigation