容器禁用服务帐户

时间:2016-07-22 23:30:01

标签: kubernetes

我有一些容器会在其中运行用户代码。为了加强安全性,我想阻止他们通过服务帐户机制访问kubernetes api,但不希望全局关闭它。文档说您可以切换服务帐户名称,但只能切换到另一个有效名称。有没有我错过的替代品?您可以将帐户限制为0权限吗?你可以用另一个空的超载音量吗?还有其他想法吗?

3 个答案:

答案 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用户提供完整的读/写访问权限),并有选择地向某些服务帐户或命名空间授予权限