

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

# 通过 Gremlin 控制台使用 IAM 身份验证连接到 Amazon Neptune 数据库
<a name="iam-auth-connecting-gremlin-console"></a>

要使用带有签名版本 4 身份验证的 Gremlin 控制台连接到 Amazon Neptune，您需要在命令建立的连接中插入 Sigv4 签名器。`requestInterceptor()` `:remote`这需要您手动配置`Cluster`对象，然后将其传递给`:remote`命令。

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

**注意**  
以下示例使用`requestInterceptor()`了 TinkerPop 3.6.6 中引入的。如果您使用的是早于 3.6.6 的 TinkerPop 版本（但是 3.5.5 或更高版本），请在下面的代码示例`requestInterceptor()`中使用`handshakeInterceptor()`代替。

以下先决条件是必要的：
+ 您必须具有对请求进行签名所需的 IAM 凭证。请参阅[《 适用于 Java 的 Amazon SDK 开发者指南》中的使用默认凭证提供商链](https://docs.amazonaws.cn//sdk-for-java/latest/developer-guide/credentials-chain.html)。
+ 您已安装的 Gremlin 控制台版本必须与数据库集群正在使用的 Neptune 引擎版本兼容。

如果您使用的是临时凭证，则它们将在指定的间隔后过期，会话令牌也是如此，因此在请求新凭证时必须更新会话令牌。请参阅 IAM 用户指南中的[使用临时安全证书请求 Amazon 资源访问权限](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_credentials_temp_use-resources.html)。

有关使用 SSL/TLS 帮助进行连接的帮助，请参阅[SSL/TLS 配置](access-graph-gremlin-java.md#access-graph-gremlin-java-ssl)。

**使用 Sig4 签名连接 Gremlin 主机**

1. 启动 Gremlin 控制台：

   ```
   $ bin/gremlin.sh
   ```

1. 在 `gremlin>` 提示符下，安装 `amazon-neptune-sigv4-signer` 库（对于控制台，此操作只需执行一次）：

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

   如果您在此步骤中遇到问题，请参考有关 Gr [ap](http://docs.groovy-lang.org/latest/html/documentation/grape.html) e 配置的[TinkerPop 文档](https://tinkerpop.apache.org/docs/current/reference/#gremlin-applications)可能会有所帮助。
**注意**  
如果您使用的是 HTTP 代理，则在此步骤中可能会遇到 `:install` 命令未完成的错误。要解决此问题，请运行以下命令来告知控制台有关代理的信息：  

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

1. 将处理签名所需的类导入到 `requestInterceptor()` 中：

   ```
   :import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider
   :import com.amazonaws.neptune.auth.NeptuneNettyHttpSigV4Signer
   ```

1. 如果您使用的是临时凭证，则还需要按以下方式提供会话令牌：

   ```
   System.setProperty("aws.sessionToken","(your session token)")
   ```

1. 如果您尚未以其它方式建立账户凭证，则可以按以下方式分配凭证：

   ```
   System.setProperty("aws.accessKeyId","(your access key)")
   System.setProperty("aws.secretKey","(your secret key)")
   ```

1. 手动构造要连接到 Neptune 的 `Cluster` 对象：

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

   有关查找 Neptune 数据库实例的主机名的帮助，请参阅[连接到 Amazon Neptune 端点](feature-overview-endpoints.md)。

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

   ```
   :remote connect tinkerpop.server cluster
   ```

1. 输入以下命令以切换到远程模式。这会将所有 Gremlin 查询发送到远程连接：

   ```
   :remote console
   ```