AccessRequest
Содержание
ОбзорДоступностьПонимание AccessRequestЧто он представляетКак он связан с AccessPolicyКак он создаётся и обрабатываетсяПримерЧтение статусаОперационные заметкиЧто дальшеОбзор
AccessRequest — это объект времени выполнения в пределах namespace, предназначенный для управления доступом к Connector через механизм утверждения.
Он связывает вместе:
- субъект, запрашивающий доступ
- целевой
Connector - объект контекста времени выполнения, для которого запрашивается доступ
В модели утверждения Connectors, AccessPolicy определяет правило, а AccessRequest отслеживает одну конкретную попытку доступа.
В большинстве случаев пользователи не создают AccessRequest вручную. Он создаётся автоматически, когда рабочая нагрузка пытается использовать Connector через Connectors CSI Driver, не имея при этом необходимого разрешения connectors/proxy.
Читайте этот документ после Connectors Approval & Permission Gating и AccessPolicy.
В этом документе использовать Connector означает использовать путь доступа без секретов через Connectors Proxy, обычно из рабочей нагрузки, которая потребляет конфигурацию Connector через Connectors CSI Driver.
Это не означает чтение самого объекта Connector или вызов Connectors API.
AccessRequest принадлежит namespace Connector, так как отслеживает доступ к конкретному Connector.
Запрашивающий субъект и объект контекста времени выполнения могут находиться в другом namespace. Это часто встречается, когда общий Connector используется рабочими нагрузками из namespace проектов или арендаторов.
Доступность
AccessRequest является частью функционала Connectors Approval.
Перед использованием этого процесса необходимо включить:
enable-connectors-approvalenable-connector-proxy-permissions
Для получения дополнительной информации смотрите Feature Flags.
Понимание AccessRequest
Что он представляет
AccessRequest фиксирует одну конкретную runtime-запрос, а не переиспользуемую политику.
Основные поля:
spec.subject: кто запрашивает доступ. В сценариях с утверждением для CSI это обычно ServiceAccount рабочей нагрузки.spec.connectorRef: к какому Connector запрашивается доступ. Ссылаемый Connector всегда находится в том же namespace, что иAccessRequest.spec.context.objectRef: к какому объекту времени выполнения привязан этот запрос. В настоящее время поддерживается толькоPod.
Этот ресурс специально ориентирован на runtime:
- он отслеживает прогресс утверждения для одного контекста рабочей нагрузки
- он предоставляет временное разрешение только после успешных проверок
- он становится неактуальным после завершения этого контекста рабочей нагрузки
Как он связан с AccessPolicy
AccessPolicy отвечает на вопросы:
- какие Connectors требуют утверждённого доступа
- какие проверки должны быть пройдены
- какое разрешение должно быть выдано после утверждения
AccessRequest отвечает на другой вопрос:
- для данного субъекта, Connector и контекста Pod, был ли доступ утверждён и синхронизирован
Это основное разграничение между двумя объектами:
- AccessPolicy описывает переиспользуемое правило
AccessRequestописывает одну runtime-оценку этого правила
Когда AccessRequest впервые совпадает с политиками, контроллер сохраняет снимки совпавших записей AccessPolicy.spec в status.policies. Это обеспечивает стабильность запроса в процессе выполнения, даже если исходная политика изменится позже.
Схему политики смотрите в AccessPolicy API Reference.
Как он создаётся и обрабатывается
Типичный процесс:
- Рабочая нагрузка пытается использовать Connector через
Connectors Proxyили Connectors CSI Driver. - Если у рабочей нагрузки уже есть необходимое разрешение
connectors/proxyдля данного Connector и контекста Pod,AccessRequestне создаётся. - Если разрешение отсутствует, поток CSI создаёт или повторно использует
AccessRequest. - Контроллер проверяет контекст Pod, разрешает целевой Connector и сопоставляет ресурсы
AccessPolicyсcheckGrantedPermission. - Контроллер находит совпадающие проверки, например
ApprovalTask, и записывает их результаты вstatus.policies[].matchedChecks. - После успешного прохождения всех проверок система создаёт временные
RoleиRoleBindingдля запрашивающего субъекта. - По завершении Pod, его удалении или недействительности Connector временные разрешения удаляются.
Таким образом, AccessRequest является runtime-мостом между статусом утверждения и фактической синхронизацией разрешений RBAC.
Пример
Ниже приведён пример структуры одного запроса:
Этот пример демонстрирует важный шаблон:
AccessRequestхранится в namespace Connector:connectors-shared- запрашивающий ServiceAccount находится в namespace рабочей нагрузки:
cicd - запрос привязан к одному Pod, а не ко всем будущим Pod, использующим тот же ServiceAccount
Чтение статуса
AccessRequest.status показывает, на каком этапе runtime-процесса утверждения находится запрос — заблокирован он или завершён.
Важные условия:
ContextObjectValid: существует ли связанный Pod и активен ли онConnectorResolved: существует ли указанный ConnectorAccessPolicyMatched: совпала ли какая-либо утверждённаяAccessPolicyс этим запросомAccessCheckReady: пройдены ли проверки, находятся в ожидании или отклоненыAccessPermissionSync: синхронизировано ли временное разрешение, ожидает синхронизации или уже удаленоReady: общий результат, выведенный из вышеуказанных условий
Распространённые интерпретации:
- Ожидание утверждения:
AccessCheckReady = Unknownс причинойPending - Доступ предоставлен и доступен:
Ready = TrueиAccessPermissionSync = Trueс причинойSynced - Доступ отклонён:
AccessCheckReady = Falseс причинойRejected - Разрешение удалено после завершения runtime:
AccessPermissionSync = Trueс причинойPermissionCleanUp
Операционные заметки
AccessRequest.specнеизменяем после создания. Если субъект, Connector или контекст изменяются, используется другой запрос.AccessRequestобычно существует только для доступа с утверждением. Если ни одна политика утверждения не совпадает, он не становится переиспользуемой записью разрешений.- Сгенерированное разрешение ограничено как запрошенным Connector, так и контекстом runtime Pod, что помогает обеспечивать принцип наименьших привилегий.
Что дальше
- Повторно изучить общий процесс в Connectors Approval & Permission Gating
- Повторно изучить дизайн политики в AccessPolicy
- Ознакомиться со схемой в AccessRequest API Reference
- Узнать, как определяются правила утверждения в AccessPolicy API Reference