ビュー:
プロファイル適用性: レベル1
Kubernetes APIはシークレットを保存します。これには、Kubernetes APIのサービスアカウントトークンや、クラスター内のワークロードで使用される認証情報が含まれる場合があります。これらのシークレットへのアクセスは、特権の昇格リスクを減らすために、可能な限り少数のユーザに制限する必要があります。
Kubernetesクラスター内に保存されたシークレットへの不適切なアクセスは、攻撃者がKubernetesクラスターや認証情報がシークレットとして保存されている外部リソースへの追加アクセスを得ることを可能にします。

影響

システムコンポーネントが動作に必要とする秘密へのアクセスを削除しないよう注意してください

監査

Kubernetes APIでシークレットオブジェクトに対してget、list、またはwatchアクセス権を持つユーザを確認してください。
以下は、リソースなどのワイルドカードを使用してアクセス権を付与するロールを含む、一致するロールごとにget、list、またはwatchが付与されているオブジェクトを出力するコマンドです。 ["","secrets/"] または動詞: ["*"]
kubectl get clusterrole,role -A -o json | jq -r ' def wanted: ["get","list","watch"]; .items[] as $r | [ $r.rules[]? | select( ((.apiGroups? // [""]) | any(.=="" or .=="*")) and ((.resources? // []) | any(.=="secrets" or .=="secrets/*" or .=="*")) and ((.verbs? // []) | any(.=="*" or .=="get" or .=="list" or .=="watch")) ) | if ((.verbs? // []) | any(.=="*")) then wanted[] else (.verbs[]? | select(IN("get","list","watch"))) end ] as $verbs | select($verbs | length > 0) | "\($r.kind): \($r.metadata.name) (namespace: \($r.metadata.namespace // "cluster-wide")) | verbs: \($verbs | unique | join(","))" '
サンプル出力:
ClusterRole: admin (namespace: cluster-wide) | verbs: get,list,watch
ClusterRole: cluster-admin (namespace: cluster-wide) | verbs: get,list,watch
ClusterRole: edit (namespace: cluster-wide) | verbs: get,list,watch
ClusterRole: system:aggregate-to-edit (namespace: cluster-wide) | verbs: get,list,watch
ClusterRole: system:cloud-controller-manager (namespace: cluster-wide) | verbs: get,list,watch
ClusterRole: system:controller:generic-garbage-collector (namespace: cluster-wide) | verbs: get,list,watch
ClusterRole: system:controller:namespace-controller (namespace: cluster-wide) | verbs: get,list,watch
ClusterRole: system:controller:resourcequota-controller (namespace: cluster-wide) | verbs: list,watch
ClusterRole: system:gcp-controller-manager (namespace: cluster-wide) | verbs: get,list,watch
ClusterRole: system:gke-common-webhooks (namespace: cluster-wide) | verbs: get,list,watch
ClusterRole: system:glbc-status (namespace: cluster-wide) | verbs: get
ClusterRole: system:kube-controller-manager (namespace: cluster-wide) | verbs: get,list,watch
ClusterRole: system:kubestore-collector (namespace: cluster-wide) | verbs: get,list,watch
ClusterRole: system:node (namespace: cluster-wide) | verbs: get,list,watch
Role: operator (namespace: gmp-public) | verbs: get,list,watch
Role: operator (namespace: gmp-system) | verbs: get,list,watch
Role: system:controller:bootstrap-signer (namespace: kube-system) | verbs: get,list,watch
Role: system:controller:token-cleaner (namespace: kube-system) | verbs: get,list,watch

修復

可能であれば、クラスター内のシークレットオブジェクトへの取得、リスト、または監視アクセスを削除してください。

デフォルト値

CLUSTERROLEBINDING                                    SUBJECT
TYPE                      SA-NAMESPACE
cluster-admin                                                  system:masters
Group
system:controller:clusterrole-aggregation-controller           clusterroleaggregation-
controller ServiceAccount kube-system
system:controller:expand-controller                            expand-controller
ServiceAccount kube-system
system:controller:generic-garbage-collector                    generic-garbagecollector
ServiceAccount kube-system
system:controller:namespace-controller                         namespace-controller
ServiceAccount kube-system
system:controller:persistent-volume-binder                     persistent-volumebinder
ServiceAccount kube-system
system:kube-controller-manager                                 system:kube-controllermanager 
    User