我在 AWS EC2 实例上运行 docker,并且希望阻止某些容器访问 EC2 实例元数据(IP 地址为 169.254.169.254)。我认为我可以通过在存在以下 ip 表规则的情况下以特定用户(例如 userx)运行这些容器来实现此目的:
$ iptables -A OUTPUT -m owner --uid-owner userx -d 169.254.169.254 -j DROP
Run Code Online (Sandbox Code Playgroud)
当容器通过主机网络运行时,这会按预期阻止连接:
$ docker run -it --rm --network host -u $(id -u userx):$(id -g userx) appropriate/curl http://169.254.169.254/latest/meta-data/
...blocks..
Run Code Online (Sandbox Code Playgroud)
但遗憾的是,当容器在自己的网络中运行时允许连接
$ docker run -it --rm -u $(id -u userx):$(id -g userx) appropriate/curl http://169.254.169.254/latest/meta-data/
...show metadata...
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?或者,是否有其他一些技术可以为特定容器提供完整的网络访问权限,同时阻止实例元数据?