玩转容器安全三 - Harbor私有镜像仓库-爱代码爱编程
Harbor: https://github.com/goharbor/harbor
# Operation System: CentOS 7
# Docker Version: 19.03.13
# Harbor Version: 1.10.6
# Docker-Compose Version: 1.27.4
Harbor的安装与使用
Harbor离线与在线安装
Harbor官方安装文档:https://goharbor.io/docs/2.0.0/install-config/
推荐使用离线的安装模式,离线安装完成后会包含所需的漏洞库文件。
# 从GitHub下载对应版本的offline安装包并解压
tar -xf harbor-offline-installer-v1.10.6.tgz -C /opt/
# 修改配置文件
vim /opt/harbor/harbor.yml
# 修改主机名
hostname: 10.10.10.11
# 注释HTTPS
# https:
# port: 443
# certificate: /your/certificate/path
# private_key: /your/private/key/path
# 执行安装
./install.sh
执行完成以后,直接访问Harbor Web系统(admin/Harbor12345
)
启用HTTPS
将Harbor部署在生产环境需要启用HTTPS协议,首先我们需要创建对应的HTTPS证书。官网提供了详细的过程(https://goharbor.io/docs/2.0.0/install-config/configure-https/),但是我在使用官网的配置中出现了错误,所以这里我记录一下我的配置过程,在我的配置过程中,我并没有使用域名,而是直接使用了IP。
生成证书颁发机构证书
# Generate a CA certificate private key
openssl genrsa -out ca.key 4096
# Generate the CA certificate
openssl req -x509 -new -nodes -sha512 -days 3650 -subj "/C=CN/ST=Beijing/L=Beijing/O=zero/OU=Personal/CN=10.10.10.11" -key ca.key -out ca.crt
生成服务器证书
# Generate a private key
openssl genrsa -out 10.10.10.11.key 4096
# Generate a certificate signing request (CSR)
openssl req -sha512 -new -subj "/C=CN/ST=Beijing/L=Beijing/O=zero/OU=Personal/CN=10.10.10.11" -key 10.10.10.11.key -out 10.10.10.11.csr
# Generate an x509 v3 extension file
vim v3.ext
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = IP:10.10.10.11
# Use the v3.ext file to generate a certificate for your Harbor host
openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in 10.10.10.11.csr -out 10.10.10.11.crt
在Harbor中部署证书
vim harbor.yml
# https related config
https:
# https port for harbor, default is 443
port: 443
# The path of cert and key files for nginx
certificate: /opt/certificate/10.10.10.11.crt
private_key: /opt/certificate/10.10.10.11.key
# 重新安装Harbor
./prepare
./install.sh
Harbor身份鉴别与访问控制
创建用户
创建项目
为项目分配用户并配置角色
上传镜像至Harbor
客户端配置信任自建证书
新增一个Docker客户端:10.10.10.13
,客户端登录私有镜像仓库:docker login -u develop_administrator -p Admin@123 10.10.10.11
如果我们未配置HTTPS证书,报错如下:
Error response from daemon: Get https://10.10.10.11/v2/: dial tcp 10.10.10.11:443: connect: no route to host
按照上述配置HTTPS证书后,直接进行登录会报错如下:
Error response from daemon: Get https://10.10.10.11/v2/: x509: cannot validate certificate for 10.10.10.11 because it doesn't contain any IP SANs
我们需要将服务器的证书下发至客户端
# 客户端创建目录
mkdir -p /etc/docker/certs.d/10.10.10.11
# 在服务端将证书文件发送给客户端
openssl x509 -inform PEM -in 10.10.10.11.crt -out 10.10.10.11.cert
scp 10.10.10.11.cert root@10.10.10.13:/etc/docker/certs.d/10.10.10.11/
scp 10.10.10.11.key root@10.10.10.13:/etc/docker/certs.d/10.10.10.11/
scp ca.crt root@10.10.10.13:/etc/docker/certs.d/10.10.10.11/
# 在客户端重启docker
systemctl restart docker.service
如果希望在测试环境不考虑使用https,可以在客户端配置insecure-registries
,该参数默认依旧使用https,在https不可用时使用http。
# 在客户端创建daemon.json文件
vim /etc/docker/daemon.json
{
"insecure-registries": [
"10.10.10.11"
]
}
# 在客户端重启docker
systemctl restart docker.service
此时我们登录私有镜像仓库:
上传镜像至私有仓库
# 基于原始镜像构建基础容器
docker run -it -d --name centos -p 80:80 centos:centos6.6 /bin/bash
# 在容器中安装所需的环境软件
# 基于基础容器创建镜像
docker commit -m "add nginx web server" -a "zero.zhang" 943c9e589ce3 10.10.10.11/develop/nginx_server:v1.0
# 上传基础镜像至私有仓库,在上传之前,必须登录私有镜像仓库
docker push 10.10.10.11/develop/nginx_server:v1.0
集成容器镜像扫描Clair
# 重新安装harbor
./prepare
./install.sh --with-clair
上传一个CentOS 6.6的镜像执行扫描,点击Tag就可以查看漏洞详情:
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/bloodzero_new/article/details/111055044