Матричные правила связывания – это альтернативный способ задать правила применения политик безопасности.
Этот способ связывания позволяет группировать правила по отдельным атрибутам, которые характеризуют событие. Например, вы можете задать список политик, применяемых ко всем обращениям по определенному интерфейсу. Другой пример: с помощью одной объявленной глобально инструкции execute { grant; } можно разрешить сущности запускать любые другие сущности, при этом не требуется указывать execute call main = grant; в конфигурации каждой сущности.
Помимо этого, матричные правила связывания позволяют задавать активный профиль аудита.
Матричные правила связывания могут использоваться как внутри инструкции entity, так и снаружи (глобально). При этом внутри секции матричных правил не могут находиться инструкции entity.
Для указания отправителя и получателя IPC-сообщения, к которому применяются правила, используются атрибуты с зарезервированными именами src (для отправителя) и dst (для получателя). Если атрибуты src и dst не заданы, матричные правила действуют для всех сущностей в решении. При использовании матричных правил в секции сущности (инструкция entity) требуется указать, является ли эта сущность отправителем (src=@) или получателем (dst=@) сообщения.
Матричные правила связывания могут содержать вложенные секции правил связывания (см. элемент <match-section-inner>). Во вложенных секциях невозможно указать тип события (<match-operation>), но можно уточнить атрибуты (<match-attrs>).
Синтаксис
<match-entry>
::= <match-operation> [<match-attrs>] "{" <match-body> "}"
<match-operation> ::= "request"
| "response"
| "security"
| "execute"
<match-attrs> ::= <match-attr> {"," <match-attr>}
<match-attr> ::= <match-entity>
| <match-message>
| <match-endpoint>
| <match-interface>
| <match-method>
<match-entity> ::= <call-side> "=" <match-entity-value>
<call-side> ::= "src" | "dst"
<match-entity-value> ::= <entity-self> | <entity-name>
<entity-self> :: = "@"
<match-message> ::= "message=" <name-path>
<match-endpoint> ::= "endpoint=" <name-path>
<match-interface> ::= "interface=" <name-path>
<match-method> ::= "method=" <method-name>
<match-body> ::= [<audit-profile>] {<match-body-section>}
<match-body-section> ::= <policy-list> | <match-section-inner>
<match-section-inner> ::= "match" <match-attrs> "{" <match-body> "}"
Элементы
|
Тип события:
|
|
Список атрибутов матричных правил, перечисляемых через запятую. |
|
Атрибуты, конкретизирующие сущность. |
|
Роль сущности в событии. Атрибут src обозначает:
Атрибут dst обозначает:
|
|
Указатель на сущность. |
|
Специальный символ @, применяемый в матричных правилах связывания внутри инструкции |
|
Атрибут, конкретизирующий полное имя типа сообщения, состоящего из компонента, интерфейса и метода. Например:
|
|
Атрибут, конкретизирующий имя экземпляра компонента и имя реализации интерфейса. Например:
|
|
Атрибут, конкретизирующий полное имя интерфейса без метода. Например:
|
|
Атрибут, конкретизирующий имя метода. Используется для уточнения атрибутов |
|
Тело инструкции, содержащее правила связывания. |
|
Назначение профиля аудита ко всем привязкам в текущей и вложенных секциях. |
|
Привязка политик на все подходящие вызовы, заданные атрибутами в текущей и родительских секциях. Является полным аналогом правой части привязок в секциях сущностей. |
|
Секция вложенных матричных правил связывания. Наследует тип события, атрибуты и профиль аудита от родительской секции. |
Пример
use audit empty;
/* Разрешает всем сущностям отправлять ответы. Указание профиля аудита "empty" означает, что информация об ответах не будет попадать в журнал событий. */
response {
audit empty;
grant;
}
/* Задает правила, применяемые при обращении "client" к "server".
В отличие от привязок в конфигурации сущности, эти правила будут действовать
только в отношении указанных сущностей и не будут объединяться с конфигурацией
второй сущности.
*/
request src=com.example.client, dst=com.example.server {
/* Вложенная секция, которая уточняет взаимодействие указанных выше сущностей.
Правила внутри этой секции применяются при вызове метода "do_something".
*/
match message=com.example.api.IServer.do_something { grant; }
/* Эта запись эквивалентна предыдущей. */
match interface=com.example.api.IServer {
match method=do_something {
grant;
}
}
}
/* Инструкция, информирующая компилятор о существовании сущностей.
Правила связывания с политиками безопасности заданы извне. */
entity com.example.client;
entity com.example.server {
/* Секция с матричными правилами связывания внутри конфигурации сущности.
Сущность выступает в роли получателя запросов (сервера),
что дает возможность использовать атрибут "endpoint". */
request dst=@, endpoint=tst.impl {
/* В соответствии с описаниями EDL, CDL и IDL
будет выполнена проверка на наличие реализаций и указанного
метода у сущности "server".
*/
match method=do_something_else { grant; }
}
}
В начало