通过ansible对mongodb的访问控制未按预期工作

通过ansible对mongodb的访问控制未按预期工作,mongodb,ansible,Mongodb,Ansible,我在mongod.conf中使用了security.authorization:enabled,但未执行身份验证检查。现在,未经授权的用户可以访问数据库。我必须阻止这种联系。这里我添加了我的ansible剧本代码 - name: build mongodb image docker_image: name: mongodb:v1.0 - name: Run mongodb-container docker_container:

我在mongod.conf中使用了
security.authorization:enabled
,但未执行身份验证检查。现在,未经授权的用户可以访问数据库。我必须阻止这种联系。这里我添加了我的ansible剧本代码

    - name: build mongodb image
      docker_image:
        name: mongodb:v1.0
    - name: Run mongodb-container
      docker_container:
        name: mongodb-container
        image: mongodb-image:v1.0
        volumes:
          - /db/:/data/db"
          - /mongodb/entryScript/:/docker-entrypoint-initdb.d/"
        networks_cli_compatible: yes
        networks:
          - name: custom-network
        ports:
          - "20200:27017"
        restart: yes
    - name: Install pymongo
      pip:
        name: pymongo
        state: present
    - name: Add user
      mongodb_user:
        database: customDb
        name: user123
        password: xxxxxx
        login_host: localhost
        login_port: 20200
        login_user: admin_user
        login_password: xxxxxx
        state: present
    - name: Set config
      template:
        src: /templates/mongodb.yml
        dest: /etc/mongod.conf
        restart: yes
蒙哥达

security:
  authorization: enabled

经过大量挖掘,找到了一些解决办法。进入代码之前,请务必记住
在没有访问控制的情况下启动mongodb并插入管理员用户。然后使用访问控制启动mongodb以执行身份验证,并使用管理员用户详细信息插入剩余用户。
而不是
安全性。
--auth
的授权工作得很好。在这里,我通过entrypioint脚本插入了管理员用户

/mongodb/entryScript/enrtypoint.js

db.createUser({
      user: "admin_user",
      pwd: "admin_pass",
      roles: [{ role: "root", db: "admin" }],
    });
Ansible剧本如下

- name: build mongodb image
      docker_image:
        name: mongodb:v1.0
    - name: Run mongodb-container
      docker_container:
        name: mongodb-container
        image: mongodb-image:v1.0
        env:
         MONGO_INITDB_DATABASE: admin
        volumes:
          - /db/:/data/db"
          - /mongodb/entryScript/:/docker-entrypoint-initdb.d/"
        ports:
          - "20200:27017"
        restart: yes
    - name: Install pymongo
      pip:
        name: pymongo
        state: present
    - name: Run mongodb-container with auth
      docker_container:
        name: mongodb-container
        command: "--auth"
        volumes:
          - /db/:/data/db
        networks_cli_compatible: yes
        networks:
          - name: custom-network
        ports:
          - "20200:27017"
        restart: yes
    - name: Add user
      mongodb_user:
        database: customDb
        name: user123
        password: xxxxxx
        login_host: localhost
        login_port: 20200
        login_user: admin_user
        login_password: admin_pass
        state: present

启用身份验证时,您需要创建至少一个管理员用户(即具有
userAdmin
userAdminAnyDatabase
角色的用户)。这是你创造的吗?我不确定,但我认为管理员用户必须在
admin
数据库中创建。是的,已经通过输入脚本创建了。实际上,添加用户没有问题。仅与--auth一起出现问题。您所说的“可以访问管理数据库”是什么意思?我想在任何情况下都需要一些访问权限,例如询问您自己的权限。对不起,只是输入错误,现在已更正。增益,您是什么意思?在MongoDB中,每个人都可以连接到DB,但是除了诸如
DB.help()
DB.getMongo()
等命令之外,不允许执行任何命令。