我们正试图用使用GateKeeper的OPA政策取代Kubernetes中现有的PSP。我使用的是GateKeeper https://github.com/open-policy-agent/gatekeeper-library/tree/master/library/pod-security-policy提供的默认模板,并定义了相应的约束。
但是,我不知道如何将策略应用于特定的ServiceAccount
。例如。如何仅为名为awsnode的ServiceAccount定义allow-privilege-escalation
策略?
在PSP中,我为必需的podsecuritypolicies
创建了一个角色/ClusterRole,并创建了一个RoleBinding以允许awsnode ServiceAccount使用所需的PSP。我很难理解如何使用网守OPA政策实现同样的目标?
谢谢。
2条答案
按热度按时间zf9nrax11#
显然,PSP和网守OPA策略旨在实现不同级别的POD安全。以下是AWS支持人员对上述问题的回应。
网守约束模板(以及由模板定义的对应约束CRD)适用于更大范围的Kubernetes资源,而不仅仅是Pod。GateKeeper扩展了RBAC在此阶段无法提供的附加功能。网守本身不能由RBAC管理(通过使用动词限制对网守约束的访问),因为不存在网守策略约束的RBAC资源关键字(至少在撰写本文时是这样)。PodSecurity许可控制器可能是寻找PSP替代品的人的一个选择,如果群集在1.22或更高版本上,则需要由RBAC控制。
rggaifut2#
我认为将OPA网关守护策略(ConstraintTemplate)应用于特定ServiceAccount的一种可能的解决方案是使OPA/Rego策略代码反映该筛选/选择逻辑。既然您说您正在使用网守库中已有的策略,那么更改策略代码对您来说可能不是一个选择。但如果可以更改它,我认为您的OPA/Rego策略可以考虑Pod的serviceAccount字段。请记住,对于OPA GateKeeper,Rego策略代码的输入是整个准入请求,包括Pod的规范(假设您试图检查的是Pod创建)。
因此,Rego策略代码的部分输入可能如下所示
因此,GateKeeper-库的允许权限提升引用
input.review.object.spec.containers
并找到一个类似于“apache”的容器数组。同样,您可以修改策略代码以引用input.review.object.spec.serviceAccount
并找到“apache-service-count”。从那时起,问题是使用这些信息来确保只有当服务帐户是您想要应用的帐户时,规则“违规”才匹配。除此之外,还可以获取预期的服务帐户名并将其作为ConstraintTemplate参数,以使您的新策略更加灵活/可用。
希望这个能帮上忙!