Политика аудита в Managed Service for Kubernetes
Политика аудита (audit policy
Стадии
Стадия | Момент генерации события |
---|---|
RequestReceived |
Как только обработчик аудита получает запрос. |
ResponseStarted |
После отправки заголовков ответа, но до отправки тела ответа. |
ResponseComplete |
После отправки тела ответа. |
Panic |
После появления критических ошибок. |
Уровни
Уровень | Описание |
---|---|
None |
Не записывать события. |
Metadata |
Записывать метаданные событий, но не включать тело запроса или ответа. |
Request |
Записывать метаданные событий и тело запроса, но не включать тело ответа. |
RequestResponse |
Записывать метаданные событий, тело запроса и ответа. |
Файл политики аудита в Managed Service for Kubernetes
Файл политики аудита в Managed Service for Kubernetes выглядит так:
apiVersion: audit.k8s.io/v1
kind: Policy
rules:
- level: None
users: ["system:kube-proxy"]
verbs: ["watch"]
resources:
- group: "" # Core.
resources: ["endpoints", "services", "services/status"]
- level: None
users: ["system:unsecured"]
namespaces: ["kube-system"]
verbs: ["get"]
resources:
- group: "" # Core.
resources: ["configmaps"]
- level: None
users: ["kubelet"] # Legacy kubelet identity.
verbs: ["get"]
resources:
- group: "" # Core.
resources: ["nodes", "nodes/status"]
- level: None
userGroups: ["system:nodes"]
verbs: ["get"]
resources:
- group: "" # Core.
resources: ["nodes", "nodes/status"]
- level: None
users:
- system:kube-controller-manager
- system:kube-scheduler
- system:serviceaccount:kube-system:endpoint-controller
verbs: ["get", "update"]
namespaces: ["kube-system"]
resources:
- group: "" # Core.
resources: ["endpoints"]
- level: None
users: ["system:apiserver"]
verbs: ["get"]
resources:
- group: "" # Core.
resources: ["namespaces", "namespaces/status", "namespaces/finalize"]
- level: None
users: ["cluster-autoscaler"]
verbs: ["get", "update"]
namespaces: ["kube-system"]
resources:
- group: "" # Core.
resources: ["configmaps", "endpoints"]
- level: None
users:
- system:kube-controller-manager
verbs: ["get", "list"]
resources:
- group: "metrics.k8s.io"
- level: None
nonResourceURLs:
- /healthz*
- /version
- /swagger*
- level: None
resources:
- group: "" # Core.
resources: ["events"]
- level: Request
users: ["kubelet", "system:node-problem-detector", "system:serviceaccount:kube-system:node-problem-detector"]
verbs: ["update","patch"]
resources:
- group: "" # Core.
resources: ["nodes/status", "pods/status"]
omitStages:
- "RequestReceived"
- level: Request
userGroups: ["system:nodes"]
verbs: ["update","patch"]
resources:
- group: "" # Core.
resources: ["nodes/status", "pods/status"]
omitStages:
- "RequestReceived"
- level: Request
users: ["system:serviceaccount:kube-system:namespace-controller"]
verbs: ["deletecollection"]
omitStages:
- "RequestReceived"
- level: Metadata
resources:
- group: "" # Core.
resources: ["secrets", "configmaps", "serviceaccounts/token"]
- group: authentication.k8s.io
resources: ["tokenreviews"]
omitStages:
- "RequestReceived"
- level: Request
verbs: ["get", "list", "watch"]
resources:
- group: "" # Core.
- group: "admissionregistration.k8s.io"
- group: "apiextensions.k8s.io"
- group: "apiregistration.k8s.io"
- group: "apps"
- group: "authentication.k8s.io"
- group: "authorization.k8s.io"
- group: "autoscaling"
- group: "batch"
- group: "certificates.k8s.io"
- group: "extensions"
- group: "metrics.k8s.io"
- group: "networking.k8s.io"
- group: "policy"
- group: "rbac.authorization.k8s.io"
- group: "scheduling.k8s.io"
- group: "settings.k8s.io"
- group: "storage.k8s.io"
omitStages:
- "RequestReceived"
- level: RequestResponse
resources:
- group: "" # Core.
- group: "admissionregistration.k8s.io"
- group: "apiextensions.k8s.io"
- group: "apiregistration.k8s.io"
- group: "apps"
- group: "authentication.k8s.io"
- group: "authorization.k8s.io"
- group: "autoscaling"
- group: "batch"
- group: "certificates.k8s.io"
- group: "extensions"
- group: "metrics.k8s.io"
- group: "networking.k8s.io"
- group: "policy"
- group: "rbac.authorization.k8s.io"
- group: "scheduling.k8s.io"
- group: "settings.k8s.io"
- group: "storage.k8s.io"
omitStages:
- "RequestReceived"
- level: Metadata
omitStages:
- "RequestReceived"
Описания правил политики аудита
Ниже приведены примеры правил политики аудита.
None
Правило для уровня - level: None
users: ["kubelet"] # Legacy kubelet identity.
verbs: ["get"]
resources:
- group: "" # Core.
resources: ["nodes", "nodes/status"]
Означает, что сведения о событиях не должны записываться, если верны условия:
- Запрос отправляется компонентом
kubelet
с узла кластера Managed Service for Kubernetes. - Тип запроса —
get
. - Запрос относится к ресурсам
nodes
илиnodes/status
.
Metadata
Правило для уровня - level: Metadata
resources:
- group: "" # Core.
resources: ["secrets", "configmaps", "serviceaccounts/token"]
- group: authentication.k8s.io
resources: ["tokenreviews"]
omitStages:
- "RequestReceived"
Означает, что необходимо записывать метаданные событий, если верны условия:
- Событие не соответствует ни одному предыдущему правилу в политике аудита.
- Запрос относится к ресурсам
secrets
,configmaps
,serviceaccounts/token
илиtokenreviews
. - Событие не относится к стадии
RequestReceived
.
Request
Правило для уровня - level: Request
userGroups: ["system:nodes"]
verbs: ["update","patch"]
resources:
- group: "" # Core.
resources: ["nodes/status", "pods/status"]
omitStages:
- "RequestReceived"
Означает, что необходимо записывать метаданные событий и тело запроса, если верны условия:
- Событие не соответствует ни одному предыдущему правилу в политике аудита.
- Запрос отправляется компонентом, который состоит в группе
system:nodes
. - Тип запроса —
update
илиpatch
. - Запрос относится к ресурсам
nodes/status
илиpods/status
. - Событие не относится к стадии
RequestReceived
.
Request
Правило для уровня - level: Request
verbs: ["get", "list", "watch"]
resources:
- group: "" # Core.
- group: "admissionregistration.k8s.io"
- group: "apiextensions.k8s.io"
- group: "apiregistration.k8s.io"
- group: "apps"
- group: "authentication.k8s.io"
- group: "authorization.k8s.io"
- group: "autoscaling"
- group: "batch"
- group: "certificates.k8s.io"
- group: "extensions"
- group: "metrics.k8s.io"
- group: "networking.k8s.io"
- group: "policy"
- group: "rbac.authorization.k8s.io"
- group: "scheduling.k8s.io"
- group: "settings.k8s.io"
- group: "storage.k8s.io"
omitStages:
- "RequestReceived"
Означает, что необходимо записывать метаданные событий и тело запроса, если верны условия:
- Событие не соответствует ни одному предыдущему правилу в политике аудита.
- Тип запроса —
get
,list
илиwatch
. - Запрос относится к группе ресурсов из списка.
- Событие не относится к стадии
RequestReceived
.
RequestResponse
Правило для уровня - level: RequestResponse
resources:
- group: "" # Core.
- group: "admissionregistration.k8s.io"
- group: "apiextensions.k8s.io"
- group: "apiregistration.k8s.io"
- group: "apps"
- group: "authentication.k8s.io"
- group: "authorization.k8s.io"
- group: "autoscaling"
- group: "batch"
- group: "certificates.k8s.io"
- group: "extensions"
- group: "metrics.k8s.io"
- group: "networking.k8s.io"
- group: "policy"
- group: "rbac.authorization.k8s.io"
- group: "scheduling.k8s.io"
- group: "settings.k8s.io"
- group: "storage.k8s.io"
omitStages:
- "RequestReceived"
Означает, что необходимо записывать метаданные событий, тело запроса и ответа, если верны условия:
- Событие не соответствует ни одному предыдущему правилу в политике аудита.
- Тип запроса —
create
,update
илиdelete
. Это не указано явно, но следует из того, что правило не применяется к указанным ранее типам запросов:get
,list
илиwatch
. - Запрос относится к группе ресурсов из списка.
- Событие не относится к стадии
RequestReceived
.
Подробнее о политике аудита см. в документации Kubernetes