通过ansible对mongodb的访问控制未按预期工作
我在mongod.conf中使用了通过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:
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()
等命令之外,不允许执行任何命令。