使用 Gremlin 控制台和签名版本 4 签名连接到 Neptune - Amazon Neptune
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

使用 Gremlin 控制台和签名版本 4 签名连接到 Neptune

使用 3.4.11 之前的 TinkerPop 版本通过 Sig4 签名连接到 Neptune

本部分介绍如何在使用 3.4.11 之前的 TinkerPop 版本时,如何使用具有签名版本 4 身份验证的 Grimlin 控制台连接到 Amazon Neptune。从 TinkerPop 3.4.11 开始,Neptune 支持截至引擎版本 1.0.5.0,你可以在 TinkerPop 驱动程序中添加回调来拦截 WebSocket 握手,然后使用标准的 Sig4 库进行签名。请参阅展示如何做到这一点的例子.

注意

每个数据库实例的并发 WebSocket 连接数以及连接可以保持打开的时间长短有限制。有关更多信息,请参阅Websocket 限制

Prerequisites

  • Java 8 或更高版本。

  • Apache Maven 3.3 或更高版本。

    有关在运行 Amazon Linux 的 EC2 实例上安装这些先决条件的信息,请参阅 Amazon Linux EC2 上的先决条件

  • 用于对请求进行签名的 IAM 凭证。有关更多信息,请参阅 。使用默认凭证提供程序链中的Amazon SDK for Java开发人员指南.

    注意

    如果您使用的是临时凭证,这些凭证(包括会话令牌)将在指定时间间隔后到期。

    在请求新凭证时,您必须更新您的会话令牌。有关更多信息,请参阅 IAM 用户指南中的使用临时安全凭证以请求对 Amazon 资源的访问权限

  • 设置SERVICE_REGION变量为以下内容之一,以指示的是 Neptune 数据库实例的区域:

    • 美国东部(弗吉尼亚北部):us-east-1

    • 美国东部(俄亥俄):us-east-2

    • 美国西部(加利福尼亚北部):us-west-1

    • 美国西部(俄勒冈):us-west-2

    • 加拿大(中部):ca-central-1

    • 南美洲(圣保罗):sa-east-1

    • 欧洲(斯德哥尔摩):eu-north-1

    • 欧洲(爱尔兰):eu-west-1

    • 欧洲(伦敦):eu-west-2

    • 欧洲(巴黎):eu-west-3

    • 欧洲(法兰克福):eu-central-1

    • 中东(巴林):me-south-1

    • 亚太地区(香港):ap-east-1

    • 亚太地区(东京):ap-northeast-1

    • 亚太地区(首尔):ap-northeast-2

    • 亚太地区(新加坡):ap-southeast-1

    • 亚太地区(悉尼):ap-southeast-2

    • 亚太地区(孟买):ap-south-1

    • 中国(北京):cn-north-1

    • 中国(宁夏):cn-northwest-1

    • AmazonGovCloud(美国西部):us-gov-west-1

    • AmazonGovCloud(美国东部):us-gov-east-1

