ビュー:
プロファイル適用性: レベル1
特別なグループsystem:mastersは、RBACが完全に利用可能になる前のブートストラップアクセスなど、厳密に必要な場合を除き、ユーザやサービスアカウントに権限を付与するために使用すべきではありません。
system:mastersグループは、Kubernetes APIへの無制限のアクセス権をAPIサーバのソースコードにハードコーディングされています。このグループのメンバーである認証済みユーザは、すべてのバインディングおよびそれに言及するクラスタロールバインディングが削除されても、アクセス権を減らすことはできません。
クライアント証明書認証と組み合わせることで、このグループを使用すると、クラスターに対して取り消し不可能なcluster-adminレベルの認証情報が存在する可能性があります。GKEにはCertificateSubjectRestrictionアドミッションコントローラーが含まれており、system:mastersグループへのリクエストを拒否します。
CertificateSubjectRestriction このアドミッションコントローラーは、spec.signerName が kubernetes.io/kube-apiserver-clientCertificateSigningRequest リソースの作成を監視します。system:masters の「グループ」(または「組織属性」) を指定するリクエストを拒否します。詳細については、Kubernetes ドキュメントを参照してください。
注意
注意
デフォルトでは、一部のクラスターがこのグループのメンバーである「ブレークグラス」クライアント証明書を作成します。このクライアント証明書へのアクセスは慎重に管理されるべきであり、一般的なクラスター操作には使用されるべきではありません。

影響

RBACシステムがクラスタで稼働すると、system:mastersは特に必要ではなく、制限のないアクセスが必要な場合には、プリンシパルからcluster-adminクラスタロールへの通常のバインディングを行うことができます。

監査

クラスターにアクセスできるすべての認証情報のリストを確認し、グループsystem:mastersが使用されていないことを確認してください。
kubectl get clusterrolebinding -o json | jq -r ' .items[] as $b | select([ $b.subjects[]? | select(.kind=="Group" and .name=="system:masters") ] | length > 0) | ($b.subjects[]? | select(.kind=="Group" and .name=="system:masters")) | "\(.kind)\t\(.name)\t(bound in: \($b.metadata.name))" '
サンプル出力:
Group system:masters (bound in: cluster-admin)

修復

クラスター内のすべてのユーザからsystem:mastersグループを削除してください。