跳到主要内容

S3

本文档用于介绍访问 AWS S3 时所需的参数。这些参数适用于:

  • Catalog 属性。
  • Table Valued Function 属性。
  • Broker Load 属性。
  • Export 属性。
  • Outfile 属性。

配置 BE 端 HTTPS CA 证书

自 Doris 2.1 起,当 Doris BE 通过 HTTPS 访问 S3 时,可以在 be.conf 中显式配置 ca_cert_file_paths

默认情况下,如果未配置 ca_cert_file_paths,Doris 会使用操作系统默认的 CA 证书。在大多数环境中,不需要手动设置该参数。建议在以下场景中显式配置:

  • BE 节点未安装系统 CA 证书,或系统 CA 证书包版本过旧。
  • BE 节点运行在精简容器或镜像中,未包含 ca-certificates 包。
  • BE 节点上的默认 CA 文件路径无效,或 Doris 进程没有该 CA 文件的读取权限。
  • 环境中使用了自签名证书、私有 CA,或者会重签 TLS 流量的企业代理或网关。
  • 访问 S3 时出现 Problem with the SSL CA certcurl 77: Problem with the SSL CA cert (path? access rights?) 等错误。

示例:

# 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

需要在所有可能访问 S3 的 BE 节点上配置该参数,并确保 Doris 进程对证书文件有读取权限。修改 be.conf 后,需要重启对应的 BE 节点使配置生效。

参数总览

属性名称曾用名描述默认值是否必须
s3.endpointS3 服务访问地址,如 s3.us-east-1.amazonaws.com
s3.access_keyAWS Access Key。用于身份验证
s3.secret_keyAWS Secret Key。用于身份验证
s3.regionS3 所在区域,例如: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使用 Assume Role 模式时指定的角色 ARN
s3.external_id配合 s3.role_arn 使用的 external ID
s3.credentials_provider_type指定 AWS 凭证提供器类型(无 AK/SK 时使用;在 IAM Role 场景用于 STS 源凭证)DEFAULT

版本说明:s3.credentials_provider_type3.1.44.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"="s3.us-east-1.amazonaws.com",
"s3.region"="us-east-1"

2. IAM Role(Assume Role)模式

适用于跨账号、临时授权访问。通过角色授权自动获取临时凭证。

"s3.role_arn"="arn:aws:iam::123456789012:role/demo-role",
"s3.external_id"="external-identifier",
"s3.endpoint"="s3.us-east-1.amazonaws.com",
"s3.region"="us-east-1"

在 IAM Role 模式中配置 s3.credentials_provider_type

当配置了 s3.role_arn 时,s3.credentials_provider_type 用于指定 STS AssumeRole 调用所使用的源凭证 provider:

  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"="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"="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"="s3.us-east-1.amazonaws.com",
"s3.region"="us-east-1"

示例 4:使用默认 provider chain 作为 STS 源凭证

"s3.role_arn"="arn:aws:iam::123456789012:role/demo-role",
"s3.credentials_provider_type"="DEFAULT",
"s3.endpoint"="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"="s3.us-east-1.amazonaws.com",
"s3.region"="us-east-1"

s3.credentials_provider_type 可选值

说明
DEFAULT使用默认 provider chain
ENV从环境变量读取凭证
SYSTEM_PROPERTIES从系统属性读取凭证
WEB_IDENTITY使用 Web Identity Token 凭证
CONTAINER使用容器元数据凭证
INSTANCE_PROFILE使用 EC2 Instance Profile 凭证
ANONYMOUS匿名访问(适用于公开桶)

同时配置时的生效规则

  1. 同时配置 s3.access_keys3.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 客户端使用的 provider。

注意:s3.access_keys3.secret_key 必须成对出现,仅配置其中一个会报错。

AWS 认证鉴权配置说明请参阅文档aws-authentication-and-authorization

访问 S3 Directory Bucket

该功能自 3.1.0 起支持。

Amazon S3 Express One Zone(又名 Directory Bucket)提供更高性能,但 endpoint 格式不同。

  • 普通 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"="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 Bucket 名称。
    • <account-id> → 你的 AWS 账号 ID(12 位数字)。
  2. 最小权限原则

    • 如果只做查询,不要授予写权限。