ビュー:
プロファイル適用性: レベル1
ClusterRoleBindingsRoleBindingsで、system:authenticatedグループを使用する非デフォルトのものは避けてください。ただし、ClusterRoleBindings system:basic-usersystem:discoverysystem:public-info-viewerは例外です。
Googleの認証へのアプローチは、複雑な設定手順を追加することなく、Google CloudおよびGKEへの認証を可能な限り簡単かつ安全にすることです。グループsystem:authenticatedには、すべてのGoogleアカウントを持つユーザが含まれており、すべてのGmailアカウントが含まれます。
権限を付与する際には、この拡張されたグループ範囲で認証コントロールを考慮してください。そのため、グループsystem:authenticatedはデフォルト以外の使用には推奨されません。
GKEは、Googleアカウントでサインインしているすべてのユーザによって行われたAPIサーバリクエストに対して、グループsystem:authenticatedを割り当てます。これは、誰でもGoogleアカウントを作成できるため、実際にはsystem:unauthenticatedと意味的に大きな違いはありません。
system:authenticatedグループにロールをバインドすると、すべてのGmailアカウントを含むGoogleアカウントを持つユーザにそのロールによって付与された権限が与えられるため、強く推奨されません。

影響

system:authenticatedグループの認証済みユーザは、system:unauthenticatedのユーザと同様に扱われ、設定されたバインディングに関連付けられた役割に関連する特権と権限を持つべきです。
環境から非デフォルトのclusterrolebindingsまたはrolebindingsを削除する前に、それらがクラスタの運用に必要でないことを確認する必要があります。クラスタ操作には、より具体的で認証されたユーザを活用してください。

監査

次のコマンドを使用して、system:authenticatedに対する非デフォルトの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'
次のデフォルトのClusterRoleBindingsのうち、1つ以上のみが表示される必要があります。
Name ----- system:basic-user system:discovery 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:authenticatedグループを含む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:authenticatedに対して特定します。それらが使用されているか確認し、上記の監査セクションのコマンドを使用するか、GKEドキュメントを参照してバインディングに関連付けられた権限を確認してください。
非デフォルトで安全でないバインディングを認証されたユーザ定義グループに置き換えることを強く検討してください。可能な場合は、最小特権ロールを持つ非デフォルトのユーザ定義グループにバインドしてください。
グループsystem:authenticatedにデフォルト以外の安全でないバインディングがある場合、クラスター操作を考慮し、必要かつ安全なバインディングのみを残して削除してください。
kubectl delete clusterrolebinding [CLUSTER_ROLE_BINDING_NAME] kubectl delete rolebinding [ROLE_BINDING_NAME] --namespace [ROLE_BINDING_NAMESPACE]

デフォルト値

system:authenticatedグループのClusterRoleBindings:
  • system:basic-ユーザ
  • system:discovery
グループsystem:authenticatedRoleBindingsがありません。