本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Gremlin 控制台使用IAM身份验证连接到亚马逊 Neptune 数据库
使用带有签名版本 4 身份验证的 Gremlin 控制台连接到 Amazon Neptune 的方式取决于您使用的是版本还是更高 TinkerPop 版本3.4.11
,还是更早的版本。无论哪种情况,都必须满足以下先决条件:
您必须拥有签署请求所需的IAM凭证。请参阅《 AWS SDK for Java 开发者指南》中的使用默认凭证提供商链。
您已安装的 Gremlin 控制台版本必须与数据库集群正在使用的 Neptune 引擎版本兼容。
如果您使用的是临时凭证,则它们将在指定的间隔后过期,会话令牌也是如此,因此在请求新凭证时必须更新会话令牌。请参阅《IAM用户指南》中的使用临时安全证书请求对 AWS 资源的访问权限。
有关使用 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 及更高版本)
-
启动 Gremlin 控制台:
$ bin/gremlin.sh
-
在
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)
") -
将处理签名所需的类导入到
handshakeInterceptor()
中::import com.amazonaws.auth.DefaultAWSCredentialsProviderChain :import com.amazonaws.neptune.auth.NeptuneNettyHttpSigV4Signer
-
如果您使用的是临时凭证,则还需要按以下方式提供会话令牌:
System.setProperty("aws.sessionToken","(your session token)")
-
如果您尚未以其它方式建立账户凭证,则可以按以下方式分配凭证:
System.setProperty("aws.accessKeyId","
") System.setProperty("aws.secretKey","(your access key)
(your secret key)
") -
手动构造要连接到 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 端点。
-
使用上一步中
Cluster
对象的变量名建立:remote
连接::remote connect tinkerpop.server cluster
-
输入以下命令以切换到远程模式。这会将所有 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 版本)
-
启动 Gremlin 控制台:
$ bin/gremlin.sh
-
在
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 文档 也可能有所帮助。 -
在提取的目录的
conf
子目录中,创建名为neptune-remote.yaml
的文件。如果您使用该 AWS 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 }} -
重要
您必须提供 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 签名程序使用默认的凭证提供程序链。有关提供凭证的其它方法,请参阅《AWS SDK for Java 开发人员指南》中的使用默认凭证提供程序链。
SERVICE_REGION
变量是必需的,即使在使用凭证文件时也是如此。 -
使用
.yaml
文件建立:remote
连接::remote connect tinkerpop.server conf/neptune-remote.yaml
-
输入以下命令切换到远程模式,该模式会将所有 Gremlin 查询发送到远程连接:
:remote console