我希望我的EC2实例具有基于IAM的权限,但不希望该实例上的docker容器具有相同的权限。我认为阻止访问神奇的IP 169.254.169.254
应该足够了。运行是否足够:
iptables -I DOCKER -s 169.254.169.254 -j DROP
我是否还需要使用--icc=false
或--iptables=false
配置我的docker守护程序?
答案 0 :(得分:4)
最后这个工作,您需要在主机上添加此规则:
1)当出站到169.254.169.254
端口80或443时,丢弃docker bridge数据包。
sudo iptables -I FORWARD -i docker0 -d 169.254.169.254 \
-p tcp -m multiport --dports 80,443 -j DROP
现在,如果我尝试连接容器内部:
$ sudo docker run -it ubuntu bash
root@8dc525dc5a04:/# curl -I https://www.google.com
HTTP/1.1 200 OK
root@8dc525dc5a04:/# curl -I http://169.254.169.254/
# <-- hangs indefinitely, which is what we want
与特殊IP的连接仍然可以在主机上运行,但不能从内部容器中运行。
注意:我的用例适用于Google Compute Engine,可防止Docker容器访问169.254.169.254
上的元数据服务器,同时仍允许针对同一IP的DNS和其他查询。您的里程可能因AWS而异。
答案 1 :(得分:1)
我建议对接受的答案进行以下修改:
sudo iptables \
--insert DOCKER-USER \
--destination 169.254.169.254 \
--jump REJECT
这样做的原因是,上面的命令将规则添加到了保证不会修改的DOCKER-USER
链中。
来源: