这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

节点间 TLS

节点间 TLS 用于保护群集内节点之间的通信。如果您不信任节点之间的网络,请务必保护节点之间的通信。

在设置节点间 TLS 之前,请使用 SECURITY_CONFIG_CHECK 检查配置的当前状态。

=> SELECT SECURITY_CONFIG_CHECK('NETWORK');

服务器节点之间的通信使用两个通道:控制通道和数据通道。要启用节点间加密,请设置 EncryptSpreadComm 参数(默认情况下禁用)以对控制通道上的 Spread 通信进行加密,并配置 data_channel TLS CONFIGURATION 以对数据通道进行加密:

  1. 使用 EncryptSpreadComm 对控制通道上的 Spread 通信进行加密。有关详细信息,请参阅控制通道 Spread TLS

  2. 使用 data_channel TLS CONFIGURATION 对数据通道进行加密。有关详细信息,请参阅数据通道 TLS

如果启用节点间加密,某些查询的运行速度可能会比预期慢。您的性能体验取决于发送的数据和网络质量。

Admintools 会生成或检索 spread 密钥以对控制通道上的所有流量进行加密,并将 spread 密钥发送到所有节点。Vertica 使用 TLS 对数据通道上的所有流量进行加密。TLS 凭据通过加密的控制通道在节点之间共享。

下图描述了节点间加密过程。

另请参阅

1 - 控制通道 Spread TLS

控制信道允许节点相互交换计划信息,并在节点之间分配调用。启用 Spread 安全可保护此通信。有关详细信息,请参阅节点间 TLS

节点间 TLS 使用以下两个通道。在设置其他参数之前,必须按以下顺序启用这两个通道:

  1. 控制通道用于交换计划信息和分配调用。它是使用 Spread 实现的。有关详细信息,请访问 spread.org

  2. 数据通道用于交换表数据。它是使用 TCP 实现的。

启用 EncryptSpreadComm

EncryptSpreadComm 可以设置为以下两个值之一:

  • vertica。Vertica 在数据库启动时为群集生成 Spread 加密密钥。

  • aws-kms|<key_name>。Vertica 在数据库启动时从 AWS Key Management Service 获取用户指定的密钥,而不是自己生成密钥。

通常情况下,您应该在设置任何其他安全参数之前设置 EncryptSpreadComm 参数,以启用 Spread 加密。

  1. 使用 ALTER DATABASE 设置 EncryptSpreadComm 参数。

    => ALTER DATABASE DEFAULT SET PARAMETER EncryptSpreadComm = 'vertica';
    
  2. 重新启动数据库。

  3. 使用 SECURITY_CONFIG_CHECK 验证您的设置。

    => SELECT SECURITY_CONFIG_CHECK('NETWORK');
    

权限

超级用户

限制

设置此参数后,必须重新启动数据库。

示例

这将启用 EncryptSpreadComm 参数,并告知 Vertica 在下次数据库启动时生成一个 Spread 加密密钥。

=> ALTER DATABASE DEFAULT SET PARAMETER EncryptSpreadComm = 'vertica';

有关此安全参数和其他安全参数的详细信息,请参阅安全性参数

另请参阅

2 - 数据通道 TLS

节点在查询等操作期间使用数据通道交换表数据。

节点间通信使用以下通道。在启用其他组件之前,必须按以下顺序启用其关联的组件和参数:

  1. 控制通道,以交换计划信息并分发调用。它是使用 Spread 实现的。有关详细信息,请访问 spread.org

  2. 数据通道,以交换表数据。它是使用 TCP 实现的。

配置数据通道 TLS

此过程在 Vertica 节点之间配置 TLS,并使用预定义的 TLS 配置 data_channel。要使用自定义 TLS 配置,请参阅 TLS 配置

  1. 在控制通道上启用 TLS

  2. 生成或导入以下项:

    • CA(证书颁发机构)证书。

      例如,要创建自签名 CA 证书,请生成密钥并使用该密钥对 CA 证书进行签名:

      => CREATE KEY SSCA_key TYPE 'RSA' LENGTH 2048;
      
      => CREATE CA CERTIFICATE SSCA_cert
      SUBJECT '/C=US/ST=Massachusetts/L=Cambridge/O=Micro Focus/OU=Vertica/CN=Vertica Root CA'
      VALID FOR 3650
      EXTENSIONS 'nsComment' = 'Self-signed root CA cert'
      KEY SSCA_key;
      

    • 节点间 TLS 证书的私钥。

      例如,使用 CREATE KEY 生成密钥:

      => CREATE KEY internode_key TYPE 'RSA' LENGTH 2048;
      
    • **节点间 TLS 证书。**这必须有一个以 CA 结尾的完整链,且必须是 x509v1 证书或使用 extendedKeyUsage 扩展 serverAuthclientAuth

      例如,要生成 internode_cert 并使用 SSCA_cert 对其进行签名:

      => CREATE CERTIFICATE internode_cert
      SUBJECT '/C=US/ST=Massachusetts/L=Cambridge/O=Micro Focus/OU=Vertica/CN=data channel'
      SIGNED BY SSCA_cert
      EXTENSIONS 'nsComment' = 'Vertica internode cert', 'extendedKeyUsage' = 'serverAuth, clientAuth'
      KEY internode_key;
      
  3. data_channel TLS 配置中设置证书。对于数据通道 TLS,TLSMODE 自动设置为 VERIFY_CA,且不应更改。

    => ALTER TLS CONFIGURATION data_channel CERTIFICATE internode_cert;
    
  4. 验证 InternodeTLSConfig 参数是否正在使用 TLS 配置:

    => SHOW CURRENT InternodeTLSConfig;
      level  |        name        |   setting
    ---------+--------------------+--------------
     DEFAULT | InternodeTLSConfig | data_channel
    (1 row)
    
  5. 验证是否已使用 SECURITY_CONFIG_CHECK('NETWORK') 启用数据通道加密:

    => SELECT SECURITY_CONFIG_CHECK('NETWORK');
       SECURITY_CONFIG_CHECK
    ---------------------------
     Spread security details:
    * EncryptSpreadComm = [vertica]
    Spread encryption is enabled
    It is now safe to set/change other security knobs
    
    Data Channel security details:
     TLS Configuration 'data_channel' TLSMODE is VERIFY_CA
    TLS on the data channel is enabled
    

特权

超级用户

限制

  • 通常,您应在配置 data_channel 之前设置 EncryptSpreadComm。

  • 对 data_channel 的更改将立即生效,且中断所有正在进行的查询,以更新节点之间的连接。

另请参阅