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

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

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

使用带有签名版本 4 身份验证的 Gremlin 控制台连接到 Amazon Neptune 的方式取决于您使用的是版本还是更高 TinkerPop 版本3.4.11,还是更早的版本。无论哪种情况,都必须满足以下先决条件:

如果您使用的是临时凭证,则它们将在指定的间隔后过期,会话令牌也是如此,因此在请求新凭证时必须更新会话令牌。请参阅 IAM 用户指南中的使用临时安全证书请求 Amazon 资源访问权限

有关使用 SSL/TLS 帮助进行连接的帮助,请参阅SSL/TLS 配置

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

在 TinkerPop 3.4.11 或更高版本中,您将使用handshakeInterceptor(),它提供了一种将 Sigv4 签名者插入命令建立的连接的方法。:remote与用于 Java 的方法一样,它要求您手动配置 Cluster 对象,然后将其传递给 :remote 命令。

请注意,这与 :remote 命令使用配置文件来形成连接的典型情况大不相同。配置文件方法不起作用,因为必须以编程方式设置 handshakeInterceptor(),并且无法从文件加载其配置。

使用 Sig4 签名连接 Gremlin 主机(TinkerPop 3.4.11 及更高版本)
  1. 启动 Gremlin 控制台:

    $ bin/gremlin.sh
  2. gremlin> 提示符下,安装 amazon-neptune-sigv4-signer 库(对于控制台,此操作只需执行一次):

    :install com.amazonaws amazon-neptune-sigv4-signer 2.4.0

    如果您在此步骤中遇到问题,请参考有关 Gr ap e 配置的TinkerPop 文档可能会有所帮助。

    注意

    如果您使用的是 HTTP 代理,则在此步骤中可能会遇到 :install 命令未完成的错误。要解决此问题,请运行以下命令来告知控制台有关代理的信息:

    System.setProperty("https.proxyHost", "(the proxy IP address)") System.setProperty("https.proxyPort", "(the proxy port)")
  3. 将处理签名所需的类导入到 handshakeInterceptor() 中:

    :import com.amazonaws.auth.DefaultAWSCredentialsProviderChain :import com.amazonaws.neptune.auth.NeptuneNettyHttpSigV4Signer
  4. 如果您使用的是临时凭证,则还需要按以下方式提供会话令牌:

    System.setProperty("aws.sessionToken","(your session token)")
  5. 如果您尚未以其它方式建立账户凭证,则可以按以下方式分配凭证:

    System.setProperty("aws.accessKeyId","(your access key)") System.setProperty("aws.secretKey","(your secret key)")
  6. 手动构造要连接到 Neptune 的 Cluster 对象:

    cluster = Cluster.build("(host name)") \ .enableSsl(true) \ .handshakeInterceptor { r -> \ def sigV4Signer = new NeptuneNettyHttpSigV4Signer("(Amazon region)", \ new DefaultAWSCredentialsProviderChain()); \ sigV4Signer.signRequest(r); \ return r; } \ .create()

    有关查找 Neptune 数据库实例的主机名的帮助,请参阅连接到 Amazon Neptune 端点

  7. 使用上一步中 Cluster 对象的变量名建立 :remote 连接:

    :remote connect tinkerpop.server cluster
  8. 输入以下命令以切换到远程模式。这会将所有 Gremlin 查询发送到远程连接:

    :remote console

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

在 TinkerPop 3.4.10 或更低版本中,使用 Neptune 提供的amazon-neptune-gremlin-java-sigv4库通过 Sigv4 签名将主机连接到 Neptune,如下所述:

使用 Sig4 签名连接 Gremlin 主机(3.4.11 之前的TinkerPop 版本)
  1. 启动 Gremlin 控制台:

    $ bin/gremlin.sh
  2. gremlin> 提示符下,安装 amazon-neptune-sigv4-signer 库(对于控制台,此操作只需执行一次):

    :install com.amazonaws amazon-neptune-sigv4-signer 2.4.0
    注意

    如果您使用的是 HTTP 代理,则在此步骤中可能会遇到 :install 命令未完成的错误。要解决此问题,请运行以下命令来告知控制台有关代理的信息:

    System.setProperty("https.proxyHost", "(the proxy IP address)") System.setProperty("https.proxyPort", "(the proxy port)")

    查阅有关 Gr ap e 配置的TinkerPop 文档也可能有所帮助。

  3. 在提取的目录的 conf 子目录中,创建名为 neptune-remote.yaml 的文件。

    如果您使用该 Amazon CloudFormation 模板创建 Neptune 数据库集群,则neptune-remote.yaml文件将已经存在。在这种情况下,您所要做的就是编辑现有文件,以包含如下所示的频道选择器设置。

    否则,请将以下文本复制到文件中,同时将 (host name) 替换为 Neptune 数据库实例的主机名或 IP 地址。请注意,必须使用方括号 ([ ]) 包含主机名。

    hosts: [(host name)] port: 8182 connectionPool: { channelizer: org.apache.tinkerpop.gremlin.driver.SigV4WebSocketChannelizer, enableSsl: true } serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1, config: { serializeResultToString: true }}
  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 me-central-1 or il-central-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 签名程序使用默认的凭证提供程序链。有关提供凭证的其它方法,请参阅《Amazon SDK for Java 开发人员指南》中的使用默认凭证提供程序链

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

  5. 使用 .yaml 文件建立 :remote 连接:

    :remote connect tinkerpop.server conf/neptune-remote.yaml
  6. 输入以下命令切换到远程模式,该模式会将所有 Gremlin 查询发送到远程连接:

    :remote console