要使用 Grimlin 控制台和签名版本 4 签名连接到 Neptune,并使用 TinkerPop 版本早于 3.4.11 签名连接到 Neptune

  1. 下载Gremlin 控制台(版本 3.4.8 至 3.4.10)来自Apache Tinkerop3到您的 EC2 实例的网站。

  2. 解压缩 Gremlin 控制台 zip 文件。

    unzip apache-tinkerpop-gremlin-console-3.4.10-bin.zip
  3. 从 GitHub 克隆示例存储库。

    git clone https://github.com/aws/amazon-neptune-gremlin-java-sigv4.git
  4. 将目录更改为 amazon-neptune-gremlin-java-sigv4

    cd amazon-neptune-gremlin-java-sigv4
  5. 通过检出适合于您的 TinkerPop 版本的分支获取 sigv4 项目的版本。对于 3.4.9 之前的 TinkerPop 客户端版本,这将是 2.1.1:

    git checkout $(git describe --tags `git checkout v2.1.1`)

    对于 TinkerPop 3.4.9 及更高版本,获取 2.1.2 版本:

    git checkout $(git describe --tags `git checkout v2.1.2`)
  6. 生成、打包和获取项目的依赖项。

    mvn package dependency:copy-dependencies
  7. 复制程序包 jar 和所有依赖项 jar 到 Gremlin 控制台库目录。

    cp target/{*.jar,dependency/*.jar} ../apache-tinkerpop-gremlin-console-3.4.8/lib
  8. 删除 Gremlin 控制台库目录中冲突的依赖项 jar。

    rm ../apache-tinkerpop-gremlin-console-3.4.8/lib/netty-all-4.1.22.Final.jar
  9. 将目录更改为未压缩的 Gremlin 控制台目录。

    cd ../apache-tinkerpop-gremlin-console-3.4.8
  10. 下载 CA 证书。Gremlin 控制台需要一个证书来验证远程证书。

    wget https://www.amazontrust.com/repository/SFSRootCAG2.pem
  11. 在提取的目录的 conf 子目录中,创建名为 neptune-remote.yaml 的包含以下文本的文件。Replace你的海王星端点使用 Neptune 数据库实例的主机名或 IP 地址。方括号 ([ ]) 是必需的。

    注意

    有关查找 Neptune 数据库实例的主机名的信息,请参阅连接到 Amazon Neptune 终端节点部分。

    hosts: [your-neptune-endpoint] port: 8182 connectionPool: { channelizer: org.apache.tinkerpop.gremlin.driver.SigV4WebSocketChannelizer, enableSsl: true, trustCertChainFile: "SFSRootCAG2.pem" } serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { serializeResultToString: true }}
  12. 重要

    您必须提供 IAM 凭证才能对请求进行签名。输入以下命令以将您的凭证设置为环境变量,替换与您的凭证相关的项目。

    export AWS_ACCESS_KEY_ID=access_key_id export AWS_SECRET_ACCESS_KEY=secret_access_key export SERVICE_REGION=us-east-1 or us-east-2 or us-west-1 or us-west-2 or ca-central-1 or eu-north-1 or eu-west-1 or eu-west-2 or eu-west-3 or eu-central-1 or me-south-1 or ap-northeast-1 or ap-northeast-2 or ap-southeast-1 or ap-southeast-2 or ap-south-1 or cn-north-1 or cn-northwest-1 or us-gov-east-1 or us-gov-west-1

    Neptune Version 4 Signer 使用默认凭证提供程序链。有关提供凭证的其他方法,请参阅。使用默认凭证提供程序链中的Amazon SDK for Java开发人员指南.

    SERVICE_REGION 变量是必需的,即使在使用凭证文件时也是如此。

  13. 在终端中,导航到 Gremlin 控制台目录 (apache-tinkerpop-gremlin-console-3.4.8)。输入以下命令以运行 Gremlin 控制台。

    bin/gremlin.sh

    您应看到以下输出:

    \,,,/ (o o) -----oOOo-(3)-oOOo----- plugin activated: tinkerpop.server plugin activated: tinkerpop.utilities plugin activated: tinkerpop.tinkergraph gremlin>

    您现在位于 gremlin> 提示符处。您在此提示符处输入剩余步骤。

  14. gremlin>在提示符处,输入以下命令以连接到 Neptune 数据库实例。

    :remote connect tinkerpop.server conf/neptune-remote.yaml
  15. gremlin> 提示符处,输入以下命令以切换到远程模式。这会将所有 Gremlin 查询发送到远程连接。

    :remote console

使用 TinkerPop 3.4.11 或更高版本通过 Sig4 签名连接到 Neptune

以下是在使用 TinkerPop 3.4.11 或更高版本时如何在 Gremlin 控制台上签名使用 Sig4 连接到 Neptune 的示例:

:install com.amazonaws amazon-neptune-sigv4-signer 2.4.0 :install com.amazonaws aws-java-sdk-core 1.12.9 // The lines above only need to be executed once to get the dependencies into the console import com.amazonaws.auth.DefaultAWSCredentialsProviderChain import com.amazonaws.neptune.auth.NeptuneNettyHttpSigV4Signer System.setProperty("aws.accessKeyId","your-access-key") System.setProperty("aws.secretKey","your-secret-key") cluster = Cluster.build("your-cluster"). enableSsl(true).keyCertChainFile("SFSRootCAG2.pem"). handshakeInterceptor{ r -> def sigV4Signer = new NeptuneNettyHttpSigV4Signer("Amazon region", new DefaultAWSCredentialsProviderChain()) sigV4Signer.signRequest(r) return r }.create() client = cluster.connect() client.submit("g.V().has('code','IAD')").all().get()