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;
    }

这个破问题还搞了三天

相关推荐
xian_wwq21 分钟前
【案例分析】Hugging Face生产基础设施入侵攻击分析
网络·安全
公众号:fuwuqiBMC2 小时前
(转自“服务器BMC”)服务器BMC芯片——多Die(芯片)封装
运维·服务器·人工智能
北冥you鱼3 小时前
OpenZeppelin Contracts 完全指南:从入门到精通,构建安全的智能合约
安全·区块链·智能合约
D2aZXN3FhrDa7e2124 小时前
佛山乐从低预算实体店如何选择?看美诚AI自动化获客方案
运维·人工智能·自动化·佛山美诚科技有限公司
头茬韭菜4 小时前
4.9 SSRF 防护 — Web 工具的出站安全与私有 IP 拦截
前端·tcp/ip·安全
BullSmall4 小时前
Sonarqube9.9 docker 镜像启动后 conf 下的配置文件没有了
docker·容器·eureka
无足鸟ICT4 小时前
【RHCA+】查看变量
linux·运维·服务器
ruofu334 小时前
wsl端是py312,但是项目是py311, 如何下载py311的依赖包(wheels)
python·docker
Kina_C4 小时前
Linux DNS 服务器-从高速缓存到辅助 DNS 部署指南
linux·运维·服务器·dns
suaizai_5 小时前
TypeScript 7 正式发布!Vue 暂被 “拒之门外“ !!!
linux·运维·ubuntu