AWS Fargate能否绕过SSL校验拉取自签名内部私有仓库镜像?
问题根因
报错x509: certificate signed by unknown authority的触发原因是ECS运行环境的容器运行时(Docker/containerd)默认不信任Nexus私有仓库使用的自签名SSL证书,主动拦截了不受信HTTPS端点的镜像拉取请求。
解决方案
分生产可用的证书信任方案、测试场景的临时绕过方案两类,按需选择:
生产环境推荐:配置自签名证书信任链(无安全风险)
该方案不需要关闭SSL校验,符合安全合规要求,支持所有ECS启动类型:
- ECS EC2启动类型操作步骤:
- 从Nexus服务端导出自签名CA根证书文件,命名为
ca.crt - 将证书文件上传到集群内所有EC2宿主机的系统证书信任目录:
- Amazon Linux 2/2023、RHEL系路径:
/etc/pki/ca-trust/source/anchors/ - Debian、Ubuntu系路径:
/usr/local/share/ca-certificates/
- Amazon Linux 2/2023、RHEL系路径:
- 执行系统证书更新命令:
- RHEL/Amazon Linux系:
update-ca-trust extract - Debian/Ubuntu系:
update-ca-certificates
- RHEL/Amazon Linux系:
- 重启容器运行时让配置生效:
systemctl restart docker containerd - 批量部署场景可以把上述操作写入EC2启动模板的用户数据脚本,新扩容节点会自动完成证书配置,无需逐台手动操作。
- 从Nexus服务端导出自签名CA根证书文件,命名为
- Fargate启动类型操作步骤:
Fargate没有宿主机操作权限,需要提前将Nexus自签名证书存储到AWS ACM或Secrets Manager,在任务定义的私有仓库认证配置段关联该证书,给Fargate任务执行角色授予对应资源的读取权限,拉取镜像时运行时会自动加载信任该证书,无需关闭校验。
测试环境临时方案:绕过SSL证书校验(存在安全风险)
仅建议临时测试时使用,生产环境禁用,该方案会失去HTTPS链路的证书校验能力,存在中间人攻击、镜像被篡改的风险:
- ECS EC2启动类型操作步骤:
- 登录EC2宿主机,编辑Docker守护进程配置文件
/etc/docker/daemon.json,添加私有非安全仓库配置,替换成实际的Nexus仓库地址(带端口):
{ "insecure-registries": ["nexus.internal.yourcompany.com:8083"] }- 保存文件后执行命令重载配置、重启Docker:
systemctl daemon-reload && systemctl restart docker - 配置生效后,Docker会跳过对该仓库地址的SSL证书校验,可正常拉取镜像。批量部署同样可通过EC2启动模板用户数据完成自动配置。
- 登录EC2宿主机,编辑Docker守护进程配置文件
- Fargate启动类型说明:
Fargate 1.4.0及以上官方版本没有提供跳过SSL校验的配置入口,不支持通过insecure-registries方式绕过证书检查,使用Fargate时必须走证书信任方案。
注意:如果配置后仍然拉取失败,检查ECS任务执行角色是否配置了私有仓库的拉取权限、ECS宿主机/任务的安全组是否放通了到Nexus仓库的网络端口。
内容的提问来源于stack exchange,提问作者Perkin Foo
相关产品推荐
相关产品推荐

