S3 对象存储
使用 S3 协议的文件系统,包括 AWS、Pure Storage 和 MinIO。
URI 格式
s3://bucket/path
对于 AWS,使用 AWSRegion 配置参数而不是 URI 指定区域。如果区域不正确,可能会在加载失败之前遇到延迟,因为 Vertica 在放弃之前会进行多次重试。默认区域为 us-east-1
。
身份验证
对于 AWS:
-
要访问 S3,您必须创建一个 IAM 角色并向该角色授予访问 S3 资源的权限。
-
默认情况下,存储桶访问仅限于公共存储桶。使用 AWS 访问密钥从非公共存储桶加载数据。
-
设置 AWSAuth 配置参数以提供凭据或为 S3 路径创建 USER 存储位置(请参阅 CREATE LOCATION)并授予用户访问权限。
-
您可以使用 AWS STS 临时会话令牌来加载数据。因为这些令牌是会话令牌,所以不要将其用于访问存储位置。
-
您可以使用每个存储桶的参数 S3BucketConfig 和 S3BucketCredentials 单独配置 S3 存储桶。有关详细信息,请参阅每个存储桶 S3 配置。
配置参数
以下数据库配置参数适用于 S3 文件系统。您可以使用适当的 ALTER 语句设置不同级别的参数,例如 ALTER SESSION...SET PARAMETER。 查询 CONFIGURATION_PARAMETERS 系统表以确定哪些级别(节点、会话、用户、数据库)对给定参数有效。
您可以使用 S3BucketConfig 和 S3BucketCredentials 参数而不是全局参数来配置单个存储桶。
有关与 S3 相关的所有参数的详细信息,请参阅S3 参数。
- AWSAuth
- 用于身份验证的 ID 和密钥。AWS 调用这些 AccessKeyID 和 SecretAccessKey。为了获得更高的安全性,请不要将凭据存储在数据库中;应当使用 ALTER SESSION...SET PARAMETER 仅为当前会话设置此值。
- AWSCAFile
- 要使用的 TLS 服务器证书捆绑包的文件名。在 SUSE Linux Enterprise Server 上安装 CA 证书时必须设置一个值。
- AWSCAPath
- Vertica 用于查找 TLS 服务器证书的路径。在 SUSE Linux Enterprise Server 上安装 CA 证书时必须设置一个值。
- AWSEnableHttps
- 布尔值,连接 S3 时是否使用 HTTPS 协议。只能在数据库级别设置。您可以使用 S3BucketConfig 为各个存储桶设置协议。
默认值: 1(启用)
- AWSEndpoint
- 字符串,所有 S3 URL 的端点主机,设置如下:
-
AWS:hostname_or_IP:port。不要包括架构 (http(s))。
-
具有符合 FIPS 规范的 S3 端点的 AWS:符合 FIPS 规范的 S3 端点的主机名。您还必须启用 S3EnableVirtualAddressing。
-
本地/Pure:Pure Storage 服务器的 IP 地址。
如果未设置,Vertica 将使用虚拟托管的请求 URL。
默认值: “s3.amazonaws.com”
-
- AWSLogLevel
- 日志级别,为以下之一:OFF、FATAL、ERROR、WARN、INFO、DEBUG 或 TRACE。
默认值: ERROR
- AWSRegion
- 包含要从中读取文件的 S3 存储桶的 AWS 区域。此参数一次只能配置一个区域。未能设置正确的区域可能会导致在查询失败之前遇到延迟。
默认值: “us-east-1”
- AWSSessionToken
- 通过运行
get-session-token
命令生成的临时安全令牌,用于配置多重身份验证。注意
如果在会话级别使用会话令牌,则必须在会话级别设置所有参数,即使其中一些参数是在数据库级别设置的。 - AWSStreamingConnectionPercentage
- 在 Eon 模式下,用于流式读取的公共存储连接数。在云环境中,此设置有助于防止流式数据传输耗尽所有可用的文件句柄。使用本地对象存储时不需要此设置,因为其延迟较低。
- S3BucketConfig
- 指定每个存储桶配置的 JSON 对象。除了存储桶名称之外的每个属性都有一个相应的配置参数。如果同时设置了数据库级别参数及其在 S3BucketConfig 中的等效项,则 S3BucketConfig 中的值优先。
属性:
-
bucket
:存储桶名称 -
region
(AWSRegion) -
protocol
:架构,http
或https
之一;覆盖 AWSEnableHttps -
endpoint
(AWSEndpoint) -
enableVirtualAddressing
:布尔值,是否重写 S3 URL 以使用虚拟托管路径 (S3BucketCredentials) -
requesterPays
(S3RequesterPays) -
serverSideEncryption
(S3ServerSideEncryption) -
sseCustomerAlgorithm
(S3SseCustomerAlgorithm) -
sseCustomerKey
(S3SseCustomerKey) -
sseKmsKeyId
(S3SseKmsKeyId)
-
- S3BucketCredentials
- 指定每个存储桶凭据的 JSON 对象。除了存储桶名称之外的每个属性都有一个相应的配置参数。如果同时设置了数据库级参数及其在 S3BucketCredentials 中的等效项,则 S3BucketCredentials 中的值优先。
属性:
-
bucket
:存储桶名称 -
accessKey
:存储桶的访问密钥(AWSAuth 中的 ID) -
secretAccessKey
:存储桶的私密访问密钥(AWSAuth 中的 secret) -
sessionToken
:会话令牌,仅在会话级别设置 S3BucketCredentials 时使用 (AWSSessionToken)
此参数仅对超级用户可见。用户可以使用 ALTER SESSION 在会话级别设置此参数。
-
- S3EnableVirtualAddressing
- 布尔值,是否重写 S3 URL 以使用虚拟托管路径(默认禁用)。此配置设置仅在您为 AWSEndpoint 指定值时生效。
如果您将 AWSEndpoint 设置为符合 FIPS 规范的 S3 端点,则必须启用 S3EnableVirtualAddressing。
此参数的值不会影响指定 S3 路径的方式。
- S3RequesterPays
- 布尔值,请求者(而不是存储桶所有者)是否支付访问存储桶上的数据的费用。
- S3ServerSideEncryption
- 字符串,读取或写入 S3 时使用的加密算法。支持的值为
AES256
(对于 SSE-S3)、aws:kms
(对于 SSE-KMS)和空字符串(对于不加密)。请参阅服务器端加密。默认值:
""
(无加密) - S3SseCustomerAlgorithm
- 字符串,使用 SSE-C 加密读取或写入 S3 时使用的加密算法。支持的值仅包括
AES256
和""
。对于 SSE-S3 和 SSE-KMS,请改用 S3ServerSideEncryption。默认值:
""
(无加密) - S3SseCustomerKey
- 如果使用 SSE-C 加密,则为 S3 访问的客户端密钥。
- S3SseKmsKeyId
- 如果使用 SSE-KMS 加密,则将密钥标识符(不是密钥)传递给密钥管理服务。Vertica 必须有权使用通过 KMS 管理的密钥。
服务器端加密
默认情况下,Vertica 读取和写入未加密的 S3 数据。如果 S3 存储桶使用服务器端加密 (SSE),您可以配置 Vertica 来对其进行访问。S3 支持三种类型的服务器端加密:SSE-S3、SSE-KMS 和 SSE-C。
Vertica 还必须对存储桶具有读取或写入权限(取决于操作)。
SSE-S3
对于 SSE-S3,由 S3 服务管理加密密钥。读取不需要额外的配置。要写入 S3,客户端(在本例中为 Vertica)必须只指定加密算法。
如果 S3 存储桶配置了默认加密设置,Vertica 无需进一步更改即可对其读取和写入数据。如果存储桶不使用默认加密设置,请将 S3ServerSideEncryption 配置参数或 S3BucketConfig 中的 serverSideEncryption
字段设置为 AES256
。
SSE-KMS
对于 SSE-KMS,加密密钥由密钥管理服务 (KMS) 管理。客户端在写入数据时必须提供 KMS 密钥标识符(不是实际密钥)。对于所有操作,客户端必须有权使用 KMS 密钥。这些权限在 KMS 中进行管理,而不是在 Vertica 中。
要使用 SSE-KMS:
-
将 S3ServerSideEncryption 配置参数或 S3BucketConfig 中的
serverSideEncryption
字段设置为aws:kms
。 -
将 S3SseKmsKeyId 配置参数或 S3BucketConfig 中的
sseKmsKeyId
字段设置为密钥 ID。
SSE-C
对于 SSE-C,由客户端管理加密密钥并将其提供给 S3 以进行每个操作。
要使用 SSE-C:
-
将 S3SseCustomerAlgorithm 配置参数或 S3BucketConfig 中的
sseCustomerAlgorithm
字段设置为AES256
。 -
将 S3SseCustomerKey 配置参数或 S3BucketConfig 中的
sseCustomerKey
字段设置为访问密钥。该值可以是 32 个字符的纯文本密钥或 44 个字符的 base64 编码密钥。
示例
以下示例设置数据库范围的 AWS 区域和凭据:
=> ALTER DATABASE DEFAULT SET AWSRegion='us-west-1';
=> ALTER DATABASE DEFAULT SET AWSAuth = 'myaccesskeyid123456:mysecretaccesskey123456789012345678901234';
以下示例从 S3 加载数据。如果可以同时加载 glob 中的所有文件,则可以使用 glob。在以下示例中,AWS_DataLake 仅包含 ORC 文件。
=> COPY t FROM 's3://datalake/*' ORC;
您可以指定逗号分隔的 S3 存储桶列表,如下例所示。所有存储桶必须位于同一区域。要从多个区域加载,请使用单独的 COPY 语句并在调用之间更改 AWSRegion 的值。
=> COPY t FROM 's3://AWS_Data_1/sales.parquet', 's3://AWS_Data_2/sales.parquet' PARQUET;
以下示例创建用户存储位置和角色,以便没有自己的 S3 凭据的用户可以使用服务器凭据从 S3 中读取数据。
--- set database-level credential (once):
=> ALTER DATABASE DEFAULT SET AWSAuth = 'myaccesskeyid123456:mysecretaccesskey123456789012345678901234';
=> CREATE LOCATION 's3://datalake' SHARED USAGE 'USER' LABEL 's3user';
=> CREATE ROLE ExtUsers;
--- Assign users to this role using GRANT (Role).
=> GRANT READ ON LOCATION 's3://datalake' TO ExtUsers;
给定存储桶的配置属性可能因其类型而异。以下 S3BucketConfig 设置适用于 AWS 存储桶 (AWSBucket
) 和 Pure Storage 存储桶 (PureStorageBucket
)。 AWSBucket
没有指定端点,因此 Vertica 使用 AWSEndpoint 配置参数,其默认为 s3.amazonaws.com
:
=> ALTER DATABASE DEFAULT SET S3BucketConfig=
'[
{
"bucket": "AWSBucket",
"region": "us-east-2",
"protocol": "https",
"requesterPays": true,
"serverSideEncryption": "aes256"
},
{
"bucket": "PureStorageBucket",
"endpoint": "pure.mycorp.net:1234",
"protocol": "http",
"enableVirtualAddressing": false
}
]';
以下示例为这两个存储桶设置 S3BucketCredentials:
=> ALTER SESSION SET S3BucketCredentials='
[
{
"bucket": "AWSBucket",
"accessKey": "<AK0>",
"secretAccessKey": "<SAK0>",
"sessionToken": "1234567890"
},
{
"bucket": "PureStorageBucket",
"accessKey": "<AK1>",
"secretAccessKey": "<SAK1>"
}
]';
以下示例设置 STS 临时会话令牌。Vertica 使用会话令牌通过指定凭据访问 S3,并绕过对 USER 存储位置的检查。
$ aws sts get-session-token
{
"Credentials": {
"AccessKeyId": "ASIAJZQNDVS727EHDHOQ",
"SecretAccessKey": "F+xnpkHbst6UPorlLGj/ilJhO5J2n3Yo7Mp4vYvd",
"SessionToken": "FQoDYXdzEKv//////////wEaDMWKxakEkCyuDH0UjyKsAe6/3REgW5VbWtpuYyVvSnEK1jzGPHi/jPOPNT7Kd+ftSnD3qdaQ7j28SUW9YYbD50lcXikz/HPlusPuX9sAJJb7w5oiwdg+ZasIS/+ejFgCzLeNE3kDAzLxKKsunvwuo7EhTTyqmlLkLtIWu9zFykzrR+3Tl76X7EUMOaoL31HOYsVEL5d9I9KInF0gE12ZB1yN16MsQVxpSCavOFHQsj/05zbxOQ4o0erY1gU=",
"Expiration": "2018-07-18T05:56:33Z"
}
}
$ vsql
=> ALTER SESSION SET AWSAuth = 'ASIAJZQNDVS727EHDHOQ:F+xnpkHbst6UPorlLGj/ilJhO5J2n3Yo7Mp4vYvd';
=> ALTER SESSION SET AWSSessionToken = 'FQoDYXdzEKv//////////wEaDMWKxakEkCyuDH0UjyKsAe6/3REgW5VbWtpuYyVvSnEK1jzGPHi/jPOPNT7Kd+ftSnD3qdaQ7j28SUW9YYbD50lcXikz/HPlusPuX9sAJJb7w5oiwdg+ZasIS/+ejFgCzLeNE3kDAzLxKKsunvwuo7EhTTyqmlLkLtIWu9zFykzrR+3Tl76X7EUMOaoL31HOYsVEL5d9I9KInF0gE12ZB1yN16MsQVxpSCavOFHQsj/05zbxOQ4o0erY1gU=';