Мне не удается подключиться к экземпляру Нептуна, для которого включен IAM. Я следовал документации AWS (исправил несколько моих глупых ошибок в пути), но безуспешно.
Когда я подключаюсь через свое приложение Java с помощью SigV4Signer и когда я использую консоль gremlin, Я получаю 400 ошибочных запросов веб-сокета.
o.a.t.g.d.Handler$GremlinResponseHandler : Could not process the response
io.netty.handler.codec.http.websocketx.WebSocketHandshakeException: Invalid handshake response getStatus: 400 Bad Request
at io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker13.verify(WebSocketClientHandshaker13.java:267)
at io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.finishHandshake(WebSocketClientHandshaker.java:302)
at org.apache.tinkerpop.gremlin.driver.handler.WebSocketClientHandler.channelRead0(WebSocketClientHandler.java:69)
Когда я запускаю com.amazon.neptune.gremlin.driver.example.NeptuneGremlinSigV4Example
(с моей машины через переадресацию портов И с точки доступа EC2), я получаю:
java.util.concurrent.TimeoutException: Timed out while waiting for an available host - check the client configuration and connectivity to the server if this message persists
Я могу подключиться к моему экземпляру Нептуна, используя устаревший устаревший механизм сертификатов. Я использую экземпляр Jumphost ec2 и переадресацию портов.
Я считаю, что аспект SigV4 работает так же, как в журналах аудита Нептуна. Я вижу попытки соединения с aws_access_key:
1584098990319, <jumphost_ip>:47390, <db_instance_ip>:8182, HTTP_GET, [unknown], [unknown], "HttpObjectAggregator$AggregatedFullHttpRequest(decodeResult: success, version: HTTP/1.1, content: CompositeByteBuf(ridx: 0, widx: 0, cap: 0, components=0)) GET /gremlin HTTP/1.1 upgrade: websocket connection: upgrade sec-websocket-key: g44zxck9hTI9cZrq05V19Q== sec-websocket-origin: http://localhost:8182 sec-websocket-version: 13 Host: localhost:8182 X-Amz-Date: 20200313T112950Z Authorization: AWS4-HMAC-SHA256 Credential=<my_access_key>/20200313/eu-west-2/neptune-db/aws4_request, SignedHeaders=host;sec-websocket-key;sec-websocket-origin;sec-websocket-version;upgrade;x-amz-date, Signature=<the_signature> content-length: 0", /gremlin
Но когда я смотрю
Это политика, которую я создал:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"neptune-db:*"
],
"Resource": [
"arn:aws:neptune-db:eu-west-2:<my_aws_account>:*/*"
]
}
]
}
Я ранее пробовал использовать политику, которая ссылается на идентификатор ресурса моего кластера. Я создал нового пользователя API с этой политикой в качестве единственного разрешения. (Я пробовал это дважды).
IAM показывает, что созданный мной пользователь-граф не вошел в систему (дух).
Кажется, что проблема связана с набором IAM где-то вдоль линии. Можно ли из AWS получить больше информации о причине неудачной попытки подключения?
Я использую самый последний выпуск Neptune, а также драйвер и консоль Gremlin 3.4.3. Я использую Java 8 при запуске NeptuneGremlinSigV4Example
и собираю библиотеки для развертывания на консоли.
спасибо