本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Cassandra Go 客户端驱动程序以编程方式访问亚马逊Keyspaces
本节说明了如何使用 Go 客户端驱动程序连接到 Amazon Keyspaces。要向用户和应用程序提供对 Amazon Keyspaces 资源进行编程访问的凭证,您可以执行以下任一操作:
-
创建与特定服务关联的服务特定凭证Amazon Identity and Access Management(IAM) 用户。
-
为了增强安全性,我们建议为所有用户和角色创建 IAM 访问密钥Amazon服务。适用于 Cassandra 客户端驱动程序的 Amazon Keyspaces Sigv4 身份验证插件使您能够使用 IAM 访问密钥而不是用户名和密码对对 Amazon Keyspaces 的调用进行身份验证。有关更多信息,请参阅 如何创建和配置AmazonAmazon Keyspaces 凭证。
主题
开始前的准备工作
您需要完成以下任务才能开始执行以下任务。
Amazon Keyspaces 需要使用传输层安全性 (TLS) 来帮助保护与客户端的连接。要使用 TLS 连接到亚马逊Keyspaces,您需要下载亚马逊数字证书并将 Python 驱动程序配置为使用 TLS。
使用以下命令下载 Starfield 数字证书并保存sf-class2-root.crt本地或您的主目录中。
curl https://certs.secureserver.net/repository/sf-class2-root.crt -O
您也可以使用亚马逊数字证书连接到亚马逊Keyspaces,如果您的客户端成功连接到亚马逊Keyspaces,则可以继续这样做。Starfield 证书为使用旧证书颁发机构的客户提供了额外的向后兼容性。
curl https://certs.secureserver.net/repository/sf-class2-root.crt -O
使用 Apache Cassandra 的 Gocql 驱动程序和服务特定证书Connect 亚马逊Keyspaces
-
为您的应用程序创建一个目录。
mkdir ./gocqlexample -
导航到新目录。
cd gocqlexample -
为您的应用程序创建一个文件。
touch cqlapp.go -
下载 Go 驱动程序。
go get github.com/gocql/gocql -
将以下示例代码添加到 cqlapp.go 文件中。
package main import ( "fmt" "github.com/gocql/gocql" "log" ) func main() { // add the Amazon Keyspaces service endpoint cluster := gocql.NewCluster("cassandra.us-east-2.amazonaws.com") cluster.Port=9142 // add your service specific credentials cluster.Authenticator = gocql.PasswordAuthenticator{ Username: "ServiceUserName", Password: "ServicePassword"} // provide the path to the sf-class2-root.crt cluster.SslOpts = &gocql.SslOptions{ CaPath: "path_to_file/sf-class2-root.crt", EnableHostVerification: false, } // Override default Consistency to LocalQuorum cluster.Consistency = gocql.LocalQuorum cluster.DisableInitialHostLookup = false session, err := cluster.CreateSession() if err != nil { fmt.Println("err>", err) } defer session.Close() // run a sample query from the system keyspace var text string iter := session.Query("SELECT keyspace_name FROM system_schema.tables;").Iter() for iter.Scan(&text) { fmt.Println("keyspace_name:", text) } if err := iter.Close(); err != nil { log.Fatal(err) } session.Close() }使用说明:
Replace(替换)
"在第一步中保存了证书的路径。path_to_file/sf-class2-root.crt"确保
ServiceUserName和ServicePassword按照以下步骤与您在生成服务特定凭证时获得的用户名和密码相匹配生成服务特定凭证.有关可用终端节点的列表,请参阅Amazon Keyspaces。
构建程序。
go build cqlapp.go运行程序。
./cqlapp
使用 Apache Cassandra 的 Go 驱动程序和 SigV4 身份验证插件Connect 亚马逊 Keyspaces
以下代码示例显示了如何使用开源 Go 驱动程序的 SigV4 身份验证插件来访问 Amazon Keyspaces(适用于 Apache Cassandra)。
如果您尚未执行此操作,请按照以下步骤为您的 IAM 用户或角色创建凭证如何创建和配置AmazonAmazon Keyspaces 凭证.
从以下位置将 Go SigV4 身份验证插件添加到您的应用程序中GitHub 知识库
$ go mod init $ go get github.com/aws/aws-sigv4-auth-cassandra-gocql-driver-plugin
在此代码示例中,Amazon Keyspaces 终端节点由Cluster类。它使用AwsAuthenticator以便集群的身份验证器属性获取证书。
package main import ( "fmt" "github.com/aws/aws-sigv4-auth-cassandra-gocql-driver-plugin/sigv4" "github.com/gocql/gocql" "log" ) func main() { // configuring the cluster options cluster := gocql.NewCluster("cassandra.us-west-2.amazonaws.com") cluster.Port=9142 var auth sigv4.AwsAuthenticator = sigv4.NewAwsAuthenticator() auth.Region = "us-west-2" auth.AccessKeyId = "AKIAIOSFODNN7EXAMPLE" auth.SecretAccessKey = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" cluster.Authenticator = auth cluster.SslOpts = &gocql.SslOptions{ CaPath: "path_to_file/sf-class2-root.crt", EnableHostVerification: false, } cluster.Consistency = gocql.LocalQuorum cluster.DisableInitialHostLookup = false session, err := cluster.CreateSession() if err != nil { fmt.Println("err>", err) return } defer session.Close() // doing the query var text string iter := session.Query("SELECT keyspace_name FROM system_schema.tables;").Iter() for iter.Scan(&text) { fmt.Println("keyspace_name:", text) } if err := iter.Close(); err != nil { log.Fatal(err) } }
使用说明:
Replace(替换)
"在第一步中保存了证书的路径。path_to_file/sf-class2-root.crt"确保
AccessKeyId和SecretAccessKey匹配您使用使用获得的访问密钥和秘密访问密钥AwsAuthenticator. 有关更多信息,请参阅 。配置Amazon适用于 Go 的开发工具包在Amazon SDK for Go.要在代码之外存储访问密钥,请参阅以下最佳实践如何管理 IAM 用户的访问密钥.
有关可用终端节点的列表,请参阅Amazon Keyspaces。