我有一些容器会在其中运行用户代码。为了加强安全性,我想阻止他们通过服务帐户机制访问kubernetes api,但不希望全局关闭它。文档说您可以切换服务帐户名称,但只能切换到另一个有效名称。有没有我错过的替代品?您可以将帐户限制为0权限吗?你可以用另一个空的超载音量吗?还有其他想法吗?
答案 0 :(得分:4)
在Kubernetes 1.6+中,您可以在Pod上禁用服务帐户安装:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
automountServiceAccountToken: false
...
请参阅https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
答案 1 :(得分:3)
最简单的方法是将emptyDir挂载到serviceAccount secret已挂载的位置。类似的东西:
containers:
- name: running-user-code
image: something-i-dont-trust
volumeMounts:
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
name: no-api-access-please
readOnly: true
volumes:
- name: no-api-access-please
emptyDir: {}
Kubernetes Issue #16779中有更多关于潜在解决方案的讨论(以及我从中窃取emptyDir示例的地方)。
答案 2 :(得分:2)
服务帐户仅对API进行身份验证,它们本身并不具有执行任何读取或写入API操作的授权。
如果要保护群集,请使用AlwaysAllow以外的授权模式运行(为任何经过身份验证的API用户提供完整的读/写访问权限),并有选择地向某些服务帐户或命名空间授予权限