プロファイル適用性: レベル1
デフォルト以外の
ClusterRoleBindingsおよびRoleBindingsをsystem:unauthenticatedグループで使用することは避けてください。ただし、ClusterRoleBinding system:public-info-viewerは例外です。Kubernetesは認証情報が提供されていないAPIサーバリクエストに対してグループ
system:unauthenticatedを割り当てます。このグループにロールをバインドすると、認証されていないユーザにそのロールによって付与された権限が与えられるため、強く推奨されません。影響
認証されていないユーザは、設定されたバインディングに関連付けられたロールに関連する特権と権限を持ちます。クラスターの運用に必要でないことを確認するために、環境からデフォルト以外の
clusterrolebindingsやrolebindingsを削除する前に注意が必要です。クラスター操作には、より具体的で認証されたユーザを活用してください。監査
CusterRoleBindingsとRoleBindingsの両方を監査する必要があります。次のコマンドを使用して、
system:unauthenticatedグループに対する非デフォルトのClusterRoleBindingsがないことを確認してください。$ kubectl get clusterrolebindings -o json | jq -r '["Name"], ["-----"], (.items[] | select((.subjects | length) > 0) | select(any(.subjects[]; .name == "system:unauthenticated")) | [.metadata.namespace, .metadata.name]) | @tsv'
次のデフォルト
ClusterRoleBindingのみ表示されるべきです。Name ----- system:public-info-viewer
デフォルト以外のバインディングが存在する場合、次のコマンドでその権限を確認し、特権を再評価してください。
$ kubectl get clusterrolebinding [CLUSTER_ROLE_BINDING_NAME] -o json \ | jq ' .roleRef.name +" " + .roleRef.kind' \ | sed -e 's/"//g' \ | xargs -l bash -c 'kubectl get $1 $0 -o yaml'
system:unauthenticatedグループを含むRoleBindingsがないことを確認してください。$ kubectl get rolebindings -A -o json | jq -r '["Namespace", "Name"], ["----- ----", "-----"], (.items[] | select((.subjects | length) > 0) | select(any(.subjects[]; .name == "system:unauthenticated")) | [.metadata.namespace, .metadata.name]) | @tsv'
RoleBindingsは一覧表示されていないはずです。バインディングが存在する場合は、次のコマンドでその権限を確認し、特権を再評価してください。
$ kubectl get rolebinding [ROLE_BINDING_NAME] --namespace [ROLE_BINDING_NAMESPACE] -o json \ | jq ' .roleRef.name +" " + .roleRef.kind' \ | sed -e 's/"//g' \ | xargs -l bash -c 'kubectl get $1 $0 -o yaml --namespace [ROLE_BINDING_NAMESPACE]'
修復
すべての非デフォルトの
clusterrolebindingsおよびrolebindingsをグループsystem:unauthenticatedに対して特定します。それらが使用されているか確認し、上記の監査セクションのコマンドを使用して、またはGKE ドキュメントを参照して、バインディングに関連付けられた権限を確認します。デフォルト以外の安全でないバインディングを、認証されたユーザ定義のグループに置き換えることを強く検討してください。可能であれば、最小特権ロールを持つデフォルト以外のユーザ定義グループにバインドしてください。
グループ
system:unauthenticatedにデフォルト以外の安全でないバインディングがある場合、必要かつ安全なバインディングのみでクラスタ操作を考慮した後に削除を進めてください。kubectl delete clusterrolebinding [CLUSTER_ROLE_BINDING_NAME] kubectl delete rolebinding [ROLE_BINDING_NAME] -- namespace [ROLE_BINDING_NAMESPACE]
デフォルト値
ClusterRoleBindingsでグループsystem:unauthenticated:system:public-info-viewer
グループ
system:unauthenticatedにRoleBindingsはありません。
