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