S3
В этом документе описаны параметры, необходимые для доступа к AWS S3. Эти параметры применяются к:
- Свойствам Catalog.
- Свойствам Table Valued Function.
- Свойствам Broker Load.
- Свойствам Export.
- Свойствам Outfile.
Настройка сертификата CA в BE для HTTPS
Начиная с Doris 2.1, можно явно настроить ca_cert_file_paths в be.conf для доступа Doris BE к S3 по HTTPS.
По умолчанию, если ca_cert_file_paths не задан, Doris использует стандартные сертификаты CA операционной системы. В большинстве окружений задавать этот параметр вручную не требуется. Настройте его в следующих случаях:
- На узле BE отсутствуют системные сертификаты CA или установленный набор сертификатов CA устарел.
- Узел BE работает в минимальном контейнере или образе, который не содержит пакет
ca-certificates. - Стандартный путь к файлу CA на узле BE недействителен или у процесса Doris нет разрешения на чтение этого файла.
- В вашем окружении используется самоподписанный сертификат, частный CA либо корпоративный прокси или шлюз, который переподписывает трафик TLS.
- При доступе к S3 возникают ошибки, такие как
Problem with the SSL CA certилиcurl 77: Problem with the SSL CA cert (path? access rights?).
Для версий без
ca_cert_file_paths: Параметрca_cert_file_pathsдоступен начиная с Doris 2.1. Если вы используете Doris 2.0.x или более раннюю версию и сталкиваетесь с ошибками сертификатов CA при работе с SSL, убедитесь, что системные сертификаты CA установлены правильно, а набор сертификатов CA находится по пути/etc/ssl/certs/ca-certificates.crt:
- RHEL / CentOS / RockyLinux:
yum install -y ca-certificates
update-ca-trust
ln -s /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt /etc/ssl/certs/ca-certificates.crt- Debian / Ubuntu:
apt-get install -y ca-certificatesЗатем перезапустите все узлы BE. Подробнее о проблемах с сертификатами см. Часто задаваемые вопросы по Lakehouse: проблемы с сертификатами.
Пример:
# be.conf
ca_cert_file_paths = /etc/ssl/certs/ca-certificates.crt
Типичные пути к наборам сертификатов CA:
- Debian / Ubuntu:
/etc/ssl/certs/ca-certificates.crt - CentOS / RockyLinux:
/etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
Задайте этот параметр на каждом узле BE, который может обращаться к S3, и убедитесь, что файл сертификатов существует и доступен для чтения процессу Doris. После изменения be.conf перезапустите соответствующие узлы BE, чтобы изменения вступили в силу.
Обзор параметров
| Имя свойства | Прежнее имя | Описание | По умолчанию | Обязательное |
|---|---|---|---|---|
| s3.endpoint | Адрес конечной точки сервиса S3, например s3.us-east-1.amazonaws.com | Не задано | Нет | |
| s3.access_key | AWS Access Key для аутентификации | Не задано | Нет | |
| s3.secret_key | AWS Secret Key для аутентификации | Не задано | Нет | |
| s3.region | Регион S3, например us-east-1. Настоятельно рекомендуется указывать | Не задано | Да | |
| s3.use_path_style | Использовать ли адресацию path-style | FALSE | Нет | |
| s3.connection.maximum | Максимальное число соединений при большом числе параллельных запросов | 50 | Нет | |
| s3.connection.request.timeout | Тайм-аут запроса (в миллисекундах), задаёт время ожидания получения соединения | 3000 | Нет | |
| s3.connection.timeout | Тайм-аут установления соединения (в миллисекундах) | 1000 | Нет | |
| s3.role_arn | ARN роли, указываемый при использовании режима Assume Role | Не задано | Нет | |
| s3.external_id | Внешний идентификатор, используемый с s3.role_arn | Не задано | Нет | |
| s3.credentials_provider_type | Тип поставщика учётных данных для аутентификации AWS (используется без AK/SK; в режиме IAM Role служит источником учётных данных для STS) | DEFAULT | Нет |
Примечание о версиях:
s3.credentials_provider_typeподдерживается начиная с 3.1.4 и 4.0.3.
Настройка аутентификации
Doris поддерживает следующие три способа доступа к S3:
1. Прямое использование Access Key и Secret Key (AK/SK)
"s3.access_key"="your-access-key",
"s3.secret_key"="your-secret-key",
"s3.endpoint"="https://s3.us-east-1.amazonaws.com",
"s3.region"="us-east-1"
2. Режим IAM Role (Assume Role)
Подходит для доступа между учётными записями и для доступа с временной авторизацией. Doris автоматически получает временные учётные данные на основе разрешений роли.
"s3.role_arn"="arn:aws:iam::123456789012:role/demo-role",
"s3.external_id"="external-identifier",
"s3.endpoint"="https://s3.us-east-1.amazonaws.com",
"s3.region"="us-east-1"
Настройка s3.credentials_provider_type в режиме IAM Role
Если задан s3.role_arn, параметр s3.credentials_provider_type определяет поставщика исходных учётных данных для вызова STS AssumeRole:
- Получение исходных учётных данных через
s3.credentials_provider_type. - Вызов STS
AssumeRoleс исходными учётными данными. - Доступ к S3 с возвращёнными временными учётными данными.
Примеры IAM Role + s3.credentials_provider_type
Пример 1: EC2 Instance Profile как источник учётных данных для STS
"s3.role_arn"="arn:aws:iam::123456789012:role/demo-role",
"s3.external_id"="external-identifier",
"s3.credentials_provider_type"="INSTANCE_PROFILE",
"s3.endpoint"="https://s3.us-east-1.amazonaws.com",
"s3.region"="us-east-1"
Пример 2: Web Identity (например, IRSA) как источник учётных данных для STS
"s3.role_arn"="arn:aws:iam::123456789012:role/demo-role",
"s3.credentials_provider_type"="WEB_IDENTITY",
"s3.endpoint"="https://s3.us-east-1.amazonaws.com",
"s3.region"="us-east-1"
Пример 3: Метаданные контейнера как источник учётных данных для STS
"s3.role_arn"="arn:aws:iam::123456789012:role/demo-role",
"s3.credentials_provider_type"="CONTAINER",
"s3.endpoint"="https://s3.us-east-1.amazonaws.com",
"s3.region"="us-east-1"
Пример 4: Стандартная цепочка поставщиков как источник учётных данных для STS
"s3.role_arn"="arn:aws:iam::123456789012:role/demo-role",
"s3.credentials_provider_type"="DEFAULT",
"s3.endpoint"="https://s3.us-east-1.amazonaws.com",
"s3.region"="us-east-1"
3. Указание источника учётных данных с помощью s3.credentials_provider_type
Подходит для сценариев без явно заданных AK/SK, например при использовании EC2 Instance Profile, метаданных контейнера или Web Identity.
"s3.credentials_provider_type"="INSTANCE_PROFILE",
"s3.endpoint"="https://s3.us-east-1.amazonaws.com",
"s3.region"="us-east-1"
Поддерживаемые значения s3.credentials_provider_type
| Значение | Описание |
|---|---|
| DEFAULT | Использовать стандартную цепочку поставщиков |
| ENV | Считывать учётные данные из переменных окружения |
| SYSTEM_PROPERTIES | Считывать учётные данные из системных свойств |
| WEB_IDENTITY | Использовать учётные данные Web Identity Token |
| CONTAINER | Использовать учётные данные из метаданных контейнера |
| INSTANCE_PROFILE | Использовать учётные данные EC2 Instance Profile |
| ANONYMOUS | Анонимный доступ (для общедоступных бакетов) |
Правила при совместной настройке
- Если заданы и
s3.access_key, иs3.secret_key, в первую очередь используются AK/SK. - Если AK/SK не заданы, а
s3.role_arnзадан, используется IAM Role. В этом случаеs3.credentials_provider_typeвыбирает источник учётных данных для STS. - Если не заданы ни AK/SK, ни
s3.role_arn, параметрs3.credentials_provider_typeнапрямую определяет поставщика учётных данных для клиента S3.
Примечание:
s3.access_keyиs3.secret_keyнеобходимо задавать вместе.
Инструкции по настройке аутентификации и авторизации AWS приведены в документе Аутентификация и авторизация AWS
EKS Pod Identity (начиная с 4.1.5)
Начиная с 4.1.5, BE и связанные с ним механизмы доступа к хранилищам на C++ поддерживают конечную точку учётных данных контейнера EKS Pod Identity и файл токена авторизации. EKS должен передать в Pod переменные AWS_CONTAINER_CREDENTIALS_FULL_URI и AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE, а процесс Doris должен иметь доступ к конечной точке и возможность чтения файла токена. При использовании поставщика учётных данных контейнера (s3.credentials_provider_type=CONTAINER или стандартной цепочки, которая его выбирает) не задавайте дополнительно учётные данные AK/SK с более высоким приоритетом.
Поставщик повторно считывает файл токена при получении учётных данных, чтобы поддерживать ротацию токенов. Поддержка совместимых с ECS переменных AWS_CONTAINER_CREDENTIALS_RELATIVE_URI и AWS_CONTAINER_AUTHORIZATION_TOKEN сохраняется. Если присутствуют и относительный, и полный URI, приоритет имеет относительный URI. Это изменение не заменяет отдельную настройку учётных данных для FE на Java; проверяйте доступ FE и BE независимо друг от друга.
Доступ к S3 Directory Bucket
Эта возможность поддерживается начиная с версии 3.1.0.
Amazon S3 Express One Zone (также известный как Directory Bucket) обеспечивает более высокую производительность, но использует другой формат адреса конечной точки.
- Обычный бакет: s3.us-east-1.amazonaws.com
- Directory Bucket: s3express-usw2-az1.us-west-2.amazonaws.com
Список других доступных регионов см. в официальной документации AWS
Пример:
"s3.access_key"="ak",
"s3.secret_key"="sk",
"s3.endpoint"="https://s3express-usw2-az1.us-west-2.amazonaws.com",
"s3.region"="us-west-2"
Политики разрешений
В зависимости от сценария использования политики разрешений можно разделить на политики только для чтения и для чтения и записи.
1. Разрешения только на чтение
Разрешают только чтение объектов из S3. Подходят для LOAD, TVF, запросов к EXTERNAL CATALOG и других сценариев.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
],
"Resource": "arn:aws:s3:::<your-bucket>/your-prefix/*"
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::<your-bucket>"
}
]
}
2. Разрешения на чтение и запись
В дополнение к разрешениям на чтение позволяют удалять, создавать и изменять объекты. Подходят для EXPORT, OUTFILE и обратной записи через EXTERNAL CATALOG.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:DeleteObject",
"s3:DeleteObjectVersion",
"s3:AbortMultipartUpload",
"s3:ListMultipartUploadParts"
],
"Resource": "arn:aws:s3:::<your-bucket>/<your-prefix>/*"
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation",
"s3:GetBucketVersioning",
"s3:GetLifecycleConfiguration"
],
"Resource": "arn:aws:s3:::<your-bucket>"
}
]
}
Примечания
-
Замена заполнителей
<bucket>→ Имя вашего бакета S3.<account-id>→ ID вашей учётной записи AWS (12-значное число).
-
Принцип минимальных привилегий
- Если выполняются только запросы, не предоставляйте разрешения на запись.