Neptune gibt einen Fehler aus. Ein Handshake-Fehler ist ein häufiges Problem beim Herstellen einer Verbindung zu einer IAM-fähigen Neptune-Instanz. IAM (Identity and Access Management) ist eine Funktion von Amazon Web Services (AWS), die den Zugriff auf AWS-Ressourcen verwaltet und steuert. Beim Versuch, eine Verbindung zu einer IAM-fähigen Neptune-Instanz herzustellen, können jedoch Handshake-Fehler auftreten. Dieser Fehler kann durch falsche Berechtigungen für die IAM-Rolle oder eine falsche Einrichtung der Neptune-Instanz verursacht werden. Als Reaktion auf dieses Problem wird in diesem Artikel detailliert beschrieben, wie dieser Fehler behoben werden kann, um eine reibungslose Verbindung zur IAM-fähigen Neptune-Instanz sicherzustellen.
Ich habe eine AWS Neptune-Instanz mit aktiviertem iam und kann CRUD-Vorgänge ohne Authentifizierung ausführen, aber wenn ich die Authentifizierung aktiviere, wird ein Fehler im Handshake-Fehlerprotokoll ausgegeben.
Hinweis: Die Lambda-Funktion verfügt über vollständige Neptune-Berechtigungen
package main import ( "fmt" "log" "net/http" "os" "time" "github.com/aws/aws-lambda-go/events" "github.com/aws/aws-lambda-go/lambda" gremlingo "github.com/apache/tinkerpop/gremlin-go/v3/driver" "github.com/aws/aws-sdk-go/aws/session" v4 "github.com/aws/aws-sdk-go/aws/signer/v4" ) func main() { lambda.Start(lambdaHandler) } func lambdaHandler(ctx context.Context, request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) { driverConn, g = connect() result, err = g.AddV("User").Property("userId", "Check").Next() if err != nil { fmt.Println(err) } } func connect() { awsSess, err := session.NewSesionWithOptions(session.Options{ SharedCondfigState: session.SharedConfigEnable, }), if err != nil { log.Fatalf("Failed to creating session: %s", err) } db_endpoint := os.Genenv("DB_ENDPOINT") connString := "wss://" +db_endpoint+":8182/gremlin" // Signing Request req, _ := http.NewRequest(http.MethodGet, connString, nil) signer := v4.NewSigner(awsSess.Config.Credentials) headerToUse, err := signer.Sign(req, nil, "neptune", *awsSess.Config.Region, time.Now()) driverRemoteConnection, err := gremlingo.NewDriverRemoteConnection(connString, func(settings *gremlingo.driverRemoteConnectionSettings) { settings.TraversalSource = "g" settings.AuthInfo.Header = headerToUse }) return driverRemoteConnection, traversalSource(driverRemoteConnection) } func traversalSource(driverConn *gremlingo.DriverRemoteConnection) *gremlingo.GraphTraversalSource { return gremlingo.Traversal_().WithRemote(driverConn) }
Fehlerprotokoll: Neue Verbindung kann nicht instanziiert werden; Verbindungsstatus wird auf geschlossen gesetzt. Fehler beim Erstellen einer neuen Verbindung für Verbindungspool: Websocket: Handshake-Fehler „e0104: Verbindung konnte nicht erfolgreich hergestellt werden: Websocket: Handshake-Fehler“
Hinweis: Ich kann Abfragen ausführen, wenn die IAM-Authentifizierung deaktiviert ist. Bitte helfen Sie.
Versuch, die Anfrage zu signieren, aber die Authentifizierung ist fehlgeschlagen.
Es gibt einige Probleme im Code, die behoben werden müssen, damit er mit Neptune iam funktioniert, wenn alle erforderlichen Berechtigungen erteilt werden.
neptune-db
,而不是 neptune
lauten. *gremlingo.driverremoteconnectionsettings
应为 *gremlingo.driverremoteconnectionsettings
. settings.authinfo.header
使用的标头实际上不是签名者返回的标头,而是原始请求的标头,因此应该是settings.authinfo.header = req.header
. Alles zusammengenommen sieht der Codeblock unter //signing request
so aus:
// Signing Request req, _ := http.NewRequest(http.MethodGet, connString, nil) signer := v4.NewSigner(awsSess.Config.Credentials) _, err := signer.Sign(req, nil, "neptune-db", *awsSess.Config.Region, time.Now()) driverRemoteConnection, err := gremlingo.NewDriverRemoteConnection(connString, func(settings *gremlingo.DriverRemoteConnectionSettings) { settings.TraversalSource = "g" settings.AuthInfo.Header = req.Header })
Zu beachten ist, dass gremlin-go derzeit keine Möglichkeit hat, die automatische Aktualisierung von Authentifizierungstokens zuzulassen, was bedeutet, dass nach Ablauf eine neue Verbindung hergestellt werden muss.
Ich hoffe, das hilft.
Das obige ist der detaillierte Inhalt vonNeptune löst einen fehlerhaften Handshake-Fehler aus, wenn eine Verbindung zu einer IAM-aktivierten Neptune-Instanz hergestellt wird. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!