您可以使用PXF访问S3兼容的对象存储。 本主题描述如何将PXF连接器配置为这些外部数据源。
如果您不打算使用这些PXF对象存储连接器,则不需要执行此过程。
关于对象存储配置
要访问对象存储中的数据,必须提供服务器位置和客户端凭据。 配置PXF对象库连接器时,请为连接器添加至少一个名为PXF服务器的配置,如配置PXF服务器中所述。
PXF为每个对象存储连接器提供了一个模板配置文件。 这些模板文件位于$PXF_CONF/templates/
目录中。
Minio服务器配置
Minio的模板配置文件为$PXF_CONF/templates/minio-site.xml
。 配置Minio服务器时,必须提供以下服务器配置属性,并用凭据替换模板值:
属性 | 描述 | 值 |
---|---|---|
fs.s3a.endpoint | 要连接的Minio S3端点。 | 您的端点。 |
fs.s3a.access.key | Minio帐户访问密钥ID。 | 您的访问密钥。 |
fs.s3a.secret.key | 与Minio访问密钥ID相关联的密钥。 | 您的密钥。 |
S3服务器配置
S3的模板配置文件为$PXF_CONF/templates/s3-site.xml
。 配置S3服务器时,必须提供以下服务器配置属性,并用凭据替换模板值:
属性 | 描述 | 值 |
---|---|---|
fs.s3a.access.key | AWS账户访问密钥ID。 | 您的访问密钥。 |
fs.s3a.secret.key | 与AWS访问密钥ID关联的密钥。 | 您的密钥。 |
如果需要,可以通过指定s3-site.xml
服务器配置文件中的Hadoop-AWS模块文档的S3A部分来调优PXF S3连接。
您可以通过CREATE EXTERNAL TABLE命令LOCATION子句中的自定义选项直接指定S3访问ID和密钥,从而覆盖S3服务器配置的凭据。 有关其他信息,请参考使用DDL覆盖S3服务器配置。
配置S3服务器端加密
PXF支持使用可读写的Greenplum数据库外部表(指定pxf
协议和s3:*
配置文件)访问的S3文件的Amazon Web Service S3服务器端加密(SSE)。 AWS S3服务器端加密可安静地保护您的数据; 它会在将对象数据写入磁盘时对其进行加密,并在您访问数据时为您透明地解密数据。
PXF支持以下AWS SSE加密密钥管理方案:
- 具有S3受管密钥的SSE(SSE-S3) - Amazon管理数据和master加密密钥。
- 具有密钥管理服务托管密钥的SSE(SSE-KMS) - Amazon管理数据密钥,而您在AWS KMS中管理加密密钥。
- SSE与客户提供的密钥(SSE-C) - 您设置和管理加密密钥。
无论数据是否经过加密,您的S3访问密钥和加密密钥都将控制您对所有S3存储桶对象的访问。
在您通过指定pxf
协议和s3:*
配置文件创建的可读外部表访问的加密文件的读取操作期间,S3透明地解密数据。 无需其他配置。
要加密通过这种类型的外部表写入S3的数据,您有两个选择:
- 通过AWS控制台或命令行工具(建议),在每个S3存储桶的基础上配置默认的SSE加密密钥管理方案。
- 在PXF S3服务器的
s3-site.xml
配置文件中配置SSE加密选项。
通过S3存储桶策略配置SSE(推荐)
您可以创建S3桶策略</ i>,以标识要加密的对象,加密密钥管理方案以及在这些对象上允许的写入操作。 请参阅AWS S3文档中的使用服务器端加密保护数据,以获取有关SSE加密密钥管理方案的更多信息。 如何为S3存储桶启用默认加密?介绍了如何设置默认加密存储桶策略 。
*#### 在PXF S3服务器配置中指定SSE选项
您必须在s3-site.xml
中包含某些属性,才能在PXF S3服务器配置中配置服务器端加密。 您添加到文件中的属性和值取决于SSE加密密钥管理方案。
SSE-S3
要在写入任何S3存储桶的任何文件上启用SSE-S3,请在s3-site.xml
文件中设置以下加密算法属性和值:
<property>
<name>fs.s3a.server-side-encryption-algorithm</name>
<value>AES256</value>
</property>
要为特定的S3存储桶启用SSE-S3,请使用包含存储桶名称的属性名称变体。 例如:
<property>
<name>fs.s3a.bucket.YOUR_BUCKET1_NAME.server-side-encryption-algorithm</name>
<value>AES256</value>
</property>
将YOUR_BUCKET1_NAME
替换为S3存储桶的名称。
SSE-KMS
要在您写入任何S3存储桶的任何文件上启用SSE-KMS,请同时设置加密算法和加密密钥ID。 要在s3-site.xml
文件中设置这些属性:
<property>
<name>fs.s3a.server-side-encryption-algorithm</name>
<value>SSE-KMS</value>
</property>
<property>
<name>fs.s3a.server-side-encryption.key</name>
<value>YOUR_AWS_SSE_KMS_KEY_ARN</value>
</property>
用您的密钥资源名称替换YOUR_AWS_SSE_KMS_KEY_ARN
。 如果您未指定加密密钥,则使用Amazon KMS中定义的默认密钥。 KMS密钥示例:arn:aws:kms:us-west-2:123456789012:key/1a23b456-7890-12cc-d345-6ef7890g12f3
。
注意: 确保在同一Amazon可用区中创建存储桶和密钥。
要为特定的S3存储桶启用SSE-KMS,请使用包含存储桶名称的属性名称变体。 例如:
<property>
<name>fs.s3a.bucket.YOUR_BUCKET2_NAME.server-side-encryption-algorithm</name>
<value>SSE-KMS</value>
</property>
<property>
<name>fs.s3a.bucket.YOUR_BUCKET2_NAME.server-side-encryption.key</name>
<value>YOUR_AWS_SSE_KMS_KEY_ARN</value>
</property>
将YOUR_BUCKET2_NAME
替换为S3存储桶的名称。
SSE-C
要在写入任何S3存储桶的任何文件上启用SSE-C,请同时设置加密算法和加密密钥(base-64编码)。 所有客户端必须共享相同的密钥。
要在s3-site.xml
文件中设置这些属性:
<property>
<name>fs.s3a.server-side-encryption-algorithm</name>
<value>SSE-C</value>
</property>
<property>
<name>fs.s3a.server-side-encryption.key</name>
<value>YOUR_BASE64-ENCODED_ENCRYPTION_KEY</value>
</property>
要为特定的S3存储桶启用SSE-C,请使用包含存储桶名称的属性名称变体,如SSE-KMS示例中所述。
示例服务器配置过程
在配置对象存储连接器服务器之前,请确保已初始化PXF。
在此过程中,您将在S3云存储连接器的Greenplum数据库master主机上的$PXF_CONF/servers
目录中命名并添加PXF服务器配置。 然后,您可以使用pxf cluster sync
命令将服务器配置同步到Greenplum数据库集群。
登录到您的Greenplum数据库主节点:
$ ssh gpadmin@<gpmaster>
选择服务器的名称。 您将为需要引用对象存储中文件的最终用户提供名称。
创建
$PXF_HOME/servers/<server_name>
目录。 例如,使用以下命令为名为s3_user1cfg
的S3服务器创建服务器配置:gpadmin@gpmaster$ mkdir $PXF_CONF/servers/s3_user1cfg
将S3的PXF模板文件复制到服务器配置目录。 例如:
gpadmin@gpmaster$ cp $PXF_CONF/templates/s3-site.xml $PXF_CONF/servers/s3_user1cfg/
在您选择的编辑器中打开模板服务器配置文件,并为您的环境提供适当的属性值。 例如:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property>
<name>fs.s3a.access.key</name>
<value>access_key_for_user1</value>
</property>
<property>
<name>fs.s3a.secret.key</name>
<value>secret_key_for_user1</value>
</property>
<property>
<name>fs.s3a.fast.upload</name>
<value>true</value>
</property>
</configuration>
保存更改并退出编辑器。
使用
pxf cluster sync
命令将新的服务器配置复制到Greenplum数据库集群。 例如:gpadmin@gpmaster$ $GPHOME/pxf/bin/pxf cluster sync
*