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

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

通过签名版本 4 签名使用 Java 和 Gemlin 连接到 Neptune

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

本部分介绍如何在使用 Grimlin Java API 和签名版本 4 身份验证连接到 Amazon Neptune 时使用 Grimlin Java API 连接到 Amazon Neptune。 TinkerPop 早于 3.4.11。

请注意,如果您使用的是 TinkerPop 3.4.11 或更高版本,由 Neptune 支持引擎版本 1.0.5.0,您可以使用 TinkerPop 驱动程序直接连接 Sig4 签名。请参阅展示如何做到这一点的例子.

注意

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

先决条件

  • Java 8 或更高版本。

  • Apache Maven 3.3 或更高版本。

    有关在运行 Amazon Linux 的 Amazon 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

    • 非洲(开普敦):af-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

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

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

使用 Grelin Java API 和签名版本 4 签名连接到 Neptune

  1. 从 GitHub 克隆示例存储库。

    git clone https://github.com/aws/amazon-neptune-gremlin-java-sigv4.git
  2. 更改到克隆的目录中。

    cd amazon-neptune-gremlin-java-sigv4
  3. 通过检出具有最新标签的分支获取项目的最新版本。

    git checkout $(git describe --tags `git rev-list --tags --max-count=1`)
  4. 重要

    您必须提供 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 sa-east-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 af-south-1 or ap-east-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 4 Signer 使用默认凭证提供程序链。有关提供凭证的其他方法,请参阅。使用默认凭证提供程序链中的Amazon SDK for Java开发人员指南.

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

  5. 输入以下命令以编译和运行示例代码。

    Replace你的海王星端点使用 Neptune 数据库实例的主机名或 IP 地址。默认端口为 8182。

    注意

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

    mvn compile exec:java \ -Dexec.mainClass="com.amazon.neptune.gremlin.driver.example.NeptuneGremlinSigV4Example" \ -Dexec.args="-e your-neptune-endpoint -p 8182"
  6. 要查看示例的源代码,请参阅 NeptuneGremlinSigV4Example.java 目录中的 src/main/java/com/amazon/neptune/gremlin/driver/example 文件。

要在您自己的 Java 应用程序中使用 SigV4 签名驱动程序,请将以下内容添加到 pom.xml<dependencies> 部分。

<dependency> <groupId>org.apache.tinkerpop</groupId> <artifactId>gremlin-driver</artifactId> <version>3.5.2</version> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-core</artifactId> <version>1.11.307</version> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>amazon-neptune-sigv4-signer</artifactId> <version>2.1.1</version> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>amazon-neptune-gremlin-java-sigv4</artifactId> <version>2.1.1</version> </dependency>

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

以下示例说明如何在使用时使用 Grelin Java API 和 Sig4 签名连接到 Neptune。 TinkerPop 3.4.11 或更高版本。首先,定义依赖性:

<dependency> <groupId>com.amazonaws</groupId> <artifactId>amazon-neptune-sigv4-signer</artifactId> <version>2.4.0</version> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-core</artifactId> <version>1.12.9</version> </dependency>

然后,使用如下代码:

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(pem-file). handshakeInterceptor( r -> { NeptuneNettyHttpSigV4Signer sigV4Signer = new NeptuneNettyHttpSigV4Signer(region, new DefaultAWSCredentialsProviderChain()); sigV4Signer.signRequest(r); return r; }).create(); Client client = cluster.connect(); client.submit("g.V().has('code','IAD')").all().get();