⌘+k ctrl+k
1.4 (LTS)
搜索快捷键 cmd + k | ctrl + k
S3 API 的传统认证方案

在 0.10.0 版本之前,DuckDB 没有密钥管理器 (Secrets manager)。因此,S3 端点的配置和身份验证是通过变量来处理的。本页面记录了 S3 API 的旧版身份验证方案。

警告:本页面描述了一种将密钥存储为 DuckDB 设置的旧方法。这增加了意外泄露密钥的风险(例如,通过打印其值)。因此,请避免使用这些方法来存储密钥。配置和验证 S3 端点的推荐方法是使用密钥 (secrets)

旧版身份验证方案

为了能够从 S3 读取或写入数据,需要设置正确的区域 (region)

SET s3_region = 'us-east-1';

如果使用非 AWS 的对象存储服务器,可以选择配置端点 (endpoint)

SET s3_endpoint = 'domain.tld:port';

如果端点未启用 SSL,则运行

SET s3_use_ssl = false;

可以使用以下命令在路径样式 (path-style)虚拟主机样式 (vhost-style) 的 URL 之间进行切换

SET s3_url_style = 'path';

但是,请注意,这可能还需要更新端点。例如,对于 AWS S3,需要将端点更改为 s3.region.amazonaws.com

配置好正确的端点和区域后,即可读取公共文件。若要读取私有文件,可以添加身份验证凭据

SET s3_access_key_id = 'aws_access_key_id';
SET s3_secret_access_key = 'aws_secret_access_key';

此外,也支持临时 S3 凭据。它们需要设置额外的会话令牌 (session token)

SET s3_session_token = 'aws_session_token';

aws 扩展允许加载 AWS 凭据。

按请求配置

除了上述全局 S3 配置外,还可以在每次请求的基础上使用特定的配置值。这允许使用多组凭据、区域等。通过将它们作为查询参数包含在 S3 URI 中来使用这些配置。上面列出的所有单个配置值都可以设置为查询参数。例如

SELECT *
FROM 's3://bucket/file.parquet?s3_access_key_id=accessKey&s3_secret_access_key=secretKey';

同时也允许在每个查询中使用多个配置

SELECT *
FROM 's3://bucket/file.parquet?s3_access_key_id=accessKey1&s3_secret_access_key=secretKey1' t1
INNER JOIN 's3://bucket/file.csv?s3_access_key_id=accessKey2&s3_secret_access_key=secretKey2' t2;

配置

S3 上传还有一些额外的配置选项,不过默认值应该足以满足大多数用例。

此外,大多数配置选项也可以通过环境变量进行设置

DuckDB 设置 环境变量 注意
s3_region AWS_REGION 优先级高于 AWS_DEFAULT_REGION
s3_region AWS_DEFAULT_REGION  
s3_access_key_id AWS_ACCESS_KEY_ID  
s3_secret_access_key AWS_SECRET_ACCESS_KEY  
s3_session_token AWS_SESSION_TOKEN  
s3_endpoint DUCKDB_S3_ENDPOINT  
s3_use_ssl DUCKDB_S3_USE_SSL  
s3_requester_pays DUCKDB_S3_REQUESTER_PAYS  
© 2025 DuckDB 基金会,阿姆斯特丹,荷兰
行为准则 商标使用指南