是否有可能阻止EKS上的Kubernetes Pod承担节点的IAM角色?

xjreopfe  于 2022-10-06  发布在  Kubernetes
关注(0)|答案(2)|浏览(211)

默认情况下,AWS EKS上的任何Kubernetes Pod都可以承担底层节点的IAM角色。这意味着所有容器immediately get access都指向AmazonEKSWorkerNodePolicy和AmazonEC2ContainerRegistryReadOnly等策略,这是我想要避免的。

我不想完全阻止使用iptables的所有容器使用AWS API,因为如果有适当的凭据,应该可以调用它。

使用IAM roles for service accounts,可以将某个IAM角色与Pod的服务帐户相关联。但这是否会阻止Pod承担底层节点的IAM角色?

dnph8jn4

dnph8jn41#

AWS文档中介绍了可能会阻止它的两个主要因素(如果同时使用):

  • 正如运营人员已经指出的那样,服务客户的IAM角色。
  • Blocking access to instance metadata service-阻止IMDS可能会停止您拥有的一些正在运行的应用程序/服务,因此应该事先进行正确的测试。

最重要的是,正如文档中指出的,这取决于CNI,如果您使用Calico,这是一个关于Calico网络策略的问题和缓解的很好的write-up

另一种选择是使用kube2iam

bgibtngc

bgibtngc2#

我认为这在Official EKS Best Practices Guides>Security>Identity and Access Management(IAM)>限制对分配给工作节点的示例配置文件的访问中得到了最好的解释

引用它的话
Pod仍然可以继承分配给Worker节点的示例配置文件的权限

强烈建议您阻止访问示例元数据,以最大限度地减少漏洞的爆炸半径。

无论您是否使用IRSA(服务帐户的IAM角色),最好阻止从Pod访问示例元数据。

如果Pod实际上需要IAM凭据,那么您应该使用IRSA(或其他获取IAM凭据的方法),这样您就可以符合最小特权原则。

要阻止Pod从EKS节点EC2示例配置文件(节点的IAM角色)获取IAM凭据,有限制访问示例配置文件中提到的3个替代方案

  • 修改启动模板,要求示例使用IMDSv2(强调v2),跳数设置为1

  • 节点中的iptables

  • 配置起来要麻烦得多

  • Amazon EC2>示例>配置示例>示例元数据和用户数据>检索示例元数据>限制示例元数据服务访问

  • Kubernetes网络策略NetworkPolicy

  • 创建一个NetworkPolicy,应用于所有拦截169.254.169.254/32(元数据发现地址)的示例

  • NetworkPolicy添加到需要访问它的特定Pod。这仍然违反了最小特权原则,因为这些Pod将获得节点IAM角色的所有权限,这些权限已经很宽。

最佳选项(IMHO)是在启动模板HttpEndpoint=enable,HttpTokens=required,HttpPutResponseHopLimit=1中要求IMDSv2和跳数/跳数限制1,Pod仍然可以向元数据发现端点发出请求,但它们永远得不到响应,因为响应包将在节点和Pod之间的第一个路由器(虚拟)处丢弃。

相关问题