

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 IAM 身分驗證搭配 Gremlin 主控台連線至 Amazon Neptune 資料庫
<a name="iam-auth-connecting-gremlin-console"></a>

若要使用具有 Signature 第 4 版身分驗證的 Gremlin 主控台連線至 Amazon Neptune，您可以使用 `requestInterceptor()`將 SigV4 簽署者插入 `:remote`命令建立的連線。這需要您手動設定`Cluster`物件，然後將其傳遞至 `:remote`命令。

請注意，這與 `:remote` 命令需要組態檔案形成連線的典型情況完全不同。組態檔案方法將無法運作，因為 `requestInterceptor()` 必須以程式設計方式設定，並且無法從檔案中載入其組態。

**注意**  
下列範例使用在 TinkerPop 3.6.6 中引入`requestInterceptor()`的 。如果您使用的 TinkerPop 版本早於 3.6.6 （但為 3.5.5 或更新版本），請使用 `handshakeInterceptor()`，而不是下列程式碼範例中`requestInterceptor()`的 。

下列先決條件為必要條件：
+ 您必須具有簽署請求所需的 IAM 憑證。請參閱《 適用於 Java 的 AWS SDK 開發人員指南》中的[使用預設憑證提供者鏈結](https://docs.aws.amazon.com//sdk-for-java/latest/developer-guide/credentials-chain.html)。
+ 您必須已安裝與資料庫叢集所使用的 Neptune 引擎版本相容的 Gemlin 主控台版本。

如果您使用的是臨時憑證，它們會在指定的間隔後過期，而工作階段權杖也一樣，因此在您請求新憑證時必須更新您的工作階段權杖。請參閱《IAM 使用者指南》中的[使用臨時安全登入資料來請求存取 AWS 資源](https://docs.aws.amazon.com/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
   ```

   如果您在此步驟中遇到問題，則參閱有關 [Grape](http://docs.groovy-lang.org/latest/html/documentation/grape.html) 組態的 [TinkerPop 文件](https://tinkerpop.apache.org/docs/current/reference/#gremlin-applications)可能會有所幫助 。
**注意**  
如果您使用的是 HTTP Proxy，在此步驟中可能會遇到 `:install` 命令未完成的錯誤。若要解決此問題，請執行下列命令，以告知主控台有關 Proxy 的相關資訊：  

   ```
   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
   ```