⌘+k ctrl+k
1.3 (稳定版)
搜索快捷键 cmd + k | ctrl + k
S3 API 的传统认证方案

在0.10.0版本之前,DuckDB没有密钥管理器。因此,S3端点的配置和认证是通过变量处理的。本页介绍了S3 API的旧版认证方案。

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

旧版认证方案

为了能够从S3读取或写入,应设置正确的区域

SET s3_region = 'us-east-1';

或者,如果使用非AWS对象存储服务器,可以配置端点

SET s3_endpoint = 'domain.tld:port';

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

SET s3_use_ssl = false;

可以使用路径样式虚拟主机样式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凭据。它们需要设置一个额外的会话令牌

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