您可以使用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.keyMinio帐户访问密钥ID。您的访问密钥。
fs.s3a.secret.key与Minio访问密钥ID相关联的密钥。您的密钥。

S3服务器配置

S3的模板配置文件为$PXF_CONF/templates/s3-site.xml。 配置S3服务器时,必须提供以下服务器配置属性,并用凭据替换模板值:

属性描述
fs.s3a.access.keyAWS账户访问密钥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文件中设置以下加密算法属性和值:

  1. <property>
  2. <name>fs.s3a.server-side-encryption-algorithm</name>
  3. <value>AES256</value>
  4. </property>

要为特定的S3存储桶启用SSE-S3,请使用包含存储桶名称的属性名称变体。 例如:

  1. <property>
  2. <name>fs.s3a.bucket.YOUR_BUCKET1_NAME.server-side-encryption-algorithm</name>
  3. <value>AES256</value>
  4. </property>

YOUR_BUCKET1_NAME替换为S3存储桶的名称。

SSE-KMS

要在您写入任何S3存储桶的任何文件上启用SSE-KMS,请同时设置加密算法和加密密钥ID。 要在s3-site.xml文件中设置这些属性:

  1. <property>
  2. <name>fs.s3a.server-side-encryption-algorithm</name>
  3. <value>SSE-KMS</value>
  4. </property>
  5. <property>
  6. <name>fs.s3a.server-side-encryption.key</name>
  7. <value>YOUR_AWS_SSE_KMS_KEY_ARN</value>
  8. </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,请使用包含存储桶名称的属性名称变体。 例如:

  1. <property>
  2. <name>fs.s3a.bucket.YOUR_BUCKET2_NAME.server-side-encryption-algorithm</name>
  3. <value>SSE-KMS</value>
  4. </property>
  5. <property>
  6. <name>fs.s3a.bucket.YOUR_BUCKET2_NAME.server-side-encryption.key</name>
  7. <value>YOUR_AWS_SSE_KMS_KEY_ARN</value>
  8. </property>

YOUR_BUCKET2_NAME替换为S3存储桶的名称。

SSE-C

要在写入任何S3存储桶的任何文件上启用SSE-C,请同时设置加密算法和加密密钥(base-64编码)。 所有客户端必须共享相同的密钥。

要在s3-site.xml文件中设置这些属性:

  1. <property>
  2. <name>fs.s3a.server-side-encryption-algorithm</name>
  3. <value>SSE-C</value>
  4. </property>
  5. <property>
  6. <name>fs.s3a.server-side-encryption.key</name>
  7. <value>YOUR_BASE64-ENCODED_ENCRYPTION_KEY</value>
  8. </property>

要为特定的S3存储桶启用SSE-C,请使用包含存储桶名称的属性名称变体,如SSE-KMS示例中所述。

示例服务器配置过程

在配置对象存储连接器服务器之前,请确保已初始化PXF。

在此过程中,您将在S3云存储连接器的Greenplum数据库master主机上的$PXF_CONF/servers目录中命名并添加PXF服务器配置。 然后,您可以使用pxf cluster sync命令将服务器配置同步到Greenplum数据库集群。

  1. 登录到您的Greenplum数据库主节点:

    1. $ ssh gpadmin@<gpmaster>
  2. 选择服务器的名称。 您将为需要引用对象存储中文件的最终用户提供名称。

  3. 创建$PXF_HOME/servers/<server_name>目录。 例如,使用以下命令为名为s3_user1cfg的S3服务器创建服务器配置:

    1. gpadmin@gpmaster$ mkdir $PXF_CONF/servers/s3_user1cfg
  4. 将S3的PXF模板文件复制到服务器配置目录。 例如:

    1. gpadmin@gpmaster$ cp $PXF_CONF/templates/s3-site.xml $PXF_CONF/servers/s3_user1cfg/
  5. 在您选择的编辑器中打开模板服务器配置文件,并为您的环境提供适当的属性值。 例如:

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <configuration>
    3. <property>
    4. <name>fs.s3a.access.key</name>
    5. <value>access_key_for_user1</value>
    6. </property>
    7. <property>
    8. <name>fs.s3a.secret.key</name>
    9. <value>secret_key_for_user1</value>
    10. </property>
    11. <property>
    12. <name>fs.s3a.fast.upload</name>
    13. <value>true</value>
    14. </property>
    15. </configuration>
  6. 保存更改并退出编辑器。

  7. 使用pxf cluster sync命令将新的服务器配置复制到Greenplum数据库集群。 例如:

    gpadmin@gpmaster$ $GPHOME/pxf/bin/pxf cluster sync*