Cygnus и mongodb: аутентификация не удалась - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь использовать cygnus и mongdb с докером.

Мой docker-compose:

cygnus:
    image: fiware/cygnus-ngsi:1.7.1
    hostname: cygnus
    container_name: cygnus
    volumes:
      - ./config/cygnus/agent.conf:/opt/apache-flume/conf/agent.conf
    links:
      - mysql-cygnus:mysql-cygnus
    external_links:
      - mongodb:mongodb
    expose:
      - "5050"
    ports:
      - "5050:5050"
    environment:
      - CYGNUS_MONGO_HOSTS=mongodb:27017
      - CYGNUS_MONGO_USER=cygnus
      - CYGNUS_MONGO_PASS=f10t_Mongo
      - CYGNUS_LOG_LEVEL=INFO

...

mongodb:
    image: mongo:3.4.7
    hostname: mongodb
    image: aashreys/mongo-auth:latest
    expose: 
      - "27017"
    ports:
      - "27017:27017"
    environment:
      - AUTH=yes
      - MONGODB_ADMIN_USER=admin_cygnus
      - MONGODB_ADMIN_PASS=admin_cygnus 
    expose:
      - "27017"
    ports:
      - "27017:27017"

Мой agent.conf

cygnus-ngsi.sinks.mongo-sink.mongo_hosts = mongodb:27017
cygnus-ngsi.sinks.mongo-sink.mongo_username = cygnus
cygnus-ngsi.sinks.mongo-sink.mongo_password = f10t_Mongo

Но я попал в журнал Cygnus:

msg=com.telefonica.iot.cygnus.sinks.NGSISink[533] : Persistence error.     
Message: -, Timed out after 30000 ms while waiting for a server that matches PrimaryServerSelector. 
Client view of cluster state is {type=UNKNOWN, servers=[{address=mongodb:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSecurityException: Exception authenticating MongoCredential{mechanism=null, userName='cygnus', source='cygnus_imd', password=<hidden>, mechanismProperties={}}}, caused by {com.mongodb.MongoCommandException:
Command failed with error 18: 'Authentication failed.' on server mongodb:27017. The full response is { "ok" : 0.0, "errmsg" : "Authentication failed.", "code" : 18, "codeName" : "AuthenticationFailed" }}}]

и журнал Монго:

2018-04-25T20:59:19.684+0000 I ACCESS   [conn136] SCRAM-SHA-1 authentication failed for cygnus on cygnus_imd from client 172.18.0.4:37250 ; UserNotFound: Could not find user cygnus@cygnus_imd

Я решил проблему создания пользователя внутри базы данных cygnus_imd:

use cygnus_imd
db.createUser(
   {
     user: "cygnus",
     pwd: "f10t_Mongo",
     roles: [ "readWrite", "dbAdmin" ]
   }
);

Но я не думаю, что это хорошее решение, потому что я не могу создать пользователя для каждого набора данных моего лебедя, это должно быть сделано автоматически. Я думаю, что аутентификация не работает с пустой базой данных. Но в начале все базы данных пустые. Так что я не знаю, как это исправить.

1 Ответ

0 голосов
/ 26 апреля 2018

Я думаю, что вы не можете избежать этого при работе с аутентификацией. Поскольку целью механизма аутентификации является обеспечение идентификации объекта, возможно, вы можете использовать уникальную идентификацию (пользователя) для группы наборов данных. Если проблем с безопасностью нет, возможно, можно использовать пользователя с правами администратора, поскольку вы указываете dbAdmin как одну роль для пользователя.

...