Тайм-аут подключения к AWS documentDb с включением ssl

Я создаю новый кластер documentDb в AWS и пытаюсь подключиться к моему приложению net.core с помощью MongoDriver. Кластер с включенным свойством SSL.

Согласно этот вопрос и ответы Я испробовал несколько способов достижения своей цели.

  • Импортировать цепочку сертификатов в хранилище локального компьютера в доверенные корневые центры сертификации rds-комбинированный-ca-bundle.p7b;
  • Прочтите файл pem и создайте сертификат в коде для C # или используйте его в mongoShell с параметром --sslCAFile.
var clientSetting = MongoClientSettings.FromUrl("mongodb://<myloging>:<mypassword>@<myclusterendpoint>/?ssl=true&replicaSet=rs0");

var setting = new MongoClientSettings()
{
    Server = clientSetting.Server,
    UseSsl = clientSetting.UseSsl,
    Credential = clientSetting.Credential,

    GuidRepresentation = GuidRepresentation.CSharpLegacy,
    ReadPreference = new ReadPreference(ReadPreferenceMode.Primary),
    VerifySslCertificate = true,
    SslSettings = new SslSettings
    {
        ClientCertificates = new List<X509Certificate2>()
        {
            new X509Certificate2("<path>\\rds-combined-ca-bundle.pem")
        },
        EnabledSslProtocols = System.Security.Authentication.SslProtocols.Default,
        CheckCertificateRevocation = true
    },
    ReplicaSetName = clientSetting.ReplicaSetName

};

setting.SslSettings.ClientCertificateSelectionCallback = (sender, host, certificates, certificate, issuers) => setting.SslSettings.ClientCertificates.ToList()[0];
setting.SslSettings.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => true;

setting.MaxConnectionIdleTime = new TimeSpan(0, 0, 30);

client = new MongoClient(setting);

И сделайте так:

var filter = new BsonDocument("name", "mycollection");
var collectionCursor = client.GetDatabase("mydatabase").ListCollections(new ListCollectionsOptions { Filter = filter });
if (!collectionCursor.Any())
{
    throw new Exception("Collection not found");
}

Я ожидаю, что получу коллекцию с исключением имени mycollection или Collection not found, но получаю

A timeout occured after 30000ms selecting a server using CompositeServerSelector{ Selectors = MongoDB.Driver.MongoClient+AreSessionsSupportedServerSelector, LatencyLimitingServerSelector{ AllowedLatencyRange = 00:00:00.0150000 } }. Client view of cluster state is { ClusterId : "1", ConnectionMode : "ReplicaSet", Type : "ReplicaSet", State : "Disconnected", Servers : [{ ServerId: "{ ClusterId : 1, EndPoint : "Unspecified/<myclusterendpoint>" }", EndPoint: "Unspecified/<myclusterendpoint>", State: "Disconnected", Type: "Unknown" }] }.

Та же проблема при попытке подключения через MongoShell. Может проблема в разных зонах. Пример: кластер создан в us-east-2 и я пытаюсь подключиться из Украины. :)

UPD: предположим, что я должен находиться в одном VPC для подключения к кластеру DocumentDb.


person Yaroslav    schedule 05.04.2019    source источник
comment
ты решил свою проблему? у меня аналогичная проблема. Я подключаюсь к docdb извне vpc, но у меня есть группа безопасности с любыми входящими данными (конечно, тестирование), но по-прежнему сохраняется тайм-аут. не повезло ни TLS включен, ни выключен в группе параметров docdb.   -  person lawphotog    schedule 05.10.2019
comment
извините, только что понял, что один из ответов ваш собственный. благодаря. попробую это.   -  person lawphotog    schedule 05.10.2019


Ответы (2)


Моя проблема заключалась в дизайне доступа к AWS DocumentDB. Подробнее о доступе к базе данных вне VPC.

person Yaroslav    schedule 16.04.2019

Я вижу несколько вещей, на которые вы, возможно, захотите взглянуть:

person Kanishka Chaturvedi    schedule 16.04.2019
comment
Спасибо за предложение. Но проблема заключается в конструкции безопасности доступа к AWS DocumentDB. Я попытался использовать базу данных со своего локального компьютера, которой нет в VPC. - person Yaroslav; 16.04.2019