docker registry 仓库加密

docker registry 仓库加密

1、背景

​ 公司一直用的镜像仓库是docker registry,但是有个安全问题,就是仓库从web ui的浏览到镜像的拉取都是可以直接使用的,还是放到了公网上,只需要知道你的域名那就是畅通无阻了,可以怎么方便怎么来但是这也太方便了,项目是docker跑的微服务,镜像一拉代码直接拿到手 ,前两天还看到个黑客推了个镜像上去,不能在耽误了,赶紧收拾一下。

2、问题解决

​ 在网上看了一些帖子是在仓库容器运行时加一些参数,刚测试的时候是可以的,后面重启了两次容器之后就突然不行了,这里就把配置贴一下,有需求可以搞一下,用的docker-compose

bash 复制代码
version: '3.1'
services:
  registry:
    image: registry:2
    restart: always
    container_name: registry-srv
    ports:
      - 5000:5000
    volumes:
      - /new_mount/docker/registry:/var/lib/registry
      - /home/app/registry/auth:/auth
    environment:
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: "Registry Realm"
    networks:
      - docker_default
  registry-ui:
    image: joxit/docker-registry-ui:static
    restart: always
    container_name: registry-ui
    ports:
      - 18080:80
    environment:
      - REGISTRY_URL=http://registry-srv:5000
      - DELETE_IMAGES=true
    networks:
      - docker_default
networks:
  docker_default:
    external: true

​ registry-ui镜像默认是跑的80,改了一下映射端口,前端使用nginx代理的也是跑的容器,请求头主机配置注释掉了,一打开就报错无法验证sha,这个可以试试怎么回事,我感觉是因为换过仓库的事,htpasswd文件生成可以去网上找一下很多,下面是前端代理的配置。

nash 复制代码
server {
    listen       80;
    listen       8054;
    server_name  registry.xxx.com;
    return 301 https://$server_name$request_uri;
}
server {
    server_name  registry.xxx.com;
    include /etc/nginx/conf.d/include/ssl/oa-ssl;
    location / {
        proxy_pass http://172.26.28.122:18080/;
        add_header Access-Control-Allow-Origin *;
        #proxy_set_header Host $host;
        proxy_set_header X-Real-Ip $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
    location /v2/ {
        proxy_pass http://172.26.28.122:5000;
        add_header Access-Control-Allow-Origin *;
        #proxy_set_header Host $host;
        proxy_set_header X-Real-Ip $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
    }

}

​ 按我的理解来说上面的配置是可以实现仓库加密的,但还是无法验证通过,我觉的是nginx代理的问题,加上容器是走了两层代理,可能是无法携带验证信息了,有空在研究。

​ 天无绝人之路,找到个其他的方法,直接在前端代理添加验证配置,如果是在'/'匹配规则添加的话他只能验证web ui的访问,对镜像的推拉控制是没有用的,必须要把配置放到/v2/这个匹配规则里面,控制后端接口的访问规则才行,具体原理还不知道怎么回事,先实现了再说。这里放了之后compose文件的加密就不用加。

bash 复制代码
    environment:
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: "Registry Realm"
      #上面这几行删掉就行
bash 复制代码
    location /v2/ {
        stub_status;
        auth_basic "Auth access Blog Input your Passwd!";
        auth_basic_user_file /etc/nginx/conf.d/htpasswd/docker.conf/htpasswd;
        proxy_pass http://172.26.28.122:5000;
        add_header Access-Control-Allow-Origin *;
        #proxy_set_header Host $host;
        proxy_set_header X-Real-Ip $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
    }

这个破问题还搞了三天

相关推荐
咕噜企业分发小米4 分钟前
直播云服务器安全防护有哪些最新的技术趋势?
运维·服务器·安全
cly114 分钟前
Ansible自动化(十五):加解密详解
运维·自动化·ansible
程序员zgh17 分钟前
Linux 系统调用
linux·运维·服务器·c语言·c++·系统安全
cly136 分钟前
Ansible自动化(十二):Jinja2过滤器
运维·自动化·ansible
P-ShineBeam38 分钟前
八卡A100服务器坏卡引发 CUDA initialization: cudaGetDeviceCount()异常
运维·服务器·人工智能·语言模型
工具罗某人44 分钟前
docker快速部署kafka
java·nginx·docker
萤丰信息1 小时前
开启园区“生命体”时代——智慧园区系统,定义未来的办公与生活
java·大数据·运维·数据库·人工智能·生活·智慧园区
Nobody__11 小时前
解决多台服务器 UID/GID 做对齐后,文件系统元数据未更新的情况
运维·服务器
九河云1 小时前
数据驱动未来,华为云DWS为智能决策提速
大数据·人工智能·安全·机器学习·华为云
Dr.Alex Wang2 小时前
Google Firebase 实战教学 - Streamlit、Bucket、Firebase
数据库·python·安全·googlecloud