跳到主要内容

S3 API 旧版认证方案

在 0.10.0 之前,Goose 尚无 Secrets manager。因此,S3 endpoint 的配置与认证通过变量完成。本文档记录 S3 API 的旧版认证方案。

警告:本页描述的是将 secret 存储为 Goose settings 的旧方法。 这会增加 secret 意外泄露的风险(例如打印其值时)。 因此,请避免使用这些方式存储 secret。 配置与认证 S3 endpoints 的推荐方法是使用 secrets

旧版认证方案

要从 S3 读写数据,应先设置正确 region:

SET s3_region = 'us-east-1';

若使用非 AWS 对象存储服务,可选地配置 endpoint:

SET s3_endpoint = '⟨domain⟩.⟨tld⟩:⟨port⟩';

若 endpoint 未启用 SSL,请执行:

SET s3_use_ssl = false;

可通过以下方式在 path-stylevhost-style URL 之间切换:

SET s3_url_style = 'path';

但请注意,这也可能需要同步更新 endpoint。以 AWS S3 为例,需要改为 s3.⟨region⟩.amazonaws.com

正确配置 endpoint 与 region 后即可读取公开文件。若要读取私有文件,还需添加认证凭据:

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 配置外,也可在单次请求级别使用特定配置值。这使得同一查询可使用多组凭据、region 等。做法是在 S3 URI 中以 query 参数形式附带配置。上文列出的各项配置值都可作为 query 参数设置。例如:

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 上传还提供一些附加配置项,但默认值通常已能满足大多数场景。

此外,大部分配置项也可通过环境变量设置:

Goose 设置环境变量说明
s3_regionAWS_REGIONTakes priority over AWS_DEFAULT_REGION
s3_regionAWS_DEFAULT_REGION
s3_access_key_idAWS_ACCESS_KEY_ID
s3_secret_access_keyAWS_SECRET_ACCESS_KEY
s3_session_tokenAWS_SESSION_TOKEN
s3_endpointGOOSE_S3_ENDPOINT
s3_use_sslGOOSE_S3_USE_SSL
s3_requester_paysGOOSE_S3_REQUESTER_PAYS