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

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_keyAWS Access Key для аутентификацииНе заданоНет
s3.secret_keyAWS Secret Key для аутентификацииНе заданоНет
s3.regionРегион S3, например us-east-1. Настоятельно рекомендуется указыватьНе заданоДа
s3.use_path_styleИспользовать ли адресацию path-styleFALSEНет
s3.connection.maximumМаксимальное число соединений при большом числе параллельных запросов50Нет
s3.connection.request.timeoutТайм-аут запроса (в миллисекундах), задаёт время ожидания получения соединения3000Нет
s3.connection.timeoutТайм-аут установления соединения (в миллисекундах)1000Нет
s3.role_arnARN роли, указываемый при использовании режима 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:

  1. Получение исходных учётных данных через s3.credentials_provider_type.
  2. Вызов STS AssumeRole с исходными учётными данными.
  3. Доступ к 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Анонимный доступ (для общедоступных бакетов)

Правила при совместной настройке​

  1. Если заданы и s3.access_key, и s3.secret_key, в первую очередь используются AK/SK.
  2. Если AK/SK не заданы, а s3.role_arn задан, используется IAM Role. В этом случае s3.credentials_provider_type выбирает источник учётных данных для STS.
  3. Если не заданы ни 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>"
}
]
}

Примечания​

  1. Замена заполнителей

    • <bucket> → Имя вашего бакета S3.
    • <account-id> → ID вашей учётной записи AWS (12-значное число).
  2. Принцип минимальных привилегий

    • Если выполняются только запросы, не предоставляйте разрешения на запись.