使用 Cassandra Node.js 客户端驱动程序以编程方式访问 Amazon Keyspaces - Amazon Keyspaces(Apache Cassandra 兼容)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Cassandra Node.js 客户端驱动程序以编程方式访问 Amazon Keyspaces

本部分介绍了如何使用 Node.js 客户端驱动程序连接 Amazon Keyspaces。要为用户和应用程序提供凭证,以通过编程方式访问 Amazon Keyspaces 资源,您可以执行以下任一操作:

  • 创建与特定 AWS Identity and Access Management (IAM) 用户关联的服务特定凭证。

  • 为了增强安全性,我们建议为所有 AWS 服务中使用的 IAM 用户或角色创建 IAM 访问密钥。借助适用于 Cassandra 客户端驱动程序的 Amazon Keyspaces SigV4 身份验证插件,您可以使用 IAM 访问密钥而不是用户名和密码来验证对 Amazon Keyspaces 的调用。有关更多信息,请参阅 为 Amazon Keyspaces 创建和配置 AWS 证书

开始前的准备工作

在开始之前,您需要完成以下任务。

Amazon Keyspaces 要求使用传输层安全性协议 (TLS) 来帮助保护与客户端的连接。要使用 TLS 连接到 Amazon Keyspaces,您需要下载 Amazon 数字证书,并将 Python 驱动程序配置为使用 TLS。

下载以下数字证书并将文件保存在本地或您的主目录中。

  1. AmazonRootCA1

  2. AmazonRootCA2

  3. AmazonRootCA3

  4. AmazonRootCA4

  5. Starfield Class 2 Root(可选 — 为了向后兼容)

要下载证书,您可以使用以下命令。

curl -O https://www.amazontrust.com/repository/AmazonRootCA1.pem curl -O https://www.amazontrust.com/repository/AmazonRootCA2.pem curl -O https://www.amazontrust.com/repository/AmazonRootCA3.pem curl -O https://www.amazontrust.com/repository/AmazonRootCA4.pem curl -O https://certs.secureserver.net/repository/sf-class2-root.crt
注意

Amazon Keyspaces 之前使用锚定在 Starfield Class 2 CA 上的 TLS 证书。 AWS 正在将所有证书全部迁移 AWS 区域 到根据亚马逊信任服务(Amazon Root CAs 1—4)颁发的证书。在此过渡期间,将客户端配置为同时信任 Amazon Root CAs 1—4 和 Starfield 根,以确保所有区域之间的兼容性。

将所有下载的证书合并到一个pem文件中,其名称与我们的示例keyspaces-bundle.pem中的名称相同。您可以使用以下 命令进行这项操作:记下文件的路径,稍后需要这个。

cat AmazonRootCA1.pem \ AmazonRootCA2.pem \ AmazonRootCA3.pem \ AmazonRootCA4.pem \ sf-class2-root.crt \ > keyspaces-bundle.pem

使用适用于 Apache Cassandra 的 Node.js DataStax 驱动程序和特定于服务的凭证连接到亚马逊密钥空间

将您的驱动程序配置为使用 TLS 的组合证书文件keyspaces-bundle.pem,并使用特定于服务的凭据进行身份验证。例如:

const cassandra = require('cassandra-driver'); const fs = require('fs'); const auth = new cassandra.auth.PlainTextAuthProvider('ServiceUserName', 'ServicePassword'); const sslOptions1 = { ca: [ fs.readFileSync('path_to_file/keyspaces-bundle.pem', 'utf-8')], host: 'cassandra.us-west-2.amazonaws.com', rejectUnauthorized: true }; const client = new cassandra.Client({ contactPoints: ['cassandra.us-west-2.amazonaws.com'], localDataCenter: 'us-west-2', authProvider: auth, sslOptions: sslOptions1, protocolOptions: { port: 9142 } }); const query = 'SELECT * FROM system_schema.keyspaces'; client.execute(query) .then( result => console.log('Row from Keyspaces %s', result.rows[0])) .catch( e=> console.log(`${e}`));

使用说明:

  1. "path_to_file/keyspaces-bundle.pem"替换为第一步中保存的合并证书文件的路径。

  2. 按照以下步骤操作,确保和与您在生成服务专用凭证时获得的用户名和密码ServicePassword相匹配。ServiceUserName 创建用于通过编程方式访问 Amazon Keyspaces 的服务特定凭证。

  3. 有关可用端点的列表,请参阅Amazon Keyspaces 的服务端点

使用适用于 Apache Cassandra DataStax 的 Node.js 驱动程序和 SigV4 身份验证插件连接到亚马逊密钥空间

以下部分介绍如何使用适用于 Apache Cassandra 的开源 DataStax Node.js 驱动程序的 Sigv4 身份验证插件来访问亚马逊密钥空间(适用于 Apache Cassandra)。

请按照为 Amazon Keyspaces 创建和配置 AWS 证书中的步骤为 IAM 用户或角色创建凭证(如果您尚未创建)。

从存储库中将 Node.js Sigv4 身份验证插件添加到您的应用程序中。GitHub 该插件支持 Cassandra 的 DataStax Node.js 驱动程序版本 4.x,并且依赖于 Node.js 的 AWS SDK。它使用 AWSCredentialsProvider 获取凭证。

$ npm install aws-sigv4-auth-cassandra-plugin --save

本代码示例展示了如何将 SigV4AuthProvider 的区域特定实例设置为身份验证提供商。

const cassandra = require('cassandra-driver'); const fs = require('fs'); const sigV4 = require('aws-sigv4-auth-cassandra-plugin'); const auth = new sigV4.SigV4AuthProvider({ region: 'us-west-2', accessKeyId:'AKIAIOSFODNN7EXAMPLE', secretAccessKey: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'}); const sslOptions1 = { ca: [ fs.readFileSync('path_to_file/keyspaces-bundle.pem', 'utf-8')], host: 'cassandra.us-west-2.amazonaws.com', rejectUnauthorized: true }; const client = new cassandra.Client({ contactPoints: ['cassandra.us-west-2.amazonaws.com'], localDataCenter: 'us-west-2', authProvider: auth, sslOptions: sslOptions1, protocolOptions: { port: 9142 } }); const query = 'SELECT * FROM system_schema.keyspaces'; client.execute(query).then( result => console.log('Row from Keyspaces %s', result.rows[0])) .catch( e=> console.log(`${e}`));

使用说明:

  1. "path_to_file/keyspaces-bundle.pem" 替换为第一步中保存的证书的路径。

  2. 确保accessKeyIdsecretAccessKey与您使用获得的访问密钥和私有访问密钥相匹配AWSCredentialsProvider。有关更多信息,请参阅 Node.js 中的AWS SDK 中在 Node.js JavaScript 中设置凭证

  3. 要在代码之外存储访问密钥,请参阅存储用于通过编程方式进行访问的访问密钥中的最佳实践。

  4. 有关可用端点的列表,请参阅Amazon Keyspaces 的服务端点