本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 IAM 身分驗證搭配 Gremlin 主控台連線至 Amazon Neptune 資料庫
如何搭配 Signature 第 4 版身分驗證,使用 Gremlin 主控台連線到 Amazon Neptune,取決於您使用的是 TinkerPop 版本 3.4.11
或更新版本,還是更舊版本。無論是哪種情況,都需要下列先決條件:
您必須具有簽署請求所需的 IAM 憑證。請參閱《 AWS SDK for Java 開發人員指南》中的使用預設登入資料提供者鏈結。
您必須已安裝與資料庫叢集所使用的 Neptune 引擎版本相容的 Gemlin 主控台版本。
如果您使用的是臨時憑證,它們會在指定的間隔後過期,而工作階段權杖也一樣,因此在您請求新憑證時必須更新您的工作階段權杖。請參閱《IAM 使用者指南》中的使用臨時安全登入資料來請求存取 AWS 資源。
如需使用 SSL/TLS 進行連線的說明,請參閱 SSL/TLS 組態。
使用 TinkerPop 3.4.11 或更新版本,搭配 Sig4 簽署連線至 Neptune
使用 TinkerPop 3.6.6 或更高版本,您將使用 requestInterceptor()
,這可讓您將 Sigv4 簽署者插入 :remote
命令建立的連線。與用於 Java 的方法一樣,它需要您手動設定 Cluster
物件,然後將其傳遞至 :remote
命令。
請注意,這與 :remote
命令需要組態檔案形成連線的典型情況完全不同。組態檔案方法將無法運作,因為 requestInterceptor()
必須以程式設計方式設定,並且無法從檔案中載入其組態。
使用 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
如果您在此步驟中遇到問題,則參閱有關 Grape
組態的 TinkerPop 文件 可能會有所幫助 。 注意
如果您使用的是 HTTP Proxy,在此步驟中可能會遇到
:install
命令未完成的錯誤。若要解決此問題,請執行下列命令,以告知主控台有關 Proxy 的相關資訊:System.setProperty("https.proxyHost", "
(the proxy IP address)
") System.setProperty("https.proxyPort", "(the proxy port)
") -
將處理簽署所需的類別匯入至
requestInterceptor()
::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
物件:注意
下列範例已更新為包含 requestInterceptor() 的使用。這已在 TinkerPop 3.6.6 中新增。在 TinkerPop 3.6.6 版之前,程式碼範例使用 handshakeInterceptor(),該版本已棄用。
cluster = Cluster.build("
(host name)
") \ .enableSsl(true) \ .requestInterceptor { 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 Proxy,在此步驟中可能會遇到
:install
命令未完成的錯誤。若要解決此問題,請執行下列命令,以告知主控台有關 Proxy 的相關資訊:System.setProperty("https.proxyHost", "
(the proxy IP address)
") System.setProperty("https.proxyPort", "(the proxy port)
")也可能有助於查閱有關 Grape
組態的 TinkerPop 文件 。 -
在解壓縮目錄的
conf
子資料夾中,建立名為neptune-remote.yaml
的檔案。如果您使用 AWS CloudFormation 範本來建立 Neptune 資料庫叢集,
neptune-remote.yaml
檔案將已存在。在此情況下,您要做的就是編輯現有檔案,以包含通道分離器設定,如下所示。否則,請將下列文字複製到檔案,將
(主機名稱)
取代為 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
-
輸入以下命令以切換至遠端模式,此模式會將所有 Gemlin 查詢傳送至遠端連線:
:remote console