

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

# 使用 Cassandra Node.js 客户端驱动程序以编程方式访问 Amazon Keyspaces
<a name="using_nodejs_driver"></a>

 本节向您展示如何使用 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 证书](access.credentials.md)。

**Topics**
+ [开始前的准备工作](#using_nodejs_driver.BeforeYouBegin)
+ [使用 Apache Cassandra 的 Node.js DataStax 驱动程序和特定于服务的凭证连接到 Amazon Keyspaces](#nodejs_ssc)
+ [使用 Apache Cassandra 的 DataStax Node.js 驱动程序和 SigV4 身份验证插件连接到 Amazon Keyspaces](#nodejs_SigV4)

## 开始前的准备工作
<a name="using_nodejs_driver.BeforeYouBegin"></a>

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

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

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

1. AmazonRootCA1

1. AmazonRootCA2

1. AmazonRootCA3

1. AmazonRootCA4

1. 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 根 CA 1—4）颁发的证书。在此过渡期间，将客户端配置为同时信任 Amazon 根 CA 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 驱动程序和特定于服务的凭证连接到 Amazon Keyspaces
<a name="nodejs_ssc"></a>

 将您的驱动程序配置为使用 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}}"`替换为第一步中保存的合并证书文件的路径。

1. 按照以下步骤操作，确保和与您在生成服务特定凭证时获得的用户名和密码{{ServicePassword}}相匹配。{{ServiceUserName}} [创建用于通过编程方式访问 Amazon Keyspaces 的服务特定凭证。](programmatic.credentials.ssc.md)

1. 有关可用端点的列表，请参阅[Amazon Keyspaces 的服务端点](programmatic.endpoints.md)。

## 使用 Apache Cassandra 的 DataStax Node.js 驱动程序和 SigV4 身份验证插件连接到 Amazon Keyspaces
<a name="nodejs_SigV4"></a>

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

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

[从存储库将 Node.js SigV4 身份验证插件添加到您的应用程序中。GitHub ](https://github.com/aws/aws-sigv4-auth-cassandra-nodejs-driver-plugin)该插件支持 Cassandra 的 4.x 版 DataStax Node.js 驱动程序，并且取决于 AWS 适用的 SDK。 Node.js它使用 `AWSCredentialsProvider` 获取凭证。

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

此代码示例说明如何将的 Region-specific 实例设置`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}}"` 替换为第一步中保存的证书的路径。

1. 确保{{accessKeyId}}和{{secretAccessKey}}与您使用获得的访问密钥和私有访问密钥相匹配`AWSCredentialsProvider`。有关更多信息，请参阅[中的 *AWS SDK Node.js* 中设置凭证](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/setting-credentials-node.html) Node.js。 JavaScript 

1. 要在代码之外存储访问密钥，请参阅[存储用于通过编程方式进行访问的访问密钥](aws.credentials.manage.md)中的最佳实践。

1. 有关可用端点的列表，请参阅[Amazon Keyspaces 的服务端点](programmatic.endpoints.md)。