Ich habe einige Container, die runnin Benutzer Code in ihnen sein wird. Um die Sicherheit zu erhöhen, möchte ich verhindern, dass sie über den Service-Konto-Mechanismus Zugang zu Kubernetes API haben, aber nicht global ausschalten wollen. Die Dokumentation besagt, dass Sie den Namen des Dienstkontos nur auf einen anderen gültigen Namen ändern können. Gibt es Alternativen, die ich vermisst habe? Können Sie das Konto auf 0 Berechtigungen beschränken? Können Sie das Volume mit einem anderen Volume überladen, das leer ist? Irgendwelche anderen Ideen?container disable service account
Antwort
Der einfachste Hack ist, ein leeres Verzeichnis über den Speicherort zu mounten, an dem das serviceAccount-Geheimnis eingehängt worden wäre. Etwas wie:
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: {}
Es gibt mehr Diskussion in Kubernetes Issue #16779 auf mögliche Lösungen (und das ist, wo ich das emptyDir Beispiel aus stahl).
Dienstkonten authentifizieren sich nur bei der API. Sie verfügen nicht über die erforderliche Berechtigung zum Ausführen von Lese- oder Schreib-API-Aktionen.
Wenn Sie Ihr Cluster zu sichern, führen Sie mit einer Berechtigungs anderen Modus als AlwaysAllow (die alle authentifizierten API Benutzer die vollständige Lese-/Schreibzugriff gibt) und selektiv Berechtigungen erteilen bestimmte Dienstkonten oder Namespaces
In Kubernetes 1.6+ können Sie Dienstkonto Montage auf einem Pod deaktivieren:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
automountServiceAccountToken: false
...
Siehe https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/