本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Cassandra Java 客户端驱动程序以编程方式访问亚马逊Keyspaces
本节说明了如何使用 Java 客户端驱动程序连接到 Amazon Keyspaces。要向用户和应用程序提供对 Amazon Keyspaces 资源进行编程访问的凭证,您可以执行以下任一操作:
-
创建与特定服务关联的服务特定凭证Amazon Identity and Access Management(IAM) 用户。
-
为了增强安全性,我们建议为所有用户或角色创建 IAM 访问密钥Amazon服务。适用于 Cassandra 客户端驱动程序的 Amazon Keyspaces Sigv4 身份验证插件使您能够使用 IAM 访问密钥而不是用户名和密码对对 Amazon Keyspaces 的调用进行身份验证。有关更多信息,请参阅 如何创建和配置AmazonAmazon Keyspaces 凭证。
有关如何在 Spring Boot 中使用亚马逊Keyspaces 的示例,请参阅https://github.com/aws-samples/amazon-keyspaces-spring-app-example
主题
开始前的准备工作
要连接到 Amazon Keyspaces,您需要完成以下任务。
Amazon Keyspaces 需要使用传输层安全性 (TLS) 来帮助保护与客户端的连接。
使用以下命令下载 Starfield 数字证书并保存
sf-class2-root.crt本地或您的主目录中。curl https://certs.secureserver.net/repository/sf-class2-root.crt -O注意 您也可以使用亚马逊数字证书连接到亚马逊Keyspaces,如果您的客户端成功连接到亚马逊Keyspaces,则可以继续这样做。Starfield 证书为使用旧证书颁发机构的客户提供了额外的向后兼容性。
将 Starfield 数字证书转换为 TrustStore 文件。
openssl x509 -outform der -in sf-class2-root.crt -out temp_file.der keytool -import -alias cassandra -keystore cassandra_truststore.jks -file temp_file.der在此步骤中,您需要为密钥库创建密码并信任此证书。交互式命令看起来像这样。
Enter keystore password: Re-enter new password: Owner: OU=Starfield Class 2 Certification Authority, O="Starfield Technologies, Inc.", C=US Issuer: OU=Starfield Class 2 Certification Authority, O="Starfield Technologies, Inc.", C=US Serial number: 0 Valid from: Tue Jun 29 17:39:16 UTC 2004 until: Thu Jun 29 17:39:16 UTC 2034 Certificate fingerprints: MD5: 32:4A:4B:BB:C8:63:69:9B:BE:74:9A:C6:DD:1D:46:24 SHA1: AD:7E:1C:28:B0:64:EF:8F:60:03:40:20:14:C3:D0:E3:37:0E:B5:8A SHA256: 14:65:FA:20:53:97:B8:76:FA:A6:F0:A9:95:8E:55:90:E4:0F:CC:7F:AA:4F:B7:C2:C8:67:75:21:FB:5F:B6:58 Signature algorithm name: SHA1withRSA Subject Public Key Algorithm: 2048-bit RSA key Version: 3 Extensions: #1: ObjectId: 2.5.29.35 Criticality=false AuthorityKeyIdentifier [ KeyIdentifier [ 0000: BF 5F B7 D1 CE DD 1F 86 F4 5B 55 AC DC D7 10 C2 ._.......[U..... 0010: 0E A9 88 E7 .... ] [OU=Starfield Class 2 Certification Authority, O="Starfield Technologies, Inc.", C=US] SerialNumber: [ 00] ] #2: ObjectId: 2.5.29.19 Criticality=false BasicConstraints:[ CA:true PathLen:2147483647 ] #3: ObjectId: 2.5.29.14 Criticality=false SubjectKeyIdentifier [ KeyIdentifier [ 0000: BF 5F B7 D1 CE DD 1F 86 F4 5B 55 AC DC D7 10 C2 ._.......[U..... 0010: 0E A9 88 E7 .... ] ] Trust this certificate? [no]: y
-
将 trustStore 文件附加到 JVM 参数中:
-Djavax.net.ssl.trustStore=path_to_file/cassandra_truststore.jks -Djavax.net.ssl.trustStorePassword=my_password
Step-by-step 使用连接到 Amazon Keyspaces DataStax 使用特定服务凭据的 Apache Cassandra 的 Java 驱动程序
以下 step-by-step 教程将指导您使用服务特定证书使用适用于 Cassandra 的 Java 驱动程序连接到 Amazon Keyspaces。具体来说,你将使用 4.0 版本的 DataStax Apache Cassandra 的 Java 驱动程序。
第 1 步:先决条件
要完成本教程,您需要生成服务特定凭证并添加 DataStax 你的 Java 项目的 Apache Cassandra 的 Java 驱动程序。
完成中的步骤,为您的 Amazon Keyspaces IAM 用户生成服务专用证书生成服务特定凭证. 如果您更喜欢使用 IAM 访问密钥进行身份验证,请参阅Step-by-step 使用 4.x 连接到 Amazon Keyspaces DataStax 适用于 Apache Cassandra 的 Java 驱动程序和 SigV4 身份验证插件.
添加 DataStax 你的 Java 项目的 Apache Cassandra 的 Java 驱动程序。确保你使用的是支持 Apache Cassandra 3.11.2 的驱动程序版本。有关更多信息,请参阅 。DataStax Apache Cassandra 文档的 Java 驱动程序
.
第 2 步:配置驱动程序
您可以指定设置 DataStax Java Cassandra 驱动程序通过为您的应用程序创建配置文件来实现。此配置文件会覆盖默认设置,并告知驱动程序使用端口 9142 连接到 Amazon Keyspaces 服务终端节点。有关可用服务终端节点的列表Amazon Keyspaces.
创建配置文件并将该文件保存在应用程序的资源文件夹中,例如,src/main/resources/application.conf. Open(打开)application.conf并添加以下配置设置。
身份验证提供商— 使用以下命令创建身份验证提供商
PlainTextAuthProvider类。ServiceUserName和ServicePassword应与您在按照中的步骤生成特定服务凭证时获得的用户名和密码相匹配生成服务特定凭证.注意 您可以使用身份验证插件来使用短期证书 DataStax 适用于 Apache Cassandra 的 Java 驱动程序,而不是驱动程序配置文件中的硬编码凭据。要了解更多信息,Step-by-step 使用 4.x 连接到 Amazon Keyspaces DataStax 适用于 Apache Cassandra 的 Java 驱动程序和 SigV4 身份验证插件.
本地数据中心— 设置值
local-datacenter到你要连接的区域。例如,如果应用程序正在连接到cassandra.us-east-2.amazonaws.com,然后将本地数据中心设置为us-east-2. 全部可用Amazon Web Services 区域,请参阅Amazon Keyspaces.SSLSLSL— 初始化 SSLEngineFactory 通过在配置文件中添加一个部分,用一行指定类
class = DefaultSslEngineFactory. 提供您之前创建的 TrustStore 文件的路径和密码。
datastax-java-driver { basic.contact-points = [ "cassandra.us-east-2.amazonaws.com:9142"] advanced.auth-provider{ class = PlainTextAuthProvider username ="ServiceUserName"password ="ServicePassword"} basic.load-balancing-policy { local-datacenter ="us-east-2"} advanced.ssl-engine-factory { class = DefaultSslEngineFactory truststore-path ="./src/main/resources/cassandra_truststore.jks"truststore-password ="my_password"hostname-validation = false } }
您也可以直接在应用程序代码中添加 TrustStore 路径,也可以将 TrustStore 的路径添加到 JVM 参数中,而不是在配置文件中添加 TrustStore 的路径。
第 3 步:运行示例应用程序
此代码示例显示了一个简单的命令行应用程序,该应用程序使用我们之前创建的配置文件创建了与 Amazon Keyspaces 的连接池。它通过运行一个简单的查询来确认连接已建立。
package<your package>; // add the following imports to your project import com.datastax.oss.driver.api.core.CqlSession; import com.datastax.oss.driver.api.core.config.DriverConfigLoader; import com.datastax.oss.driver.api.core.cql.ResultSet; import com.datastax.oss.driver.api.core.cql.Row; public class App { public static void main( String[] args ) { //Use DriverConfigLoader to load your configuration file DriverConfigLoader loader = DriverConfigLoader.fromClasspath("application.conf"); try (CqlSession session = CqlSession.builder() .withConfigLoader(loader) .build()) { ResultSet rs = session.execute("select * from system_schema.keyspaces"); Row row = rs.one(); System.out.println(row.getString("keyspace_name")); } } }
使用try阻塞以建立连接,确保连接始终处于关闭状态。如果你不使用try阻止,记得关闭连接以避免资源泄漏。
Step-by-step 使用 4.x 连接到 Amazon Keyspaces DataStax 适用于 Apache Cassandra 的 Java 驱动程序和 SigV4 身份验证插件
以下部分介绍如何使用开源 4.x 的 SigV4 身份验证插件 DataStax for Apache Cassandra 访问亚马逊 Keyspaces spache Cassandra。该插件可从以下网址获得GitHub知识库
SigV4 身份验证插件允许您在连接到 Amazon Keyspaces 时使用用户或角色的 IAM 证书。该插件不需要用户名和密码,而是使用访问密钥签署 API 请求。有关更多信息,请参阅 如何创建和配置AmazonAmazon Keyspaces 凭证。
第 1 步:先决条件
要完成以下任务。
如果您尚未执行此操作,请按照以下步骤为您的 IAM 用户或角色创建凭证如何创建和配置AmazonAmazon Keyspaces 凭证. 本教程假设访问密钥存储为环境变量。有关更多信息,请参阅 如何管理 IAM 用户的访问密钥。
添加 DataStax 你的 Java 项目的 Apache Cassandra 的 Java 驱动程序。确保你使用的是支持 Apache Cassandra 3.11.2 的驱动程序版本。有关更多信息,请参阅 。DataStax Apache Cassandra 的 Java 驱动程序文档
. 将身份验证插件添加到您的应用程序中。身份验证插件支持 4.x 版 DataStax Apache Cassandra 的 Java 驱动程序。如果您使用的是 Apache Maven 或可以使用 Maven 依赖关系的构建系统,请将以下依赖关系添加到您的
pom.xml文件中。重要 用最新版本替换插件的版本,如下所示GitHub 知识库
. <dependency> <groupId>software.aws.mcs</groupId> <artifactId>aws-sigv4-auth-cassandra-java-driver-plugin</artifactId> <version>4.0.5</version> </dependency>
第 2 步:配置驱动程序
您可以指定设置 DataStax Java Cassandra 驱动程序通过为您的应用程序创建配置文件来实现。此配置文件会覆盖默认设置,并告知驱动程序使用端口 9142 连接到 Amazon Keyspaces 服务终端节点。有关可用服务终端节点的列表Amazon Keyspaces.
创建配置文件并将该文件保存在应用程序的资源文件夹中,例如,src/main/resources/application.conf. Open(打开)application.conf并添加以下配置设置。
身份验证提供商— 设置
advanced.auth-provider.class到一个新的实例software.aws.mcs.auth.SigV4AuthProvider. Sigv4AuthProvider 是插件提供的用于执行 Sigv4 身份验证的身份验证处理程序。本地数据中心— 设置值
local-datacenter到你要连接的区域。例如,如果应用程序正在连接到cassandra.us-east-2.amazonaws.com,然后将本地数据中心设置为us-east-2. 全部可用Amazon Web Services 区域,请参阅Amazon Keyspaces.SSLSLSL— 初始化 SSLEngineFactory 通过在配置文件中添加一个部分,用一行指定类
class = DefaultSslEngineFactory. 提供您之前创建的 TrustStore 文件的路径和密码。
datastax-java-driver { basic.contact-points = ["cassandra.us-east-2.amazonaws.com:9142"] basic.load-balancing-policy { class = DefaultLoadBalancingPolicy local-datacenter =us-east-2} advanced { auth-provider = { class = software.aws.mcs.auth.SigV4AuthProvider aws-region =us-east-2} ssl-engine-factory { class = DefaultSslEngineFactory truststore-path ="./src/main/resources/cassandra_truststore.jks"truststore-password ="my_password"hostname-validation = false } } }
您也可以直接在应用程序代码中添加 TrustStore 路径,也可以将 TrustStore 的路径添加到 JVM 参数中,而不是在配置文件中添加 TrustStore 的路径。
第 3 步:运行应用程序
此代码示例显示了一个简单的命令行应用程序,该应用程序使用我们之前创建的配置文件创建了与 Amazon Keyspaces 的连接池。它通过运行一个简单的查询来确认连接已建立。
package<your package>; // add the following imports to your project import com.datastax.oss.driver.api.core.CqlSession; import com.datastax.oss.driver.api.core.config.DriverConfigLoader; import com.datastax.oss.driver.api.core.cql.ResultSet; import com.datastax.oss.driver.api.core.cql.Row; public class App { public static void main( String[] args ) { //Use DriverConfigLoader to load your configuration file DriverConfigLoader loader = DriverConfigLoader.fromClasspath("application.conf"); try (CqlSession session = CqlSession.builder() .withConfigLoader(loader) .build()) { ResultSet rs = session.execute("select * from system_schema.keyspaces"); Row row = rs.one(); System.out.println(row.getString("keyspace_name")); } } }
使用try阻塞以建立连接,确保连接始终处于关闭状态。如果你不使用try阻止,记得关闭连接以避免资源泄漏。
使用 3.x Connect 亚马逊Keyspaces DataStax适用于 Apache Cassandra 的 Java 驱动程序和 SigV4 身份验证插件
以下部分介绍如何使用适用于 3.x 开源的 SigV4 身份验证插件 DataStax Apache Cassandra 访问亚马逊 Keyspaces 的 Java 驱动程序。该插件可从以下网址获得GitHub 知识库
SigV4 身份验证插件允许您在连接到 Amazon Keyspaces 时使用用户和角色的 IAM 证书。该插件不需要用户名和密码,而是使用访问密钥签署 API 请求。有关更多信息,请参阅 如何创建和配置AmazonAmazon Keyspaces 凭证。
第 1 步:先决条件
要运行此代码示例,您首先需要完成以下任务。
按照中的步骤为您的 IAM 用户或角色创建证书如何创建和配置AmazonAmazon Keyspaces 凭证. 本教程假设访问密钥存储为环境变量。有关更多信息,请参阅 如何管理 IAM 用户的访问密钥。
按中的步骤操作开始前的准备工作要下载 Starfield 数字证书,请将其转换为 TrustStore 文件,然后将 JVM 参数中的 TrustStore 文件附加到您的应用程序中。
添加 DataStax 你的 Java 项目的 Apache Cassandra 的 Java 驱动程序。确保你使用的是支持 Apache Cassandra 3.11.2 的驱动程序版本。有关更多信息,请参阅 。DataStax Apache Cassandra 的 Java 驱动程序文档
. 将身份验证插件添加到您的应用程序中。身份验证插件支持 3.x 版的 DataStax Apache Cassandra 的 Java 驱动程序。如果您使用的是 Apache Maven 或可以使用 Maven 依赖关系的构建系统,请将以下依赖关系添加到您的
pom.xml文件中。用最新版本替换插件的版本,如下所示GitHub 知识库. <dependency> <groupId>software.aws.mcs</groupId> <artifactId>aws-sigv4-auth-cassandra-java-driver-plugin_3</artifactId> <version>3.0.3</version> </dependency>
第 2 步:运行应用程序
此代码示例显示了一个简单的命令行应用程序,该应用程序创建了与 Amazon Keyspaces 的连接池。它通过运行一个简单的查询来确认连接已建立。
package<your package>; // add the following imports to your project import software.aws.mcs.auth.SigV4AuthProvider; import com.datastax.driver.core.Cluster; import com.datastax.driver.core.ResultSet; import com.datastax.driver.core.Row; import com.datastax.driver.core.Session; public class App { public static void main( String[] args ) { String endPoint = "cassandra.us-east-2.amazonaws.com"; int portNumber = 9142; Session session = Cluster.builder() .addContactPoint(endPoint) .withPort(portNumber) .withAuthProvider(new SigV4AuthProvider("us-east-2")) .withSSL() .build() .connect(); ResultSet rs = session.execute("select * from system_schema.keyspaces"); Row row = rs.one(); System.out.println(row.getString("keyspace_name")); } }
使用说明:
有关可用终端节点的列表,请参阅Amazon Keyspaces。