【问题标题】:Securing Mongo when in Docker Container在 Docker 容器中保护 Mongo
【发布时间】:2016-02-05 11:13:37
【问题描述】:

目前正在考虑在容器中部署 mongo。到目前为止,我的文件看起来像,

############################################################
# Dockerfile to build Mongo Containers
# Based on Ubuntu
############################################################

# Set the base image to Ubuntu
FROM ubuntu:14.04

# File Author / Maintainer
MAINTAINER Maintaner felix001

# Create repo file
RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
RUN echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.0 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-3.0.list

# Update the default application repository sources list
RUN apt-get update && apt-get install -y \
    mongodb-org \
    vim

# Create the MongoDB data directory
RUN mkdir -p /data/db

# Expose port 27017 from the container to the host
EXPOSE 27017

# Set usr/bin/mongod as the dockerized entry-point application
ENTRYPOINT ["/usr/bin/mongod"]

但是我需要锁定 mongo,因此您需要密码才能执行任何管理操作并创建数据库/用户。所以我的问题是 2 倍,

  1. 保护的最佳方法是什么?目前为止,

    vim /etc/mongod.conf
    + auth = true
    
    use admin
    db.createUser({ user:"admin", pwd:"secretpassword", roles: ["dbAdminAnyDatabase","clusterAdmin"]})
    
    use example
    db.createUser({ user:"user1", pwd:"abc123", roles:["readWrite"] })
    
  2. 将其添加到 Dockerfile 的最佳方法是什么?

谢谢,

【问题讨论】:

    标签: mongodb docker


    【解决方案1】:

    我不建议将凭据“烘焙”到您的图像中。然后,您创建的每个数据库都将具有相同的密码。

    举个例子,看看 tutum mongodb 镜像,容器运行脚本在启动时设置密码:

    最后,我向您推荐一个有关使用环境变量作为密码的相关问题:

    【讨论】:

      【解决方案2】:

      这是我保护 MongoDB docker 容器的方法。
      以下分步过程将指导您实施安全性。

      解决方案一:使用环境变量

      一个简单的解决方案是docker run命令时使用环境变量

      $ docker run -d -p 27017:27017 --name mongodb -v /var/docker/mongo/data:/data/db \
      -e MONGO_INITDB_ROOT_USERNAME=superuser \
      -e MONGO_INITDB_ROOT_PASSWORD=Strong_Password \
      mongo:4.4.2
      

      当您尝试使用 MongoDB 客户端(如 MongoDB-Compass)进行访问时,您必须提供用户名和密码才能访问数据库。

      Solution-2:在 MongoDB 数据库中创建用户(推荐方法)

      • 使用 auth 选项创建 docker 容器
      $ docker run --name <container_name> --restart=always -d -p 27017:27017 mongo mongod --auth
      
      • 猛击容器
      $ sudo docker exec -it <container_name> bash
      
      • 连接到本地 mongo 实例
        # mongo

      • 创建第一个管理员用户

      > use admin
      > db.createUser({
          user: 'user',
          pwd: 'StrongPassword',
          roles: [{ role: 'dbOwner', db:'admin'}]
      })
      
      • 退出 mongo shell
        &gt; exit

      • 退出容器
        # exit

      现在您可以使用用户名和密码进行连接。记得使用--authenticationDatabase "admin"

      mongo -u "user" -p "StrongPassword" YOURHOSTIP --authenticationDatabase "admin"
      

      您也可以通过 MongoDB-Compass 连接到 mongo 容器。我使用以下连接字符串进行连接。如果无法连接,请仔细检查您的字符串

      mongodb://user:*****@IP:27017/?authSource=admin&compressors=zlib&readPreference=primary&gssapiServiceName=mongodb&appname=MongoDB%20Compass&ssl=false
      

      参考:https://gist.github.com/davideicardi/f2094c4c3f3e00fbd490#file-mongo-docker-bash-L23

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-21
        • 1970-01-01
        • 1970-01-01
        • 2022-10-17
        • 2019-05-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多