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

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

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

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

2 - Перейдите по этой ссылке, чтобы создать стек CloudFormation.

3 - Введите (или вставьте) IAM Role, относящуюся к сервису ClickHouse.

4 - Настройте стек CloudFormation. Ниже приведена дополнительная информация по параметрам.

ParameterDefault ValueDescription
RoleNameClickHouseAccess-001Имя новой роли, которую ClickHouse Cloud будет использовать для доступа к вашему бакету S3
Role Session Name*Role Session Name может использоваться как общий секрет для дополнительной защиты вашего бакета.
ClickHouse Instance RolesСписок через запятую IAM-ролей сервисов ClickHouse, которые могут использовать эту интеграцию Secure S3.
Bucket AccessReadУстанавливает уровень доступа для указанных бакетов.
Bucket NamesСписок через запятую имен бакетов, к которым эта роль будет иметь доступ.

Примечание: Указывайте не полный ARN бакета, а только его имя.

5 - Установите флажок I acknowledge that AWS CloudFormation might create IAM resources with custom names.

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

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

8 - Перейдите на вкладку Outputs стека CloudFormation.

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

Выходные данные стека CloudFormation, показывающие ARN IAM-роли

Вариант 2: Ручное создание IAM-роли

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

2 - Перейдите в IAM Service Console.

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 (пожалуйста, замените {BUCKET_NAME} на имя вашего бакета):

{
    "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"
        }
    ]
}

4 - После создания скопируйте новый 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'))
Примечание

Мы рекомендуем размещать исходный S3‑бакет в том же регионе, что и ваш ClickHouse Cloud Service, чтобы снизить расходы на передачу данных. Для получения дополнительной информации см. цены на S3.