跳到主要内容

AWS 扩展

aws 扩展基于 AWS SDK,在 httpfs 扩展的 S3 能力之上增加了例如认证等功能。

安装与加载

aws 扩展在首次使用时会从官方扩展仓库自动按需加载。 若你希望手动安装并加载,请执行:

INSTALL aws;
LOAD aws;

大多数情况下,aws 扩展需要与 httpfs 扩展配合使用。

配置与认证

配置与认证 AWS S3 endpoint 的推荐方式是使用 secrets

config Provider

默认 provider config(即用户手动配置)允许通过手动提供密钥访问 S3 bucket。例如:

CREATE OR REPLACE SECRET secret (
TYPE s3,
PROVIDER config,
KEY_ID '⟨AKIAIOSFODNN7EXAMPLE⟩',
SECRET '⟨wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY⟩',
REGION '⟨us-east-1⟩'
);

提示:若出现 IO Error(Connection error for HTTP HEAD),请显式配置 endpoint:ENDPOINT 's3.⟨your-region⟩.amazonaws.com'

要使用上述 secret 查询,只需查询任意 s3:// 前缀文件:

SELECT *
FROM 's3://⟨your-bucket⟩/⟨your_file⟩.parquet';

credential_chain Provider

credential_chain provider 可通过 AWS SDK 提供的机制自动获取凭据。例如,使用 AWS SDK 默认 provider:

CREATE OR REPLACE SECRET secret (
TYPE s3,
PROVIDER credential_chain
);

同样地,使用上述 secret 查询文件时,直接查询任意 s3:// 前缀文件即可。

Goose 也允许通过 CHAIN 关键字指定具体凭据链。该值是以分号分隔的 provider 列表(a;b;c),会按顺序尝试。例如:

CREATE OR REPLACE SECRET secret (
TYPE s3,
PROVIDER credential_chain,
CHAIN 'env;config'
);

CHAIN 可选值如下:

credential_chain provider 还支持覆盖自动获取的配置。例如,先自动加载凭据,再覆盖 region:

CREATE OR REPLACE SECRET secret (
TYPE s3,
PROVIDER credential_chain,
CHAIN config,
REGION '⟨eu-west-1⟩'
);

校验

AWS credential_chain provider 会在 CREATE SECRET 时检查所需凭据,若缺失或不可用则失败。

可通过 VALIDATION 选项配置该行为:

CREATE OR REPLACE SECRET secret (
TYPE s3,
PROVIDER credential_chain,
VALIDATION 'exists'
);

支持两种校验模式:

  • exists(默认)要求凭据存在。
  • none 允许在 credential_chains 无可用凭据时仍成功执行 CREATE SECRET

VALIDATION 'exists' 仅校验凭据是否__存在__,而不校验其__可用性__。因此不会尝试 转换 access token,也不会执行读写等操作。

自动刷新

某些 AWS endpoint 需要周期性刷新凭据。 可通过 REFRESH auto 指定:

CREATE SECRET env_test (
TYPE s3,
PROVIDER credential_chain,
REFRESH auto
);

旧功能

已弃用:load_aws_credentials 函数已弃用。

在 0.10.0 之前,Goose 尚无 Secrets manager。为了自动加载凭据,AWS 扩展提供了一个特殊函数,在旧认证方式中加载 AWS 凭据。

函数类型说明
load_aws_credentialsPRAGMA function通过 AWS Default Credentials Provider Chain 加载 AWS 凭据

加载 AWS 凭据(旧)

要加载 AWS 凭据,执行:

CALL load_aws_credentials();
loaded_access_key_idloaded_secret_access_keyloaded_session_tokenloaded_region
AKIAIOSFODNN7EXAMPLE<redacted>NULLus-east-2

该函数可接收一个字符串参数以指定 profile:

CALL load_aws_credentials('minio-testing-2');
loaded_access_key_idloaded_secret_access_keyloaded_session_tokenloaded_region
minio_goose_user_2<redacted>NULLNULL

还可通过多个参数调整调用行为:

CALL load_aws_credentials('minio-testing-2', set_region = false, redact_secret = false);
loaded_access_key_idloaded_secret_access_keyloaded_session_tokenloaded_region
minio_goose_user_2minio_goose_user_password_2NULLNULL