Проект Приказа Министерства цифрового развития, связи и массовых коммуникаций Российской Федерации "Об утверждении Требований к сетям и средствам связи собственников или иных владельцев технологических сетей связи, имеющих номер автономной системы, для проведения уполномоченными государственными органами, осуществляющими оперативно-разыскную деятельность или обеспечение безопасности Российской Федерации, в случаях, установленных федеральными законами, мероприятий в целях реализации возложенных на них задач"
(подготовлен Минцифры России 26.03.2024 г.)
В соответствии со статьями 12, 41 и 56.2 Федерального закона от 7 июля 2003 г. N 126-ФЗ "О связи", пунктом 1 и подпунктом 5.2.25(28) пункта 5 Положения о Министерстве цифрового развития, связи и массовых коммуникаций Российской Федерации, утвержденного постановлением Правительства Российской Федерации от 2 июня 2008 г. N 418, приказываю:
1. Утвердить прилагаемые Требования к сетям и средствам связи собственников или иных владельцев технологических сетей связи, имеющих номер автономной системы, для проведения уполномоченными государственными органами, осуществляющими оперативно-разыскную деятельность или обеспечение безопасности Российской Федерации, в случаях, установленных федеральными законами, мероприятий в целях реализации возложенных на них задач.
2. Признать утратившим силу приказ Минкомсвязи России от 5 ноября 2019 г. N 646 "Об утверждении Требований к сетям и средствам связи собственников или иных владельцев технологических сетей связи, имеющих номер автономной системы, для проведения уполномоченными государственными органами, осуществляющими оперативно-разыскную деятельность или обеспечение безопасности Российской Федерации, в случаях, установленных федеральными законами, мероприятий в целях реализации возложенных на них задач" (зарегистрирован Министерством юстиции Российской Федерации 22 января 2020 г., регистрационный N 57223).
Министр |
М.И. Шадаев |
УТВЕРЖДЕНЫ
приказом Министерства
цифрового развития, связи и массовых коммуникаций
Российской Федерации
от _________202_ г. N ____
ТРЕБОВАНИЯ
к сетям и средствам связи собственников или иных владельцев технологических сетей связи, имеющих номер автономной системы, для проведения уполномоченными государственными органами, осуществляющими оперативно-разыскную деятельность или обеспечение безопасности Российской Федерации, в случаях, установленных федеральными законами, мероприятий в целях реализации возложенных на них задач
I. Общие положения
1. Настоящие Требования устанавливают требования к программным и техническим средствам, используемым собственником или иным владельцем технологических сетей связи, имеющих номер автономной системы, в эксплуатируемых им информационных системах (далее - ИС АС) для обеспечения выполнения установленных действий при проведении оперативно-розыскных мероприятий (далее соответственно - требования, ПТС ОРМ, ОРМ), и разработаны в целях обеспечения устойчивого, безопасного и целостного функционирования на территории Российской Федерации информационно-телекоммуникационной сети "Интернет"*(1), а также создания условий для выполнения уполномоченными государственными органами, осуществляющими оперативно-розыскную деятельность, возложенных на них задач с использованием технических средств (далее - уполномоченные государственные органы).
II. Общие требования к ПТС ОРМ
2. Состав и построение ПТС ОРМ определяются особенностями построения ИС АС, перечнем предоставляемых информационных услуг и коммуникационных интернет-сервисов.
3. При реализации ПТС ОРМ должен быть использован один из вариантов их построения:
а) отдельный аппаратно-программный комплекс;
б) отдельный программный модуль в ИС АС;
в) комбинированный вариант, предусматривающий совместное использование элементов в соответствии с подпунктами "а" и "б" настоящего пункта.
4. Для каждого варианта построения должны обеспечиваться согласованные с органом федеральной службы безопасности требования по информационной безопасности и защите от несанкционированного доступа к информации, связанной с проведением ОРМ, в соответствии с подпунктами "з" и "и" пункта 17 настоящих Требований.
5. ПТС ОРМ должны входить в состав узлов связи технологических сетей связи, имеющих номер автономной системы.
III. Функциональные требования к ПТС ОРМ
6. ПТС ОРМ должны осуществлять поиск, обработку и передачу на пульт управления уполномоченного государственного органа (далее - ПУ) по его запросу или в автоматическом режиме информацию, хранящуюся в ИС АС и передаваемую по технологическим сетям связи*(2).
7. Перечень доступной для поиска информации, хранящейся в ИС АС и передаваемой по технологическим сетям связи, и схема ее представления, соответствующие требованиям приложения N 2 к настоящим Требованиям, должны согласовываться с органом федеральной службы безопасности. Мероприятия по согласованию должны включаться в план мероприятий по внедрению ПТС ОРМ в сети связи собственника или иного владельца технологической сети связи, имеющего номер автономной системы.
8. Взаимодействие ПТС ОРМ с ПУ должно осуществляться по единому каналу передачи данных.
9. Суммарная пропускная способность канала передачи данных между ПТС ОРМ и ПУ должна соответствовать данным, приведенным в таблице N 1.
Таблица N 1.
N п/п |
Среднесуточный объем новых данных, поступающих в ИС АС, Гбайт |
Суммарная пропускная способность каналов передачи данных между ПТС ОРМ и ПУ, не менее Мбит/с |
1 |
<1 |
10 |
2 |
1 - 10 |
50 |
3 |
10 - 100 |
100 |
4 |
100 - 500 |
500 |
5 |
500 - 1000 |
800 |
6 |
1000 - 10000 |
1000 |
7 |
>10000 |
10000 |
10. Требования, предъявляемые к интерфейсу взаимодействия между ПУ и ПТС ОРМ, приведены в приложении N 1 к настоящим Требованиям.
11. Требования к схеме представления информации, хранящейся в ИС АС (далее - схема данных), и выполнению запросов от ПУ приведены в приложении N 2 к настоящим Требованиям.
12. Перечень базовых типов для описания схемы данных приведен в приложении N 3 к настоящим Требованиям.
13. Перечень сервисных типов для описания схемы данных приведен в приложении N 4 к настоящим Требованиям.
14. Перечень входных объектов для задания параметров поиска приведен в приложении N 5 к настоящим Требованиям.
15. Требования, предъявляемые к формату передачи данных на языке GraphQL по протоколу WebSocket, приведены в приложении N 6 к настоящим Требованиям.
16. Требования, предъявляемые к запросам о текущей конфигурации оборудования, системного и прикладного программного обеспечения (далее - ПО) ПТС ОРМ, а также их состоянии, приведены в приложении N 7 к настоящим Требованиям.
17. ПТС ОРМ должны обеспечивать:
a) подключение к ПУ в соответствии с пунктом 10 Правил взаимодействия собственников или иных владельцев технологических сетей связи, имеющих уникальный идентификатор совокупности средств связи и иных технических средств в информационно-телекоммуникационной сети "Интернет", с уполномоченными государственными органами, осуществляющими оперативно-разыскную деятельность или обеспечение безопасности Российской Федерации, утвержденных постановлением Правительства Российской Федерации от 29 октября 2019 г. N 1385;
б) реализацию протокола взаимодействия ПТС ОРМ с ПУ в соответствии с приложением N 1 к настоящим Требованиям;
в) прием от ПУ поисковых запросов и запросов постановки объектов на контроль;
г) поиск информации, хранящейся в ИС АС, в соответствии с поступившими с ПУ поисковыми запросами и запросами постановки объектов на контроль. Для ПТС ОРМ, осуществляющих поиск информации в ИС АС со среднесуточным объемом новых данных свыше 1 Гбайт, должны поддерживать критерии поиска, приведенные в пункте 21 приложения N 1 к настоящим Требованиям;
д) передачу на ПУ от ПТС ОРМ данных в соответствии с поступившими с ПУ поисковыми запросами (в том числе постранично) и запросами постановки объектов на контроль;
е) прием от ПУ критериев поиска и передачу на ПУ статистической, текстовой, мультимедийной, звуковой, графической и иной информации в исходном (декодированном) виде, хранящейся в ИС АС и отбираемой по критериям поиска, без дополнительной обработки (далее - неформатированные данные);
ж) передачу на ПУ схемы данных в соответствии с поступившим с ПУ специальным запросом в соответствии с требованиями, приведенными в приложении N 4 к настоящим Требованиям;
з) защиту от несанкционированного доступа со стороны производителей ПТС ОРМ, неавторизованных пользователей, технического персонала, третьих лиц как к хранящейся в ПТС ОРМ информации, так и информации, непосредственно связанной с проведением ОРМ (информации, поступающей в ПТС ОРМ с ПУ, и информации, подготовленной к передаче из ПТС ОРМ в ПУ);
и) информирование ПУ о следующих попытках несанкционированного доступа:
для варианта исполнения ПТС ОРМ в виде отдельного аппаратно-программного комплекса:
доступ к данным, связанным с проведением ОРМ, с использованием команд или сервисных программ;
резервное копирование данных, связанных с проведением ОРМ;
доступ к ПТС ОРМ через интерфейсы, не предусмотренные для доступа к ним;
вскрытие корпуса технических средств ОРМ;
для варианта исполнения ПТС ОРМ в виде отдельного программного модуля в ИС АС:
доступ к данным, связанным с проведением ОРМ, с использованием команд или сервисных программ;
резервное копирование данных, связанных с проведением ОРМ;
для комбинированного варианта исполнения ПТС ОРМ:
доступ к данным, связанным с проведением ОРМ, с использованием команд или сервисных программ;
резервное копирование данных, связанных с проведением ОРМ;
доступ к ПТС ОРМ через интерфейсы, не предусмотренные для доступа к ним;
вскрытие корпуса технических средств ОРМ;
к) контроль работоспособности и загруженности ПТС ОРМ;
л) контроль за соблюдением предоставленных прав доступа к хранящейся в ПТС ОРМ информации;
м) круглосуточный удаленный доступ со стороны операторов ПУ к хранящейся в ИС АС информации по протоколу взаимодействия ПУ и ПТС ОРМ в соответствии с приложением N 1 к настоящим Требованиям;
о) ведение в автоматическом режиме системных журналов, содержащих информацию о работе ПТС ОРМ, а также связанных с проведением ОРМ данных:
о сеансах связи с ПУ, а также о попытках установления таких сеансов;
о поисковых запросах и запросах постановки объектов на контроль ПУ;
об ответах на поисковые запросы и запросы постановки объектов на контроль ПУ;
о текущей конфигурации ПТС ОРМ, системного и прикладного ПО;
об изменениях в конфигурации ПТС ОРМ, системного и прикладного ПО;
о сбоях в ПТС ОРМ, системном и прикладном ПО;
об изменениях схемы данных;
об обращении и доступе обслуживающего технического персонала к ПТС ОРМ;
п) доступ уполномоченного технического персонала для обслуживания ПТС ОРМ в соответствии с установленными правами доступа;
р) доступ технического персонала к системным файлам и ПО, в соответствии с правами, установленными парольной системой доступа;
с) сохранность и доступность для дальнейшего использования ранее накопленных данных при модернизации ПТС ОРМ;
т) автоматическое определение способа выполнения поисковых запросов (в режиме реального времени или в отложенном режиме в соответствии с пунктом 20 приложения N 1 к настоящим Требованиям), поступивших с ПУ, в соответствии с заданными временными параметрами;
у) временное хранение результатов выполнения поисковых запросов в отложенном режиме с учетом заданных временных параметров в соответствии с пунктом 21 настоящих требований.
18. Функционирование ПТС ОРМ не должно оказывать влияние на работоспособность ИС АС и технологические сети связи.
19. ПТС ОРМ не должны иметь иных интерфейсов взаимодействия кроме интерфейсов взаимодействия с ИС АС и ПУ.
20. ПТС ОРМ, применяемые в распределенных технологических сетях связи и (или) нескольких технологических сетях связи, должны иметь функционал выполнения поисковых запросов для тех технологических сетей связи, которые заданы с ПУ в запросе.
IV. Требования, предъявляемые к ПТС ОРМ в части обеспечения временных характеристик обработки запроса и поиска информации
21. Максимальное время предварительной обработки информации с момента ее поступления в ПТС ОРМ до момента, когда она становится доступной для выполнения поисковых запросов с ПУ, и максимальное время выполнения поисковых запросов и запросов постановки объектов на контроль определяется в ходе внедрения ПТС ОРМ в сети связи собственника или иного владельца технологической сети связи, имеющего номер автономной системы. Также должны быть установлены временные параметры для определения способа выполнения поисковых запросов (в режиме реального времени или в отложенном режиме в соответствии с пунктом 20 приложения N 1 к настоящим Требованиям) и максимальное время хранения результатов выполнения поисковых запросов в отложенном режиме. Мероприятие по определению указанных временных параметров должно включаться в план мероприятий по внедрению ПТС ОРМ и согласовываться с органом федеральной службы безопасности.
22. Временные параметры, указанные в пункте 21 настоящих Требований, могут корректироваться во время эксплуатации ПТС ОРМ по согласованию с органом федеральной службы безопасности.
Приложение N 1
к Требованиям к сетям и средствам связи собственников
или иных владельцев технологических сетей связи,
имеющих номер автономной системы, для проведения
уполномоченными государственными органами, осуществляющими
оперативно-разыскную деятельность или обеспечение безопасности
Российской Федерации, в случаях, установленных федеральными законами,
мероприятий в целях реализации возложенных на них задач,
утвержденным приказом Министерства цифрового развития,
связи и массовых коммуникаций Российской Федерации
от __.__.______ N ______
ТРЕБОВАНИЯ,
предъявляемые к интерфейсу взаимодействия между ПУ и ПТС ОРМ
1. ПТС ОРМ подключаются к ПУ в точках подключения выделенными каналами связи.
2. В качестве набора протоколов передачи данных следует использовать набор протоколов TCP/IP.
3. Для организации линий (каналов) связи, соединяющих ПТС ОРМ и ПУ, должен быть использован сетевой интерфейс первого уровня.
4. ПТС ОРМ должны предусматривать возможность создания виртуальной сети VPN (Virtual Private Network) для туннелирования всего рабочего TCP/IP трафика между ПТС ОРМ и ПУ.
5. Взаимодействие ПТС ОРМ с оборудованием ПУ на транспортном уровне должен осуществляться по схеме "клиент - сервер":
в качестве "сервера" выступают ПТС ОРМ;
в качестве "клиента" выступает оборудование ПУ.
6. Способы защиты линий (каналов) связи должны согласовываться с органом федеральной службы безопасности. Соединение ПУ и ПТС ОРМ должно устанавливаться по протоколу TLS версии 1.2 или 1.3. При установлении соединения ПУ и ПТС ОРМ должны осуществлять взаимную аутентификацию. В случае невозможности аутентифицировать одну из сторон TCP-соединение разрывается. Для аутентификации ПУ и ПТС ОРМ используются сертификаты в формате Х.509. Для аутентификации ПУ на разных ПТС ОРМ должны быть созданы и использоваться разные сертификаты.
7. Взаимодействие ПТС ОРМ с ПУ должно осуществляться по единому каналу передачи данных, предназначенному для передачи:
1) от ПУ в ПТС ОРМ поисковых запросов и запросов постановки объектов на контроль;
2) от ПТС ОРМ на ПУ результатов выполнения поисковых запросов (в том числе постранично) и запросов постановки объектов на контроль;
3) от ПУ в ПТС ОРМ запросов на получение неформатированных данных (далее - запросы неформатированных данных);
4) от ПТС ОРМ на ПУ ответов на запросы неформатированных данных;
5) от ПУ в ПТС ОРМ специальных запросов в соответствии с приложением N 4 к настоящим Требованиям для получения схемы данных, статуса поисковых запросов в отложенном режиме в соответствии с пунктом 20 настоящего приложения и сигналов о функционировании ПТС ОРМ в соответствии с пунктом 28 настоящего приложения;
6) от ПТС ОРМ на ПУ текущей схемы данных, статуса поисковых запросов в отложенном режиме и сигналов о функционировании ПТС ОРМ;
7) от ПУ в ПТС ОРМ запросов о текущей конфигурации оборудования, системного и прикладного ПО ПТС ОРМ, а также их состоянии (далее - запросы мониторинга);
8) от ПТС ОРМ на ПУ ответов на запросы мониторинга.
8. Единый канал передачи данных создается для подключения к ПТС ОРМ в виде TCP-соединений. Номер порта может передаваться на ПУ на внешних носителях (по умолчанию - 443). Посредством ПТС ОРМ выполняется мониторинг данного порта для создания TCP-соединений с ПУ.
9. ПУ должен осуществлять попытки установления подключения к ПТС ОРМ в соответствии с задаваемым интервалом по предоставленному ПТС ОРМ ТСР-порту.
10. Обмен данными в едином канале передачи данных на прикладном уровне должен осуществляться по протоколам HTTP 1.1 и WebSocket.
11. ПТС ОРМ должны реализовывать четыре конечные точки (endpoints):
1) "/query" - предназначена для получения от ПУ поисковых запросов и специальных запросов в соответствии с приложением N 4 к настоящим Требованиям для получения схемы данных, управления поисковыми запросами в отложенном режиме, а также передачи на ПУ результатов выполнения данных запросов (в том числе постранично) в режиме реального времени в соответствии с пунктом 20 настоящего приложения;
2) "/subscription" - предназначена для получения от ПУ запросов постановки объектов на контроль и передачи на ПУ результатов их выполнения, а также для передачи на ПУ статуса выполнения поисковых запросов ПТС ОРМ, которые выполняются в отложенном режиме в соответствии с пунктом 20 настоящего приложения и сигналов о функционировании ПТС ОРМ в соответствии с пунктом 28 настоящего приложения;
3) "/download" - предназначена для получения от ПУ запросов неформатированных данных и передачи на ПУ результатов выполнения данных запросов;
4) "/metric" - предназначена для получения от ПУ запросов мониторинга и передачи на ПУ результатов выполнения данных запросов.
12. Обмен данными для конечных точек "/query", "/download" и "/metric" должен осуществляться по протоколу HTTP 1.1, для конечной точки "/subscription" - по протоколу WebSocket. ПУ и ПТС ОРМ для конечной точки "/subscription" должны поддерживать сетевое соединение с помощью механизмов протокола WebSocket.
13. Для запросов ПУ и ответов ПТС ОРМ для конечных точек "/query" и "/subscription" должен использоваться язык описания данных и запросов GraphQL в спецификации от 6 октября 2021 г. Для кодирования содержимого запросов и ответов должен применяться формат JSON согласно RFC8259.
14. Требования, предъявляемые к формату передачи данных на языке GraphQL по протоколу WebSocket для конечной точки "/subscription", приведены в приложении N 6 к настоящим Требованиям.
15. Требования, предъявляемые к формату передачи данных для конечной точки "/metric", приведены в приложении N 7 к настоящим Требованиям.
16. Для запросов ПУ и ответов ПТС ОРМ для конечной точки "/download" должны использоваться стандартные сообщения протокола HTTP 1.1.
ПТС ОРМ для данной конечной точки должны поддерживать механизм передачи данных по частям (Chunked Transfer Coding) согласно RFC7230 и механизм частичных запросов согласно RFC7233.
17. Если результаты выполнения поисковых запросов и запросов постановки объектов на контроль для конечных точек "/query" и "/subscription" содержат неформатированные данные (файлы), то ответ ПТС ОРМ должен содержать вместо непосредственно неформатированных данных (файлов) соответствующие ссылки (HTTP URI в полном формате согласно RFC7230 http(s)://<IP-адрес или доменное имя ПТС ОРМ>:<порт>/download/<уникальный путь к файлу>) для каждого файла для конечной точки "/download". ПТС ОРМ должны формировать уникальную ссылку для каждого файла.
18. Для получения неформатированных данных, ссылки на которые содержатся в ответе ПТС ОРМ на поисковый запрос или запрос постановки объектов на контроль, ПУ для каждого файла должен направлять на конечную точку "/download" отдельные (от поисковых запросов) запросы получения неформатированных данных (HTTP GET-запросы) в ПТС ОРМ, содержащие ссылку на запрашиваемые данные.
19. Для получения текущей схемы данных в соответствии с приложением N 2 к настоящим Требованиям ПУ необходимо направить специальный запрос "getSchema" в соответствии с приложением N 4 к настоящим Требованиям на конечную точку "/query". В ответ ПТС ОРМ должны направить схему данных, описанную на языке SDL GraphQL.
20. Поисковые запросы должны выполняться в ПТС ОРМ в двух режимах: режиме реального времени и отложенном режиме (далее - отложенный поисковый запрос). Режим выполнения поисковых запросов определяется ПТС ОРМ в соответствии с установленными временными параметрами согласно пункту 21 настоящих Требований, а также с учетом характера (количества запрашиваемых полей и критериев поиска) запроса, количества данных, хранящихся в ИС АС, и производительностью ПТС ОРМ. Изначально все поисковые запросы от ПУ должны направляться на конечную точку "/query".
21. ПТС ОРМ могут выполнять поисковые запросы только с критериями поиска, заданными на верхнем уровне запроса (без вложенных объектов в соответствии с пунктом 9 приложения N 2 к настоящим Требованиям), при следующих условиях:
- по согласованию с органом федеральной службы безопасности, если среднесуточный объем новых данных, поступающих в ИС АС, составляет от 1 до 10 Гбайт;
- без согласования с органом федеральной службы безопасности, если среднесуточный объем новых данных, поступающих в ИС АС, превышает 10 Гбайт.
22. В режиме реального времени ПТС ОРМ должны поддерживать (не разрывать) сетевое соединение, по которому поступил запрос от ПУ, и результаты выполнения запроса должны передаваться от ПТС ОРМ на ПУ по тому же сетевому соединению, не позднее установленных временных параметров согласно пункту 21 настоящих Требований.
23. Отложенный поисковый запрос выполняется по следующему сценарию:
1) ПУ направляет поисковый запрос ПТС ОРМ на конечную точку "/query".
2) ПТС ОРМ принимают решение о выполнении запроса в отложенном режиме.
3) ПТС ОРМ назначают поисковому запросу уникальный в рамках данной ПТС ОРМ идентификатор.
4) ПТС ОРМ возвращают ПУ идентификатор отложенного поискового запроса и информацию о том, что запрос выполняется в отложенном режиме.
5) ПУ отправляет запрос "statusOfflineRequest" (запрос Subscription языка GraphQL), содержащий полученный от ПТС ОРМ идентификатор отложенного поискового запроса, на конечную точку "/subscription" по протоколу WebSocket в соответствии с приложением N 4 к настоящим Требованиям. ПТС ОРМ в непрерывном режиме (без дополнительных запросов от ПУ) уведомляют ПУ об изменениях статуса выполнения отложенного поискового запроса. Возможные статусы выполнения отложенного запроса:
- NOTSTARTED - запрос получен, но не запущен на выполнение;
- RUNNING - запрос получен и в настоящее время выполняется;
- READY - выполнение запроса завершено, результирующие данные готовы;
- ABORTED - выполнение запроса прервано (на стороне сервера - ПТС ОРМ);
- CANCELED - запрос отменен клиентом (ПУ).
6) когда ПУ получает от ПТС ОРМ уведомление о завершении выполнения отложенного поискового запроса (статус "READY"), то ПУ направляет специальный запрос "getOfflineRequest" в соответствии с приложением N 4 к настоящим Требованиям на конечную точку "/query" с указанием идентификатора запроса. ПУ также может инициировать получение результатов выполнения отложенного запроса постранично аналогично данной процедуре для запросов в режиме реального времени в соответствии с подпунктом 2 пункта 9 приложения N 2 к настоящим Требованиям;
7) в ответ на полученный специальный запрос ПТС ОРМ начинают передавать на ПУ результаты выполнения отложенного поискового запроса в режиме реального времени в форматe JSON*(3). Структура результатов выполнения отложенного поискового запроса должна однозначно соответствовать структуре исходного поискового запроса, направленного ПУ на конечную точку "/query";
8) в момент выполнения отложенного запроса (от момента получения идентификатора запроса от ПТС ОРМ до получения статуса выполнения запроса "READY") ПУ может прервать данную операцию, направив специальный запрос "cancelOfflineRequest" в соответствии с приложением N 4 к настоящим Требованиям на конечную точку "/query" с указанием идентификатора запроса. В ответ ПТС ОРМ должны направить результат выполнения данного специального запроса.
ПТС ОРМ должны удалять промежуточные результаты прерванного отложенного запроса.
24. ПТС ОРМ должны хранить результаты выполнения отложенных запросов заданное максимальное время в соответствии с пунктом 21 настоящих Требований или немедленно их удалять при получении специального запроса.
Для удаления результатов выполнения отложенного поискового запроса на ПТС ОРМ ПУ необходимо направить специальный запрос "delOfflineRequest" в соответствии с приложением N 4 к настоящим Требованиям на конечную точку "/query" с указанием идентификатора запроса. В ответ ПТС ОРМ должны направить результат выполнения данного специального запроса.
25. ПТС ОРМ должны поддерживать два вида постраничной передачи результатов выполнения поисковых запросов: со смещением и курсорную. По согласованию с органом федеральной службы безопасности может быть реализован только один из видов постраничной передачи результатов.
26. ПУ должен направлять запросы постановки объектов на контроль на конечную точку "/subscription" по протоколу WebSocket. После получения запроса ПТС ОРМ направляют ПУ результаты выполнения данного запроса по мере появления новых данных (с момента получения запроса) в ИС АС, соответствующих критериям отбора, заданным в запросе ПУ. Передача результатов выполнения запросов постановки объектов на контроль осуществляется в непрерывном режиме, т. е. без дополнительных запросов от ПУ.
27. Для снятия объектов с контроля ПУ должен направить сообщение "Complete" в соответствии с подпунктом 6 пункта 8 приложения N 6 к настоящим Требованиям на конечную точку "/subscription" по протоколу WebSocket. ПТС ОРМ после получения сообщения должны прекратить отбор данных из ИС АС по критериям, ранее заданным в запросе постановки объекта на контроль, а также прекратить передачу на ПУ результатов выполнения данного запроса.
28. ПТС ОРМ должны обеспечивать контроль функционирования собственных параметров и передачу на ПУ следующих сигналов:
1) "Перезапуск ПО" (RESTARTDB);
2) "Попытка несанкционированного доступа" (UNAUTHORIZEDACCESS);
3) "Критическая ошибка ПО, потеря данных, дальнейшая работа невозможна" (CRITICALERROR);
4) "Серьезная ошибка ПО, потеря данных, но дальнейшая работа возможна" (MAJORERROR);
5) "Незначительная ошибка ПО, данные не потеряны, дальнейшая работа возможна" (MINORERROR);
6) "Изменение схемы данных" (SCHEMACHANGED);
7) "Предупреждение о проблеме с контролируемыми параметрами (метриками)" (METRICALERTS). Для данного сигнала ПТС ОРМ должны возвращать дополнительную информацию о предупреждениях в соответствии с приложением N 4 к настоящим Требованиям. Список контролируемых метрик и предупреждений о проблемах с ними определяется разработчиком ПТС ОРМ и согласовывается с органом федеральной службы безопасности.
Для получения сигналов ПУ необходимо отправить специальный запрос "trap" (запрос Subscription языка GraphQL) на конечную точку "/subscription" по протоколу WebSocket в соответствии с приложением N 4 к настоящим Требованиям. ПТС ОРМ в непрерывном режиме (без дополнительных запросов от ПУ) отправляет ПУ сигналы сразу после их возникновения на ПТС ОРМ. Если в момент получения специального запроса "trap" на ПТС ОРМ есть сигналы, которые не были отправлены ранее ПУ (по причине разрыва соединения или по иным причинам), то ПТС ОРМ должны сразу передать на ПУ все данные сигналы.
29. ПТС ОРМ должны использовать следующие коды ошибок для языка GraphQL:
Код ошибки |
Описание ошибки |
GRAPHQL_PARSE_FAILED |
Запрос на языке GraphQL содержит синтаксическую ошибку |
GRAPHQL_VALIDATION_FAILED |
Запрос на языке GraphQL недействителен для текущей схемы данных |
BAD_USER_INPUT |
Запрос на языке GraphQL содержит некорректное значение для аргумента поля |
OPERATION_RESOLUTION_FAILURE |
Невозможно определить операцию для выполнения из запроса на языке GraphQL |
BAD_REQUEST |
Ошибка возникла до начала анализа запроса на языке GraphQL |
REQUEST_NOT_FOUND |
Отложенный запрос с указанным идентификатором не найден |
NO_REQUEST_RESULT |
Результаты выполнения отложенного запроса с указанным идентификатором не найдены |
REQUEST_TOO_COMPLEX |
Запрос на языке GraphQL содержит критерии поиска (аргументы поля) не только на верхнем уровне запроса в соответствии с пунктом 21 настоящего приложения; может применяться только в ПТС ОРМ, осуществляющих поиск информации в ИС АС со среднесуточным объемом новых данных свыше 1 Гбайт) |
INTERNAL_SERVER_ERROR |
Внутренняя ошибка. Возвращается в случае, если ни один из вышеуказанных кодов не подходит |
30. Все запросы мониторинга и неформатированных данных должны выполняться в режиме реального времени.
Приложение N 2
к Требованиям к сетям и средствам связи собственников
или иных владельцев технологических сетей связи,
имеющих номер автономной системы, для проведения
уполномоченными государственными органами, осуществляющими
оперативно-разыскную деятельность или обеспечение безопасности
Российской Федерации, в случаях, установленных федеральными законами,
мероприятий в целях реализации возложенных на них задач,
утвержденным приказом Министерства цифрового развития,
связи и массовых коммуникаций Российской Федерации
от __.__.______ N ______
ТРЕБОВАНИЯ, предъявляемые к схеме данных ПТС ОРМ и выполнению запросов от ПУ
1. Данные, хранящиеся в ИС АС, должны быть описаны с помощью схемы данных на языке SDL GraphQL.
2. Схема данных должна полностью описывать данные, хранящиеся в ИС АС.
3. Произвольный тип "А" в схеме данных имеет связь с произвольным типом "В", если тип "А" содержит поле типа "В" или поле, являющееся списком типа "В".
4. Произвольный тип "А" в схеме данных имеет двухстороннюю связь с произвольным типом "В", если тип "А" связан с типом "В" и тип "В" связан с типом "А".
5. Для схемы данных определяется перечень базовых типов. Базовым типом называется тип данных на языке GraphQL, содержащий информацию, которая может быть доступна для поиска в ПТС ОРМ по запросам ПУ. Перечень базовых типов отражает перечень идентифицирующих признаков объектов физического мира (например, номер паспорта, номер телефона, банковские реквизиты, государственный регистрационный номер транспортного средства и т. д.). Перечень базовых типов и их определения на языке GraphQL приведены в приложении N 3 к настоящим Требованиям.
6. Для схемы данных определяется перечень сервисных типов. Сервисным типом называется тип данных на языке GraphQL, отражающий информацию о схеме данных, или описывающий HTTP URI для неформатированных данных, или предназначенный для получения статуса отложенных поисковых запросов или сигналов о функционировании ПТС ОРМ. Перечень сервисных типов, их определения и запросы для доступа к информации на языке GraphQL приведены в приложении N 4 к настоящим Требованиям.
7. Пользовательским типом называется тип данных на языке GraphQL, не являющийся базовым, сервисным типом или встроенным (build-in) типом языка GraphQL. Пользовательские типы предназначены для описания данных, содержащихся в ИС АС и отличных от данных, описываемых базовыми типами. Требования к пользовательским типам приведены в пункте 8 настоящего приложения.
8. Схема данных в части базовых, пользовательских и сервисных типов должна удовлетворять следующим требованиям:
а) каждое поле пользовательского типа, которое отражает идентифицирующий признак объекта физического мира и будет доступно в качестве критерия поиска в ПТС ОРМ по запросам ПУ, должно представляться базовым типом (или его списком);
б) поля пользовательского типа, представляющие собой ссылки (HTTP URI) на неформатированные данные (файлы), должны представляться сервисным типом "Media", определенным в приложении N 4 к настоящим Требованиям;
в) остальные поля пользовательских типов, за исключением указанных в подпунктах 1 и 2 настоящего пункта, должны представляться встроенными типами языка GraphQL или любыми другими пользовательскими типами, определенными в схеме данных;
г) для каждого пользовательского типа, имеющего хотя бы одно поле базового типа, или связанного с другим пользовательским типом, имеющим хотя бы одно поле базового типа, должны быть определены следующие объекты языка GraphQL: тип для представления результатов выполнения поисковых запросов, входной объект для задания параметров поиска (далее - входной объект);
д) тип для представления результатов выполнения поисковых запросов должен иметь следующую структуру:
Имя поля |
Тип поля |
Назначение поля |
cursor |
String |
значение курсора для последнего элемента списка (поле result) с результатами выполнения поискового запроса для данного пользовательского типа |
hasNextPage |
Boolean |
признак наличия следующей страницы с результатами выполнения поискового запроса для данного пользовательского типа (может использоваться с любым видом постраничного получения результатов выполнения запроса) |
result |
список соответствующего пользовательского типа |
результат выполнения поискового запроса для данного пользовательского типа |
Шаблон типа для представления результатов выполнения поисковых запросов:
type {{UserTypeResult}} {
cursor: String
hasNextPage: Boolean
result: [{{UserType}}!]
}
{{UserTypeResult}} - произвольное имя типа для представления результатов выполнения поисковых запросов;
{{UserType}} - имя пользовательского типа, для которого определен тип {{UserTypeResult}};
е) каждый входной объект для пользовательского типа должен иметь следующую структуру:
Имя поля |
Тип поля |
Назначение поля |
and |
список исходных входных объектов |
для задания параметров поиска с логической функцией "И" |
or |
список исходных входных объектов |
для задания параметров поиска с логической функцией "ИЛИ" |
not |
исходный входной объект |
для задания параметров поиска с логической функцией "НЕ" |
все имена полей пользовательского типа, представленные базовыми типами |
соответствующие входные объекты для базовых типов, определенные в приложении N 5 к настоящим Требованиям |
для задания параметров поиска конкретных полей пользовательского типа, представленных базовыми типами |
Шаблон входного объекта для пользовательского типа:
input {{UserTypeFilterInput}} {
and: [{{UserTypeFilterInput}}]
or: [{{UserTypeFilterInput}}]
not: {{UserTypeFilterInput}}
{{baseField1}}: {{BaseFilterInput1}}
...
{{baseFieldN}}: {{BaseFilterInputN}}
}
{{UserTypeFilterInput}} - произвольное имя входного объекта для пользовательского типа;
{{baseField1}...{{baseFieldN}} - поля пользовательского типа, представленные одним из базовых типов;
{{baseFilterInput1}}...{{baseFilterInputN}} - входные объекты для базовых типов, определенные в приложении N 5 к настоящим Требованиям;
ж) все пользовательские типы, их поля и аргументы должны иметь описание на русском языке;
з) связь между двумя произвольными пользовательскими типами должна быть двухсторонней, за исключением случаев, если один из пользовательских типов не имеет ни одного поля базового типа;
и) схема данных должна содержать все сервисные типы из перечня, определенного в приложении N 4 к настоящим Требованиям.
9. Схема данных в части стандартных типов Query, Subscription (определяют доступные данные и параметры для поисковых запросов и запросов постановки объектов на контроль) языка GraphQL должна удовлетворять следующим требованиям:
1) тип Query должен иметь поле "request" для задания поисковых запросов:
request: QueryMessage!
2) тип QueryMessage должен иметь следующую структуру:
Имя поля |
Тип поля |
Назначение поля |
requestID |
String |
идентификатор запроса |
offline |
Boolean |
признак выполнения запроса в отложенном режиме |
maxPageSize |
Int |
максимальное количество элементов в списке с результатами выполнения поискового запроса для одной страницы, которое поддерживает ПТС ОРМ |
все имена пользовательских типов, имеющие хотя бы одно поле базового типа |
тип для представления результатов выполнения поисковых запросов, соответствующий пользовательскому типу |
задание параметров поиска и постраничной передачи результатов поиска для соответствующего пользовательского типа |
Каждое поле типа QueryMessage, заданное списком пользовательского типа, должно иметь следующие аргументы:
- filter - задает параметры поиска и представляется соответствующим входным объектом для данного пользовательского типа;
- offset - задает начальное смещение для постраничной передачи результатов;
- limit - задает максимальное количество элементов на одной странице при постраничной передаче результатов, но не более значения maxPageSize;
- cursor - значение курсора при использовании курсорной постраничной передачи результатов.
Аргументы offset и limit должны использоваться для постраничной передачи результатов со смещением, аргументы limit и cursor - для курсорной постраничной передачи результатов.
Шаблон типа QueryMessage:
type QueryMessage {
requestID: String!
offline: Boolean!
maxPageSize: Int
{{userType1}}(filter: {{UserTypeFilterInput1}}!, offset: Int, limit: Int, cursor: String): {{UserTypeResult1}}!
...
{{userTypeN}}(filter: {{UserTypeFilterInputN}}!, offset: Int, limit: Int, cursor: String): {{UserTypeResultN}}!
}
{{userType1}}...{{userTypeN}} - имена пользовательских типов, имеющих хотя бы одно поле базового типа;
{{UserTypeResult1}}...{{UserTypeResultN}} - имена типов для представления результатов выполнения поисковых запросов, соответствующие пользовательским типам;
{{UserTypeFilterInput1}}...{{UserTypeFilterInputN}} - входные объекты, соответствующие пользовательским типам;
3) тип Subscription должен иметь поле "request" типа SubscriptionMessage для задания запросов постановки объектов на контроль.
request: SubscriptionMessage!
4) тип SubscriptionMessage должен иметь следующую структуру:
Имя поля |
Тип поля |
Назначение поля |
все имена пользовательских типов, имеющие хотя бы одно поле базового типа |
список пользовательского типа |
задание параметров постановки объектов на контроль для соответствующего пользовательского типа |
По согласованию с органом федеральной службы безопасности тип SubscriptionMessage может содержать не все поля с именами пользовательских типов, имеющих хотя бы одно поле базового типа.
Каждое поле типа SubscriptionMessage должно иметь аргумент "filter" для задания параметров постановки объектов на контроль и представляться соответствующим входным объектом для данного пользовательского типа.
Шаблон типа SubscriptionMessage:
type SubscriptionMessage {
{{userType1}}(filter: {{UserTypeFilterInput1}}!): [{{UserType1}}!]
...
{{userTypeN}}(filter: {{UserTypeFilterInputN}}!): [{{UserTypeN}}]!
}
{{userType1}}...{{userTypeN}} - имена пользовательских типов, имеющих хотя бы одно поле базового типа;
{{UserTypeFilterInput1}}...{{UserTypeFilterInputN}} - входные объекты 1-к-1, соответствующие пользовательским типам;
5) типы Query и Subscription должны также содержать все запросы, соответствующие сервисным типам, приведенным в приложении N 4 к настоящим Требованиям.
10. ПТС ОРМ должны использовать актуальные перечни базовых, сервисных типов и входных объектов для поиска.
11. Использование базовых, сервисных типов и входных объектов для задания параметров поиска, не приведенных в приложениях N 3, N 4, N 5 к настоящим Требованиям, не допускается.
12. Именование всех пользовательских типов и их полей должно удовлетворять следующим требованиям:
- использование символа подчеркивания "_" в именах типов и их полей не допускается;
- имена пользовательских типов пишутся с заглавной буквы и могут состоять из нескольких слов, написанных слитно без пробелов, при этом каждое слово с заглавной буквы;
- имена полей пользовательских типов пишутся со строчной буквы и могут состоять из нескольких слов, написанных слитно без пробелов, при этом каждое слово кроме первого с заглавной буквы.
Приложение N 3
к Требованиям к сетям и средствам связи собственников
или иных владельцев технологических сетей связи,
имеющих номер автономной системы, для проведения
уполномоченными государственными органами, осуществляющими
оперативно-разыскную деятельность или обеспечение безопасности
Российской Федерации, в случаях, установленных федеральными законами,
мероприятий в целях реализации возложенных на них задач,
утвержденным приказом Министерства цифрового развития,
связи и массовых коммуникаций Российской Федерации
от __.__.______ N ______
ПЕРЕЧЕНЬ
базовых типов для описания схемы данных ПТС ОРМ
N п/п |
Описание |
Базовый тип |
1. |
Идентификатор мобильного абонента |
" Базовый тип идентификатора мобильного абонента " type ImsiBase { " Идентификатор мобильного абонента " imsi: String! } |
2. |
Идентификатор мобильной станции |
" Базовый тип идентификатора мобильной станции " type ImeiBase { " Идентификатор мобильной станции " imei: String! } |
3. |
Номер абонента сети сотовой связи |
" Базовый тип номера абонента сети сотовой связи " type MsisdnBase { " Номер абонента сети сотовой связи " msisdn: String! } |
4. |
Код страны, в которой находится оператор мобильной связи |
" Базовый тип кода страны, в которой находится оператор связи " type MccBase { " Код страны " mcc: Int! } |
5. |
Код оператора связи |
" Базовый тип кода оператора связи " type MncBase { " Код оператора связи " mnc: Int! } |
6. |
Код географической зоны, которая обслуживается одним контроллером базовых станций |
" Базовый тип кода географической зоны, обслуживаемой одним контроллером базовых станций " type LacBase { " Код географической зоны " lac: Int! } |
7. |
Идентификатор сектора базовой станции |
" Базовый тип идентификатора сектора базовой станции " type CellBase { " Идентификатор сектора базовой станции " cell: Int! } |
8. |
Адрес электронной почты |
" Базовый тип адреса электронной почты " type EmailBase { " Адрес электронной почты " email: String! } |
9. |
Адресная информация |
" Базовый тип адресных данных " type AddressBase { " Неструктурированный адрес " address: String " Почтовый индекс, zip-код " zip: String " Страна " county: String " Область " region: String " Район, муниципальный округ " zone: String " Город, посёлок, деревня " city: String " Улица " street: String " Дом, строение " building: String " Корпус " buildsect: String " Квартира, офис " apartment: String } |
10. |
Паспортные данные |
" Базовый тип паспортных данных " type PassportBase { " Серия паспорта " series: String! " Номер паспорта " number: String! } |
11. |
Фамилия, имя, отчество |
" Базовый тип ФИО " type PersonBase { " Неструктурированная информация о ФИО " fullName: String! " Имя " name: String " Отчество " middleName: String " Фамилия " lastName: String } |
12. |
Номер удостоверения водителя транспортного средства |
" Базовый тип номера удостоверения водителя транспортного средства " type DrivingLicenseNumberBase { " Номер удостоверения водителя транспортного средства " drivingLicenseNumber: String! } |
13. |
Государственный регистрационный номер транспортного средства |
" Базовый тип государственного регистрационного номера транспортного средства " type VehicleGosNumberBase { " Государственный регистрационный номер транспортного средства " vehicleGosNumber: String! } |
14. |
Идентификационный номер налогоплательщика |
" Базовый тип идентификационного номера налогоплательщика " type InnBase { " Идентификационный номер налогоплательщика " inn: String! } |
15. |
Информация о дате и времени |
" Базовый тип информации о дате и времени " type DateTimeBase { " Информация о дате и времени в расширенном формате местного времени с разницей со Всемирным координированным временем (UTC) в соответствии с ГОСТ Р 7.0.64-2018 (ИСО 8601:2004)*(4) YYYY-MM-DDThh:mm:ss " utc: String! } |
16. |
Геометрические пространственно-временные данные: точка, массив точек, информация о месте и времени, полигон, мультиполигон, гео-трек |
" Базовый тип пространственной информации: точка " type PointBase { " Долгота " longitude: Float! " Широта " latitude: Float! } " Базовый тип пространственной информации: последовательность точек (линия) " type LineBase { " Линия - последовательность точек в пространстве. " points: [PointBase!]! } " Базовый тип пространственно-временной информации: точка в пространстве с привязкой к дате и времени " type PointTimeBase { " Точка в пространстве " point: PointBase! " Информация о дате и времени " time: DateTimeBase! } " Базовый тип пространственной информации: полигон " type PolygonBase { " Последовательность линий " lines: [LineBase!]! } " Базовый тип пространственной информации: мультиполигон " type MultiPolygonBase { " Последовательность полигонов " polygons: [PolygonBase!]! } " Базовый тип пространственно-временной информации: трек " type GeoTrackBase { " Последовательность точек в пространстве с привязкой к дате и времени " pointsInTime: [PointTimeBase!]! } |
17. |
Сведения о юридических лицах и индивидуальных предпринимателях |
" Базовый тип сведений о юридических лицах и индивидуальных предпринимателях " type OrganizationInfoBase { " Полное наименование " nameFull: String " Сокращенное наименование " nameSmall: String " Государственный регистрационный номер ОГРН и ОГРНИП " grn: GRNBase! " Идентификационный номер налогоплательщика " inn: InnBase " Информация о банковских данных " bankInfo: BankAccountInfoBase " Адрес (место нахождения) " address: AddressBase " Информация о номере телефона " msisdn: [MsisdnBase!] " Web-сайт " webSite: URLBase " Электронная почта " email: EmailBase " Дата регистрации " dateRegistration: DateTimeBase! " Сведения о лице, имеющем право без доверенности действовать от имени юридического лица " representative: OrganizationRepresentativeBase! " ОКВЭД " okved: [String!] " ЕГРЮЛ " egrul: String " ЕГРИП " egrip: String }
" Базовый тип государственного регистрационного номера ОГРН и ОГРНИП " type GRNBase { " Государственный регистрационный номер - ОГРН и ОГРНИП " grn: String! }
" Базовый тип сведений об учредителях (участниках) юридического лица, лицах, имеющих право без доверенности действовать от имени юридического лица " type OrganizationRepresentativeBase { " Фамилия, имя, отчество представителя " name: PersonBase! " Идентификационный номер налогоплательщика " inn: InnBase! " Должность " position: String! } |
18. |
Банковские данные |
" Базовый тип банковских данных " type BankAccountInfoBase { " Наименование банка " bankName: String " Номер счёта " account: String " Корреспондентский счет " corrAccount: String " Номер карты " cardNumber: String! " Адрес банка " bankAddress: AddressBase " Банковский идентификационный код " rcbic: String " Код причины постановки на учет кредитной организации предназначен для идентификации юридического лица, которое является налогоплательщиком " kpp: String }
" Базовый тип банковских переводов " type BankTransferInfoBase { " Сумма перевода " amount: String! " Отправитель перевода " from: BankAccountInfoBase " Получатель перевода " to: BankAccountInfoBase " Дата и время перевода " data: DateTimeBase! } |
19. |
IP-адрес |
" Базовый тип IP-адреса " type IpAddressBase { " IP-адрес " ip: String! " Маска подсети в виде префикса " mask: Int " Тип IP-адреса: ipv4, ipv6 " type: IpType! }
enum IpType { IPV4 IPV6 } |
20. |
Информация об участнике сетевого соединения |
" Базовый тип информации об участнике сетевого соединения " type NetworkPeerBase { " Информация о IP-адресе " ip: IpAddressBase! " Номер порта " port: Int! " Номер протокола согласно RFC3232 " protocolNumber: Int } |
21. |
URL-адрес |
" Базовый тип URL-адреса " type URLBase { " URL-адрес " url: String! } |
22. |
Доменное имя |
" Базовый тип доменного имени " type DomainNameBase { " Доменное имя " domainName: String! } |
23. |
Имя/идентификатор пользователя |
" Базовый тип имени/идентификатора пользователя " type LoginBase { " Имя/идентификатор пользователя " login: String! } |
Приложение N 4
к Требованиям к сетям и средствам связи собственников
или иных владельцев технологических сетей связи,
имеющих номер автономной системы, для проведения
уполномоченными государственными органами, осуществляющими
оперативно-разыскную деятельность или обеспечение безопасности
Российской Федерации, в случаях, установленных федеральными законами,
мероприятий в целях реализации возложенных на них задач,
утвержденным приказом Министерства цифрового развития,
связи и массовых коммуникаций Российской Федерации
от __.__.______ N ______
ПЕРЕЧЕНЬ
сервисных типов и соответствующих им запросов для описания схемы данных ПТС ОРМ
N п/п |
Описание типа |
Сервисный тип |
Запрос |
Описание запроса |
1 |
Схема данных, описанная на языке SDL |
Отсутствует |
type Query { " Запрос схемы данных " getSchema: String! } |
Запрос схемы данных, описанной на языке SDL GraphQL |
2 |
Идентификатор отложенного запроса |
Отсутствует |
type Query { " Запрос результата выполнения отложенного запроса " getOfflineRequest(requestID: String!, offset: Int, limit: Int, cursor: String): QueryMessage! } |
Запрос результата выполнения отложенного запроса по его идентификатору. Дополнительно может быть выполнено постраничное получение результатов с использованием аргументов: offset, limit и cursor в соответствии с подпунктом 2 пункта 9 приложения N 2 к настоящим Требованиям. Ответом являются данные (результат выполнения запроса), представленные в формате JSON в соответствии с изначальным Graph запросом. Если отложенный запрос с указанным идентификатором не найден, то должно быть возвращено сообщение об ошибке GraphQL с кодом REQUEST_NOT_FOUND. Если отложенный запрос еще не выполнен или результаты его выполнения уже удалены, то должно быть возвращено сообщение об ошибке GraphQL с кодом NO_REQUEST_RESULT. |
type Query { " Удаление результатов отложенного запроса " delOfflineRequest(requestID: String!): Boolean! } |
Удаление результатов отложенного запроса по его идентификатору. Если удаление произошло успешно, то должен быть возвращен ответ True. Если удаление не удалось выполнить, то должен быть возвращен ответ False и описание ошибки GraphQL. Если отложенный запрос с указанным идентификатором не найден, то должно быть возвращено сообщение об ошибке GraphQL с кодом REQUEST_NOT_FOUND. |
|||
type Query { " Отмена выполнения отложенного запроса " cancelOfflineRequest(requestID: String!): Boolean! } |
Прерывание (отмена) выполнения отложенного запроса по его идентификатору. Если прерывание произошло успешно, то должен быть возвращен ответ True. Если прерывание не удалось выполнить, то должен быть возвращен ответ False и описание ошибки GraphQL. Если отложенный запрос с указанным идентификатором не найден, то должно быть возвращено сообщение об ошибке GraphQL с кодом REQUEST_NOT_FOUND. |
|||
3 |
Информация о статусе выполнения отложенного запроса |
" Сервисный тип для информации о статусе выполнения отложенного запроса " type RequestInfo { " Идентификатор отложенного запроса " requestID: String! " Статус отложенного запроса " status: RequestStatus " Дата и время начала выполнения отложенного запроса " startsAt: DateTimeBase }
" Возможные статусы выполнения отложенного запроса " enum RequestStatus { " Запрос еще не выполняется " NOTSTARTED " Запрос выполняется " RUNNING " Запрос выполнен " READY " Выполнение запрос прервано ПТС ОРМ " ABORTED " Запрос отменен ПУ " CANCELED } |
type Subscription { " Запрос статуса отложенного запроса " statusOfflineRequest(requestID: String!): RequestInfo! } |
Запрос статуса отложенного запроса по его идентификатору. Ответом является сообщение типа RequestInfo. Если отложенный запрос с указанным идентификатором не найден, то должно быть возвращено сообщение об ошибке GraphQL с кодом REQUEST_NOT_FOUND. |
4 |
HTTP URI для неформатированных данных |
" Сервисный тип для неформатированных данных " type Media { " HTTP URI для неформатированных данных в полном формате согласно RFC7230 http(s)://<IP-адрес или доменное имя ПТС ОРМ>:<порт>/download/<уникальный путь к файлу> " link: String! } |
Отсутствует |
Отсутствует |
5 |
Сигналы о функционировании ПТС ОРМ |
" Сервисный тип для сигналов о функционировании ПТС ОРМ " type Trap { " Тип сигнала " type: TrapType! " Описание сигнала " message: String " Дата и время возникновения сигнала " startsAt: DateTimeBase! " Дополнительная информация о предупреждениях для контролируемых метрик. Только для сигнала типа METRICALERTS " metricalerts: MetricAlerts }
" Возможные типы сигналов " enum TrapType { " Перезапуск ПО " RESTARTDB " Попытка несанкционированного доступа " UNAUTHORIZEDACCESS " Критическая ошибка ПО " CRITICALERROR " Серьезная ошибка ПО " MAJORERROR " Незначительная ошибка ПО " MINORERROR " Изменение схемы данных " SCHEMACHANGED " Предупреждение о проблеме с контролируемой метрикой " METRICALERTS }
" Дополнительная информация о предупреждении " type MetricAlerts { " Ключ, определяющий группу предупреждений " groupKey: String! " Статус предупреждения " status: AlertStatus! " Определяет получателя предупреждения " receiver: String! " Метки, по которым сгруппированы предупреждения " groupLabels: [KeyValueRef!]! " Общие метки для всех предупреждений " commonLabels: [KeyValueRef!]! " Общие описания для всех предупреждений " commonAnnotations: [KeyValueRef!]! " URL менеджера предупреждений " externalURL: String! " Список предупреждений " alerts: [Alert!]! }
" Возможные статусы предупреждений " enum AlertStatus { " Проблема решена " RESOLVED " Проблема не решена " FIRING }
" Предупреждение о проблеме с контролируемой метрикой " type Alert { " Статус предупреждения " status: AlertStatus! " Метки для предупреждения " labels: [KeyValueRef!]! " Описания для предупреждения " annotations: [KeyValueRef!]! " Дата и время возникновения предупреждения " startsAt: DateTimeBase! " Дата и время решения проблемы, в результате которой возникло предупреждение " endsAt: DateTimeBase! " URL сущности, в которой возникла проблема " generatorURL: String! " Идентификатор предупреждения " fingerprint: String! }
" Ключ-значение " type KeyValueRef { " Ключ " key: String! " Значение " value: String! } |
type Subscription { " Запрос получения сигналов о функционировании ПТС ОРМ " trap: Trap! } |
Запрос получения сигналов о функционировании ПТС ОРМ. Ответом является сообщение типа Trap. Если тип сигнала "Предупреждение о проблеме с контролируемыми параметрами (METRICALERTS)", то ПТС ОРМ должны возвращать дополнительную информацию о предупреждениях в поле metricalerts. |
Приложение N 5
к Требованиям к сетям и средствам связи собственников
или иных владельцев технологических сетей связи,
имеющих номер автономной системы, для проведения
уполномоченными государственными органами, осуществляющими
оперативно-разыскную деятельность или обеспечение безопасности
Российской Федерации, в случаях, установленных федеральными законами,
мероприятий в целях реализации возложенных на них задач,
утвержденным приказом Министерства цифрового развития,
связи и массовых коммуникаций Российской Федерации
от __.__.______ N ______
ПЕРЕЧЕНЬ
входных объектов для задания параметров поиска
1. В схеме данных для задания параметров поиска должны быть описаны входные объекты (Input Objects) на языке GraphQL для каждого пользовательского типа, имеющего хотя бы одно поле базового типа, или связанного с другим пользовательским типом, имеющим хотя бы одно поле базового типа.
2. Для описания входных объектов, соответствующих пользовательским типам, должны использоваться входные объекты для базовых типов, приведенные в настоящем приложении.
3. Каждый входной объект для базового типа содержит поля "and", "or" и "not" (соответствуют логическим функциям "И", "ИЛИ", "НЕ"), а также может содержать поля для соответствующих функций, приведенных в таблице N 1 настоящего приложения. В случае, если числовая функция применяется к строкам, то на множестве строк используется лексикографический порядок.
4. Перечень входных объектов для базовых типов и доступные для них функции приведены в таблице N 2 настоящего приложения.
Таблица N 1.
N п/п |
Функция |
Пример использования |
Описание |
|
1 |
Операции сравнения |
lt |
Для целочисленных значений: lt: 999
Для дробный значений: lt: 999.99
Для строковых значений: lt: "999" |
Меньше, чем |
2 |
le |
le: 999 |
Меньше либо равно |
|
3 |
eq |
eq: 999 |
Равно |
|
4 |
in |
in: [0, 999] |
В [списке] |
|
5 |
between |
between: { min: 0, max: 999 } |
Между значениями min и max |
|
6 |
ge |
ge: 999 |
Больше либо равно |
|
7 |
gt |
gt: 999 |
Больше |
|
8 |
Регулярные выражения |
regexp |
regexp: "\\d\\d/\\d\\d/\\d{4}" |
Регулярное выражение в формате POSIX Basic Regular Expression |
9 |
Поиск по тексту |
allofterms |
allofterms: "Москва, Тверская" |
Соответствие строкам, содержащим все указанные термы в произвольном порядке, без учета регистра |
10 |
anyofterms |
anyofterms: "Москва, Тверская" |
Соответствие строкам, содержащим любой из указанных термов в произвольном порядке, без учета регистра |
|
11 |
alloftext |
alloftext: "Москва, Тверская" |
Полнотекстовый поиск по всему полю |
|
12 |
anyoftext |
anyoftext: "Москва, Тверская" |
Полнотекстовый поиск по любой части поля |
|
13 |
Геопоиск |
near |
near: { distance: 1000.0, point: { longitude: 55.7506539, latitude: 37.6195138 } } |
Соответствие объектам, в которых предикат находится не более, чем на расстоянии distance метров от точки point |
14 |
within |
within: { polygon: { lines: [ { points: [ { longitude: 55.0, latitude: 37.0 }, { longitude: 56.0, latitude: 37.0 }, { longitude: 56.0, latitude: 33.0 }, { longitude: 55.0, latitude: 38.0 } ] } ] } } |
Соответствие объектам, предикат которых находится в пределах полигона, заданного в качестве аргумента |
|
15 |
contains |
contains: { polygon: { lines: [ { points: [ { longitude: 55.0, latitude: 37.0 }, { longitude: 56.0, latitude: 37.0 }, { longitude: 56.0, latitude: 33.0 }, { longitude: 55.0, latitude: 38.0 } ] } ] } } |
Соответствует объектам, предикат которых содержит указанные точку или полигон |
|
16 |
intersects |
intersects: { polygon: { lines: [ { points: [ { longitude: 55.0, latitude: 37.0 }, { longitude: 56.0, latitude: 37.0 }, { longitude: 56.0, latitude: 33.0 }, { longitude: 55.0, latitude: 38.0 } ] } ] } } |
Соответствует объектам, предикат которых имеет непустое пересечение с указанным полигоном или мультиполигоном |
|
17 |
Геопоиск с учетом времени события, используется для геотрека. |
nearTime
|
nearTime: { distance: 1000.0, point: { longitude: 55.7506539, latitude: 37.6195138 }, time: { utc: { between: { min: { utc: "2020-12-19T16:30:00+03:00" } max: { utc: "2020-12-19T16:40:00+03:00" } } } } } |
Соответствие объектам, в которых предикат находится не более, чем на расстоянии distance от точки point, при этом время, в которое предикат находился в данной области, ограничено соответствующим фильтром по времени |
18 |
withinTime |
withinTime: { polygon: { lines: [ { points: [ { longitude: 55.0, latitude: 37.0 }, { longitude: 56.0, latitude: 37.0 }, { longitude: 56.0, latitude: 33.0 }, { longitude: 55.0, latitude: 38.0 } ] } ] }, time: { utc: { between: { min: { utc: "2020-12-19T16:30:00+03:00" } max: { utc: "2020-12-19T16:40:00+03:00" } } } } } |
Соответствие объектам, предикат которых находится в пределах полигона, заданного в качестве аргумента, при этом время, в которое предикат находился в данной области, ограничено соответствующим фильтром по времени |
|
19 |
intersectsTime |
intersectsTime: { polygon: { lines: [ { points: [ { longitude: 55.0, latitude: 37.0 }, { longitude: 56.0, latitude: 37.0 }, { longitude: 56.0, latitude: 33.0 }, { longitude: 55.0, latitude: 38.0 } ] } ] }, time: { utc: { between: { min: { utc: "2020-12-19T16:30:00+03:00" } max: { utc: "2020-12-19T16:40:00+03:00" } } } } } |
Соответствует объектам, предикат которых имеет непустое пересечение с заданным полигоном или мультиполигоном, при этом время, в которое предикат находился в данной области, ограничено соответствующим фильтром по времени |
|
20 |
intersectsTrack |
intersectsTrack: { geotrack: { pointsInTime: [ { point: { longitude:55.7506539, latitude: 37.6195138 }, time: { utc: "2020-12-19T16:50:00+03:00" } }, { point: { longitude:55.8224554, latitude: 37.7201284 }, time: { utc: "2020-12-19T16:40:00+03:00" } } ] }, deltaTime: { second: 600 }, distance: 1000.0 } |
Соответствует объектам, предикат которых имеет непустое пересечение с заданным геотреком с точностью по времени deltatime секунд и точностью по расстоянию distance метров |
Таблица N 2.
N п/п |
Базовый тип/скалярный тип |
Входные объекты для задания параметров поиска |
1 |
type ImsiBase |
" Входной объект для базового типа идентификатора мобильного абонента " input ImsiBaseFilter { " Фильтр для идентификатора мобильного абонента " imsi: StringRegExpExactFilter and: [ImsiBaseFilter] or: [ImsiBaseFilter] not: ImsiBaseFilter } |
2 |
type ImeiBase |
" Входной объект для базового типа идентификатора мобильной станции " input ImeiBaseFilter { " Фильтр для идентификатора мобильной станции " imei: StringRegExpExactFilter and: [ImeiBaseFilter] or: [ImeiBaseFilter] not: ImeiBaseFilter } |
3 |
type MsisdnBase |
" Входной объект для базового типа номера абонента сети сотовой связи " input MsisdnBaseFilter { " Фильтр для номера абонента сети сотовой связи " msisdn: StringRegExpExactFilter and: [MsisdnBaseFilter] or: [MsisdnBaseFilter] not: MsisdnBaseFilter } |
4 |
type MccBase |
" Входной объект для базового типа кода страны, в которой находится оператор связи " input MccBaseFilter { " Фильтр для кода страны, в которой находится оператор связи " mcc: IntFilter and: [MccBaseFilter] or: [MccBaseFilter] not: MccBaseFilter } |
5 |
type MncBase |
" Входной объект для базового типа кода оператора связи " input MncBaseFilter { " Фильтр для кода оператора связи " mnc: IntFilter and: [MncBaseFilter] or: [MncBaseFilter] not: MncBaseFilter } |
6 |
type LacBase |
" Входной объект для базового типа кода географической зоны, обслуживаемой одним контроллером базовых станций " input LacBaseFilter { " Фильтр для кода географической зоны, обслуживаемой одним контроллером базовых станций " lac: IntFilter and: [LacBaseFilter] or: [LacBaseFilter] not: LacBaseFilter } |
7 |
type CellBase |
" Входной объект для базового типа идентификатора сектора базовой станции " input CellBaseFilter { " Фильтр для идентификатора сектора базовой станции " cell: IntFilter and: [CellBaseFilter] or: [CellBaseFilter] not: CellBaseFilter } |
8 |
type EmailBase |
" Входной объект для базового типа адреса электронной почты " input EmailBaseFilter { " Фильтр для адреса электронной почты " email: StringRegExpExactFilter and: [EmailBaseFilter] or: [EmailBaseFilter] not: EmailBaseFilter } |
9 |
type AddressBase |
" Входной объект для базового типа структурированных адресных данных " input AddressBaseFilter { " Фильтр для неструктурированного адреса " address: StringRegExpFullTextFilter " Фильтр для почтового индекса, zip-кода " zip: StringExactFilter " Фильтр для страны " county: StringExactFilter " Фильтр для области " region: StringExactFilter " Фильтр для района, муниципального округа " zone: StringExactFilter " Фильтр для города, посёлка, деревни " city: StringExactFilter " Фильтр для улицы " street: StringExactFilter " Фильтр для дома, строения " building: StringExactFilter " Фильтр для корпуса " buildsect: StringExactFilter " Фильтр для квартиры, офиса " apartment: StringExactFilter and: [AddressBaseFilter] or: [AddressBaseFilter] not: AddressBaseFilter } |
10 |
type PassportBase |
" Входной объект для базового типа паспортных данных " input PassportBaseFilter { " Фильтр для номера паспорта " number: StringRegExpExactFilter " Фильтр для серии паспорта " series: StringRegExpExactFilter and: [PassportBaseFilter] or: [PassportBaseFilter] not: PassportBaseFilter } |
11 |
type PersonBase |
" Входной объект для базового типа ФИО " input PersonBaseFilter { " Фильтр для неструктурированной информации о ФИО " fullName: StringTermFullTextFilter " Фильтр для имени " name: StringTermExactFilter " Фильтр для отчества " middleName: StringTermExactFilter " Фильтр для фамилии " lastName: StringTermExactFilter and: [PersonBaseFilter] or: [PersonBaseFilter] not: PersonBaseFilter } |
12 |
type DrivingLicenseNumberBase |
" Входной объект для базового типа номера удостоверения водителя транспортного средства " input DrivingLicenseNumberBaseFilter { " Фильтр для номера удостоверения водителя транспортного средства " drivingLicenseNumber: StringTermExactFilter and: [DrivingLicenseNumberBaseFilter] or: [DrivingLicenseNumberBaseFilter] not: DrivingLicenseNumberBaseFilter } |
13 |
type VehicleGosNumberBase |
" Входной объект для базового типа государственного регистрационного номера транспортного средства " input VehicleGosNumberBaseFilter { " Фильтр для государственного регистрационного номера транспортного средства " vehicleGosNumber: StringTermExactFilter and: [VehicleGosNumberBaseFilter] or: [VehicleGosNumberBaseFilter] not: VehicleGosNumberBaseFilter } |
14 |
type InnBase |
" Входной объект для базового типа идентификационного номера налогоплательщика " input InnBaseFilter { " Фильтр для значения идентификационного номера налогоплательщика " inn: StringTermExactFilter and: [InnBaseFilter] or: [InnBaseFilter] not: InnBaseFilter } |
15 |
type DateTimeBase |
" Входной объект для базового типа информации о дате и времени " input DateTimeBaseFilter { " Фильтр для информации о дате и времени в расширенном формате местного времени с разницей со Всемирным координированным временем (UTC) в соответствии с ГОСТ Р 7.0.64-2018 (ИСО 8601:2004) YYYY-MM-DDThh:mm:ss " utc: DateTimeStringFilter and: [DateTimeBaseFilter] or: [DateTimeBaseFilter] not: DateTimeBaseFilter } " Входной объект: используемые операции сравнения для информации о дате и времени " input DateTimeStringFilter { eq: String in: [String] le: String lt: String ge: String gt: String between: DateTimeRange } " Входной объект: информация о временном промежутке для использования в операциях сравнения " input DateTimeRange { min: String! max: String! } |
16 |
type PointBase |
" Входной объект для базового типа пространственной информации: точки " input PointBaseFilter { " Фильтр для точек в пространстве: нахождение около аргумента фильтра в заданных пределах " near: NearFilter " Фильтр для точек в пространстве: нахождение внутри заданного полигона " within: WithinFilter and: [PointBaseFilter] or: [PointBaseFilter] not: PointBaseFilter } " Входной объект: пространственный фильтр нахождения около заданной точки в указанных пределах " input NearFilter { " Дистанция в метрах до используемой точки в пространстве в фильтре " distance: Float! " Точка в пространстве, по дистанции до которой происходит фильтрация " point: PointRef! } " Входной объект: пространственный фильтр нахождения внутри заданного полигона " input WithinFilter { " Полигон в пространстве, по нахождению в котором происходит фильтрация " polygon: PolygonRef! } " Входной объект: точка в пространстве для использования в фильтрах. " input PointRef { " Долгота в градусах " longitude: Float! " Широта в градусах " latitude: Float! } |
17 |
type LineBase |
" Входной объект для базового типа пространственной информации: последовательности точек (линии) " input LineBaseFilter { " Фильтр для последовательности точек в пространстве: нахождение около аргумента фильтра в заданных пределах " near: NearFilter " Фильтр для последовательности точек в пространстве: нахождение внутри заданного полигона " within: WithinFilter " Фильтр для последовательности точек в пространстве: пересечение с заданным полигоном " intersects: IntersectsFilter and: [LineBaseFilter] or: [LineBaseFilter] not: LineBaseFilter } " Входной объект: пространственный фильтр пересечения с заданным полигоном " input IntersectsFilter { " Полигон в пространстве, по пересечению с которым происходит фильтрация " polygon: PolygonRef } " Входной объект: последовательность точек в пространстве для использования в фильтрах. " input LineRef { points: [PointRef!]! } |
18 |
type PointTimeBase |
" Входной объект для базового типа пространственно-временной информации: точки в пространстве с привязкой к дате и времени " input PointTimeBaseFilter { " Фильтр для пространственной информации " point: PointBaseFilter " Фильтр для временной информации " time: DateTimeBaseFilter and: [PointTimeBaseFilter] or: [PointTimeBaseFilter] not: PointTimeBaseFilter } " Входной объект: точки в пространстве с привязкой к дате и времени для использования в фильтрах. " input PointTimeRef { point: PointRef! time: String! } |
19 |
type PolygonBase |
" Входной объект для базового типа пространственной информации: полигона " input PolygonBaseFilter { " Фильтр для полигона: нахождение около аргумента фильтра в заданных пределах " near: NearFilter " Фильтр для полигона: нахождение внутри заданного полигона " within: WithinFilter " Фильтр для полигона: содержание заданных точки или полигона " contains: ContainsFilter " Фильтр для полигона: пересечение с заданным полигоном " intersects: IntersectsFilter and: [PolygonBaseFilter] or: [PolygonBaseFilter] not: PolygonBaseFilter } " Входной объект: пространственный фильтр включения заданной точки или полигона " input ContainsFilter { " Точка в пространстве, по включению которой в исходный полигон происходит фильтрация " point: PointRef " Полигон в пространстве, по включению которого в исходный полигон происходит фильтрация " polygon: PolygonRef } " Входной объект: полигон в пространстве для использования в фильтрах " input PolygonRef { lines: [LineRef!]! } |
20 |
type MultiPolygonBase |
" Входной объект для базового типа пространственной информации: мультиполигона " input MultiPolygonBaseFilter { " Фильтр для мультиполигона: нахождение около аргумента фильтра в заданных пределах " near: NearFilter " Фильтр для мультиполигона: нахождение внутри заданного полигона " within: WithinFilter " Фильтр для мультиполигона: содержание заданных точки или полигона " contains: ContainsFilter " Фильтр для мультиполигона: пересечение с заданным полигоном " intersects: IntersectsFilter and: [MultiPolygonBaseFilter] or: [MultiPolygonBaseFilter] not: MultiPolygonBaseFilter } |
21 |
type GeoTrackBase |
" Входной объект для базового типа пространственно-временной информации: трек " input GeoTrackBaseFilter { " Фильтр для временной информации: прохождение маршрута в указанное время " time: DateTimeBaseFilter " Фильтр для пространственной информации: нахождение около аргумента фильтра в заданных пределах " near: NearFilter! " Фильтр для пространственно-временной информации: нахождение около аргумента фильтра в заданных пределах в указанное время " nearTime: NearTimeFilter! " Фильтр для пространственной информации: нахождение внутри заданного полигона " within: WithinFilter! " Фильтр для пространственно-временной информации: нахождение внутри заданного полигона в указанное время " withinTime: WithinTimeFilter! " Фильтр для пространственной информации: пересечение с заданным полигоном " intersects: IntersectsFilter! " Фильтр для пространственно-временной информации: пересечение с заданным полигоном в указанное время " intersectsTime: IntersectsTimeFilter! " Фильтр для пространственно-временной информации: пересечение с заданным треком в указанных промежутках времени и расстояния " intersectsTrack: IntersectsTrackFilter! and: [GeoTrackBaseFilter] or: [GeoTrackBaseFilter] not: GeoTrackBaseFilter } " Входной объект: пространственно-временной фильтр нахождения около заданной точки в указанных пределах в заданное время " input NearTimeFilter { distance: Float! point: PointRef! time: DateTimeBaseFilter! } " Входной объект: пространственно-временной фильтр нахождения внутри заданного полигона в указанное время " input WithinTimeFilter { polygon: PolygonRef! time: DateTimeBaseFilter! } " Входной объект: пространственно-временной фильтр пересечения с заданным полигоном в указанное время " input IntersectsTimeFilter { polygon: PolygonRef time: DateTimeBaseFilter! } " Входной объект: пространственно-временной фильтр пересечения с заданным треком в указанных интервалах расстояния и времени " input IntersectsTrackFilter { geotrack: GeoTrackRef! deltaTime: DeltaTimeRef! distance: Float! } " Входной объект: период времени в секундах " input DeltaTimeRef { second: Int! } " Входной объект: трек для использования в фильтрах " input GeoTrackRef { pointsInTime: [PointTimeRef]! } |
22 |
type BankAccountInfoBase |
" Входной объект для базового типа банковских данных " input BankAccountInfoBaseFilter { " Фильтр для имени банка " bankName: StringRegExpExactFilter " Фильтр для номера счета " account: StringRegExpExactFilter " Фильтр для номера корреспондентского счета " corrAccount: StringRegExpExactFilter " Фильтр для номера карты " cardNumber: StringRegExpExactFilter " Фильтр для банковского идентификационного кода " rcbic: StringRegExpExactFilter " Фильтр для КПП " kpp: StringRegExpExactFilter and: [BankAccountInfoBaseFilter] or: [BankAccountInfoBaseFilter] not: BankAccountInfoBaseFilter } |
23 |
type BankTransferInfoBase |
" Входной объект для базового типа банковских переводов " input BankTransferInfoBaseFilter { " Фильтр для отправителя " from: BankAccountInfoBaseFilter " Фильтр для получателя " to: BankAccountInfoBaseFilter " Фильтр для суммы перевода " amount: StringRegExpExactFilter " Фильтр для даты и времени перевода " data: DateTimeBaseFilter and: [BankTransferInfoBaseFilter] or: [BankTransferInfoBaseFilter] not: BankTransferInfoBaseFilter } |
24 |
type OrganizationInfoBase |
" Входной объект для базового типа сведений о юридических лицах и индивидуальных предпринимателях " input OrganizationInfoBaseFilter { " Фильтр для полного наименования организации " nameFull: StringRegExpExactFilter " Фильтр для сокращенного наименования организации " nameSmall: StringRegExpExactFilter " Фильтр для ГРН организации " grn: GRNBaseFilter " Фильтр для ИНН организации " inn: InnBaseFilter " Фильтр для банковских данных организации " bankInfo: BankAccountInfoBaseFilter " Фильтр для номера телефона организации " msisdn: MsisdnBaseFilter " Фильтр для web-сайта организации " webSite: URLBaseFilter " Фильтр для электронной почты организации " email: EmailBaseFilter " Фильтр для даты регистрации организации " dataRegistration: DateTimeBaseFilter " Фильтр для неструктурированного адреса организации " address: AddressBaseFilter " Фильтр для представителя организации " representative: OrganizationRepresentativeBaseFilter " Фильтр для ОКВЭД организации " okved: StringRegExpExactFilter " Фильтр для ЕГРЮЛ " egrul: StringRegExpExactFilter " Фильтр для ЕГРИП " egrip: StringRegExpExactFilter and: [OrganizationInfoBaseFilter] or: [OrganizationInfoBaseFilter] not: OrganizationInfoBaseFilter } " Входной объект для базового типа государственного регистрационного номера ОГРН и ОГРНИП " input GRNBaseFilter { " Фильтр для государственного регистрационного номера - ОГРН и ОГРНИП " grn: StringExactFilter and: [GRNBaseFilter] or: [GRNBaseFilter] not: GRNBaseFilter } |
25 |
type OrganizationRepresentativeBase |
" Входной объект для базового типа сведений об учредителях (участниках) юридического лица, лицах, имеющих право без доверенности действовать от имени юридического лица " input OrganizationRepresentativeBaseFilter { " Фильтр для должности " position: StringRegExpExactFilter " Фильтр для ИНН лица " inn: InnBaseFilter " Фильтр для ФИО " name: PersonBaseFilter and: [OrganizationRepresentativeBaseFilter] or: [OrganizationRepresentativeBaseFilter] not: OrganizationRepresentativeBaseFilter } |
26 |
type IpAddressBase |
" Входной объект для базового типа IP-адреса " input IpAddressBaseFilter { " Фильтр для IP-адреса " ip: StringRegExpExactFilter " Фильтр для маски подсети " mask: IntFilter " Фильтра для типа IP-адреса: ipv4, ipv6 " type: IpType and: [IpAddressBaseFilter] or: [IpAddressBaseFilter] not: IpAddressBaseFilter } |
27 |
type NetworkPeerBase |
" Входной объект для базового типа информации об участнике сетевого соединения " input NetworkPeerBaseFilter { " Фильтр для IP-адреса " ip: IpAddressBaseFilter " Фильтр для порта " port: IntFilter " Фильтр для номера протокола " protocolNumber: IntFilter and: [NetworkPeerBaseFilter] or: [NetworkPeerBaseFilter] not: NetworkPeerBaseFilter } |
28 |
type URLBase |
" Входной объект для базового типа URL-адреса " input URLBaseFilter { " Фильтр для URL-адреса " url: StringRegExpExactFilter and: [URLBaseFilter] or: [URLBaseFilter] not: URLBaseFilter } |
29 |
type DomainNameBase |
" Входной объект для базового типа доменного имени " input DomainNameBaseFilter { " Фильтр для доменного имени " domainName: StringRegExpExactFilter and: [DomainNameBaseFilter] or: [DomainNameBaseFilter] not: DomainNameBaseFilter } |
30 |
type LoginBase |
" Входной объект для базового типа имени/идентификатора пользователя " input LoginBaseFilter { " Фильтр для имени/идентификатора пользователя " login: StringRegExpExactFilter and: [LoginBaseFilter] or: [LoginBaseFilter] not: LoginBaseFilter } |
31 |
scalar Int |
" Входной объект: используемые функции для фильтрации значений типа Int " input IntFilter { " Равно " eq: Int " В [списке] " in: [Int] " Меньше либо равно " le: Int " Меньше, чем " lt: Int " Больше либо равно " ge: Int " Больше, чем " gt: Int " В промежутке " between: IntRange } " Входной объект: промежуток типа Int для использования в фильтрах " input IntRange { min: Int! max: Int! } |
32 |
scalar Float |
" Входной объект: используемые функции для фильтрации значений типа Float " input FloatFilter { " Равно " eq: Float " В [списке] " in: [Float] " Меньше либо равно " le: Float " Меньше, чем " lt: Float " Больше либо равно " ge: Float " Больше, чем " gt: Float " В промежутке " between: FloatRange } " Входной объект: промежуток типа Float для использования в фильтрах " input FloatRange { min: Float! max: Float! } |
33 |
scalar String |
" Входной объект: комбинация используемых функций для фильтрации значений типа String " input StringExactFilter { " Равно " eq: String " В [списке] " in: [String] } " Входной объект: промежуток типа String для использования в фильтрах " input StringRange { min: String! max: String! } " Входной объект: комбинация используемых функций для фильтрации значений типа String " input StringFullTextFilter { " Полнотекстовый поиск, соответствующий всему заданному тексту " alloftext: String " Полнотекстовый поиск, соответствующий любому набору из заданного текста " anyoftext: String } " Входной объект: комбинация используемых функций для фильтрации значений типа String " input StringRegExpFilter { " Регулярное выражение в формате POSIX Basic Regular Expression " regexp: String } " Входной объект: комбинация используемых функций для фильтрации значений типа String " input StringTermFilter { " Соответствие строкам, содержащим все указанные термы в любом порядке; без учета регистра " allofterms: String " Соответствие строкам, содержащим любой из указанных термов в произвольном порядке; без учета регистра " anyofterms: String } " Входной объект: комбинация используемых функций для фильтрации значений типа String " input StringRegExpExactFilter { " Регулярное выражение в формате POSIX Basic Regular Expression " regexp: String " Равно " eq: String " В [списке] " in: [String] } " Входной объект: комбинация используемых функций для фильтрации значений типа String " input StringRegExpFullTextFilter { " Регулярное выражение в формате POSIX Basic Regular Expression " regexp: String " Полнотекстовый поиск, соответствующий всему заданному тексту " alloftext: String " Полнотекстовый поиск, соответствующий любому набору из заданного текста " anyoftext: String } " Входной объект: комбинация используемых функции для фильтрации значений типа String " input StringTermExactFilter {
allofterms: String " Соответствие строкам, содержащим любой из указанных термов в произвольном порядке; без учета регистра " anyofterms: String " Равно " eq: String " В [списке] " in: [String] } " Входной объект: комбинация используемых функций для фильтрации значений типа String " input StringTermFullTextFilter { " Соответствие строкам, содержащим все указанные термы в любом порядке; без учета регистра " allofterms: String " Соответствие строкам, содержащим любой из указанных термов в произвольном порядке; без учета регистра " anyofterms: String " Полнотекстовый поиск, соответствующий всему заданному тексту " alloftext: String " Полнотекстовый поиск, соответствующий любому набору из заданного текста " anyoftext: String } |
Приложение N 6
к Требованиям к сетям и средствам связи собственников
или иных владельцев технологических сетей связи,
имеющих номер автономной системы, для проведения
уполномоченными государственными органами, осуществляющими
оперативно-разыскную деятельность или обеспечение безопасности
Российской Федерации, в случаях, установленных федеральными законами,
мероприятий в целях реализации возложенных на них задач,
утвержденным приказом Министерства цифрового развития,
связи и массовых коммуникаций Российской Федерации
от __.__.______ N ______
ТРЕБОВАНИЯ,
предъявляемые к формату передачи данных на языке GraphQL по протоколу WebSocket
1. ПТС ОРМ и ПУ для передачи данных на языке GraphQL по протоколу WebSocket должны использовать подпротокол graphql-transport-ws.
2. ПТС ОРМ и ПУ взаимодействую по протоколу WebSocket посредствам сообщений. Для кодирования сообщений применяется формат JSON.
3. Все сообщения должны содержать поле "type", определяющее тип сообщения. Сообщение в зависимости от типа также может содержать дополнительные поля:
"id" - идентификатор запроса, использующийся для последующего определения ответов ПТС ОРМ и привязки их к запросам ПУ;
"payload" - дополнительные данные для некоторых типов сообщений.
4. В любой момент времени ПТС ОРМ должны позволять выполнять несколько запросов ПУ с уникальными идентификаторами. При этом передача сообщений, относящихся к различным запросам, может чередоваться.
5. ПТС ОРМ должны закрывать соединение по протоколу WebSocket при возникновении критической ошибки (сбое в работе), таким образом уведомляя ПУ о данной ситуации.
6. ПУ может корректно закрывать соединение по протоколу WebSocket с кодом 1000 и причиной закрытия "Normal Closure".
7. ПУ перед отправкой запросов на языке GraphQL должен открыть сессию в соответствии с подпунктом 1 пункта 8 настоящего приложения поверх протокола WebSocket.
8. ПТС ОРМ и ПУ взаимодействуют по протоколу WebSocket с использованием следующих типов сообщений:
1) сообщение "ConnectionInit". Данное сообщение направляется ПУ в адрес ПТС ОРМ для открытия сессии. ПУ может передавать дополнительную информацию о сессии в поле "payload". ПТС ОРМ должны получить данное сообщение в течение заданного периода времени (определяется во время внедрения ПТС ОРМ и согласовывается с органом федеральной службы безопасности). Если ПУ не отправило данное сообщение в течение заданного периода времени, то ПТС ОРМ должны закрыть соединение по протоколу WebSocket с кодом 4408 и причиной закрытия "Connection initialization timeout". Если ПТС ОРМ получили более одного сообщения "ConnectionInit", то они должны закрыть соединение по протоколу WebSocket с кодом 4429 и причиной закрытия "Too many initialization requests".
Формат сообщения "ConnectionInit" (поле "payload" опциональное):
{
"type": "connection_init",
"payload": "string"
}
2) сообщение "ConnectionAck". Данное сообщение подтверждает успешное создание сессии и направляется ПТС ОРМ в адрес ПУ в ответ на сообщение "ConnectionInit". ПТС ОРМ могут передавать дополнительную информацию о сессии в поле "payload". ПУ после получения данного сообщения может отправлять запросы на языке GraphQL с помощью сообщений "Subscribe" в соответствии с подпунктом 3 пункта 8 настоящего приложения.
Формат сообщения "ConnectionAck" (поле "payload" опциональное):
{
"type": "connection_ack",
"payload": "string"
}
3) сообщение "Subscribe". Данное сообщение направляется ПУ в адрес ПТС ОРМ и содержит запрос на языке GraphQL в поле "query" поля "payload". Поле "id" содержит уникальный идентификатор запроса, формируемый ПУ. Если запрос с таким идентификатором уже выполняется, то ПТС ОРМ должны закрыть соединение по протоколу WebSocket с кодом 4409 и причиной закрытия "Subscriber for <unique-operation-id> already exists". Разрешается повторное использование идентификатора после завершения выполнения запроса на стороне ПТС ОРМ. Если ПУ отправил данное сообщение до получения сообщения "ConnectionAck", то ПТС ОРМ должны закрыть соединение по протоколу WebSocket с кодом 4401 и причиной закрытия "Unauthorized".
Формат сообщения "Subscribe" (поля "operationName", "variables", "extensions" опциональные):
{
"id": "<unique-operation-id>",
"type": "subscribe",
"payload": {
"operationName": "string",
"query": "string",
"variables": "string",
"extensions": "string"
}
}
4) сообщение "Next". Данное сообщение направляется ПТС ОРМ в адрес ПУ и содержит полные или частичные результаты выполнения запроса, ранее направленного ПУ в сообщении "Subscribe". Поле "id" содержит уникальный идентификатор запроса, ранее сформированный ПУ. Поле "payload" содержит результаты выполнения запроса в формате аналогичном для конечной точки "/query" согласно спецификации языка GraphQL.
Формат сообщения "Next:
{
"id": "<unique-operation-id>",
"type": "next",
"payload": "ExecutionResult"
}
5) сообщение "Error". Данное сообщение направляется ПТС ОРМ в адрес ПУ и содержит информацию об ошибке в ходе выполнения запроса, ранее направленного ПУ в сообщении "Subscribe". Поле "id" содержит уникальный идентификатор запроса, ранее сформированный ПУ. Поле "payload" содержит информацию об ошибке в формате согласно спецификации языка GraphQL. Ошибка может возникнуть как на начальном этапе выполнения запроса (например, ошибка валидации запроса), так и в ходе выполнения запроса. После возникновения ошибки ПТС ОРМ прекращают выполнение запроса и не направляют в сторону ПУ больше никаких сообщений.
Формат сообщения "Error":
{
"id": "<unique-operation-id>",
"type": "error",
"payload": "GraphQLError"
}
6) сообщение "Complete". Данное сообщение может направляться в обоих направлениях. Поле "id" содержит уникальный идентификатор запроса, ранее сформированный ПУ. Отправка данного сообщения от ПТС ОРМ в адрес ПУ означает завершение выполнения запроса с соответствующим идентификатором. Если ранее ПТС ОРМ отправили сообщение "Error", то данное сообщение не отправляется. Отправка данного сообщения от ПУ в адрес ПТС ОРМ означает, что ПУ хочет прервать выполнение запроса с соответствующим идентификатором и с данного момента не принимает результаты его выполнения.
Формат сообщения "Complete:
{
"id": "<unique-operation-id>",
"type": "complete"
}
9. Получение ПУ или ПТС ОРМ иных сообщений, отличных от указанных в п. 8 настоящего приложения, должно приводить к закрытию соединения по протоколу WebSocket с кодом 4400 и причиной закрытия, содержащей описание ошибки в типе или формате сообщения.
Приложение N 7
к Требованиям к сетям и средствам связи собственников
или иных владельцев технологических сетей связи,
имеющих номер автономной системы, для проведения
уполномоченными государственными органами, осуществляющими
оперативно-разыскную деятельность или обеспечение безопасности
Российской Федерации, в случаях, установленных федеральными законами,
мероприятий в целях реализации возложенных на них задач,
утвержденным приказом Министерства цифрового развития,
связи и массовых коммуникаций Российской Федерации
от __.__.______ N ______
ТРЕБОВАНИЯ,
предъявляемые к запросам мониторинга и формату их передачи по интерфейсу взаимодействия между ПУ и ПТС ОРМ
1. ПТС ОРМ должны обеспечивать получение ПУ следующей информации о структуре и функционировании ПТС ОРМ по запросу ПУ:
1) о структуре и составе ПТС ОРМ, составе и состоянии интерфейса взаимодействия ПТС ОРМ с ПУ;
2) об установленном в ПТС ОРМ общесистемном ПО, перечне и состоянии программных модулей в составе ПО ПТС ОРМ;
3) о точках подключения ПТС ОРМ к ИС АС и интерфейсах ввода информации в ПТС ОРМ.
2. ПТС ОРМ по запросу ПУ должны предоставлять следующую информацию в части структуры и состава ПТС ОРМ, состава и состояния интерфейса взаимодействия ПТС ОРМ с ПУ:
1) перечень коммутационного и серверного оборудования, средств хранения данных с его идентификацией;
2) идентификацию интерфейсов подключения оборудования ПТС ОРМ друг к другу;
3) параметры для серверного оборудования:
общий и занятый объем оперативной памяти;
количество сетевых интерфейсов с их идентификацией, нагрузку;
общее количество процессоров, загрузку;
общий объем дискового пространства, объем свободного пространства;
4) параметры технических средств хранения данных:
перечень модулей, составляющих средства хранения данных с их идентификацией;
для каждого входящего в состав средств хранения данных модуля: общий объем дискового пространства, объем свободного дискового пространства и состояние модуля (штатное функционирование, сбой, не функционирует), текстовую расшифровку сбоя.
3. ПТС ОРМ по запросу ПУ должны предоставлять информацию в части точек подключения ПТС ОРМ к ИС АС, интерфейсов ввода информации в ПТС ОРМ, содержащую:
1) перечень точек подключения к технологической сети связи и точек ввода информации в ПТС ОРМ с их идентификацией;
2) для каждой точки подключения предоставляет информацию о:
состоянии точки подключения (ввода информации) (штатное функционирование, сбой, не функционирует), текстовую расшифровку сбоя;
объеме информации, поступающей в секунду;
периоде времени, в течение которого на точку подключения/ввода информации в ПТС ОРМ не поступала информация.
4. ПТС ОРМ по запросу ПУ должны предоставлять следующую информацию в части состава ПО ПТС ОРМ и его состояния:
1) перечень установленного общесистемного ПО с его идентификацией;
2) информацию для общесистемного ПО:
идентификатор ПТС ОРМ, на котором установлено ПО;
наименование ПО;
состояние ПО (штатное функционирование, сбой, не функционирует), текстовую расшифровку сбоя;
3) перечень установленного ПО ПТС ОРМ с его идентификацией;
4) информацию для ПО ПТС ОРМ:
идентификатор ПТС ОРМ, на котором установлено ПО;
назначение (определяется разработчиком ПТС ОРМ);
состояние (штатное функционирование, сбой, не функционирует), текстовую расшифровку сбоя;
список контролируемых параметров (определяется разработчиком ПТС ОРМ).
5. Информация о функционировании и состоянии ПТС ОРМ, указанная в пунктах 1-4 настоящего приложения, должна быть представлена в виде временных рядов (далее - метрик).
6. Метрики должны иметь следующий обязательный набор меток (пара ключ-значение):
systemtype - относится ли метрика к оборудованию или ПО. Может принимать одно из значений: "hardware" или "software";
moduleid - идентификатор модуля;
modulename - наименование модуля;
moduletype - тип модуля;
blocknumber - номер блока оборудования;
groupname - наименование группы метрик;
softwareparentmoduleid - идентификатор модуля ПО, в состав которого входит модуль с данной метрикой;
hardwareparentmoduleid - идентификатор модуля оборудования, в состав которого входит модуль с данной метрикой.
7. Для метрик должны быть заданы единицы измерения и описания их назначения на русском языке.
8. Для получения значений метрик ПУ направляет ПТС ОРМ запросы мониторинга на конечную точку "/metric".
9. Для кодирования содержимого запросов мониторинга и ответов должен применяться формат JSON.
10. ПТС ОРМ при успешном выполнении запросов мониторинга должны возвращать HTTP код 2xx.
11. ПТС ОРМ при возникновении ошибки во время выполнения запросов мониторинга должны в ответе возвращать поле "error" с информацией об ошибке и следующие HTTP коды:
400 Bad Request - в запросе отсутствуют или некорректно заданы параметры;
422 Unprocessable Entity - неправильный формат запроса на языке PromQL в соответствии с пунктом 13 настоящего приложения;
503 Service Unavailable - выполнение запроса прервано на стороне ПТС ОРМ.
12. Ответы на запросы мониторинга должны иметь следующий формат:
{
"status": "success" | "error",
"data": <data>,
"errorType": "<string>",
"error": "<string>",
"warnings": ["<string>"]
}
Поле "status" - статус выполнения запроса, может принимать одно из двух значений: "success" или "error".
Поле "data" - результат выполнения запроса, структура поля зависит от конечной точки, на которую был отправлен запрос, в соответствии с пунктом 13 настоящего приложения.
Поля "errorType" и "error" - соответственно тип и описание ошибки, возникшей при выполнении запроса. Данные поля должны быть задана только, если поле "status" имеет значение "error".
Поле "warnings" - незначительные ошибки (предупреждения), возникшие во время выполнения запроса, но существенно не повлиявшие на его выполнение. При этом поле "data" может содержать частичные результаты выполнения запроса.
13. ПТС ОРМ должны реализовывать внутри конечной точки "/metric" следующие дополнительные конечные точки:
1) "/api/v1/query" - предназначена для приема запросов мониторинга от ПУ в целях получения метрик для конкретного значения времени, а также передачи на ПУ результатов выполнения данных запросов. Данная конечная точка должна поддерживать HTTP методы GET и POST.
Принимаемые параметры:
"query" - запрос на языке PromQL;
"time" (опционально) - дата и время в формате согласно RFC3339 или Unix-время;
"duration" (опционально) - период времени в формате согласно Time Durations языка PromQL.
Поле "data" для ответа на запросы мониторинга для данной конечной точки должно иметь следующий вид:
{
"resultType": "matrix" | "vector" | "scalar" | "string",
"result": <value>
}
Формат поля "result" зависит от значения поля "resultType" в соответствии с пунктом 14 настоящего приложения.
2) "/api/v1/query_range" - предназначена для приема запросов мониторинга от ПУ в целях получения метрик для диапазона времени, а также передачи на ПУ результатов выполнения данных запросов. Данная конечная точка должна поддерживать HTTP методы GET и POST.
Принимаемые параметры:
"query" - запрос на языке PromQL;
"start" - дата и время начала диапазона в формате согласно RFC3339 или Unix-время;
"end" - дата и время конца диапазона в формате согласно RFC3339 или Unix-время;
"step" - временной шаг запроса в формате согласно Time Durations языка PromQL или число с плавающей точкой;
"duration" (опционально) - период времени в формате согласно Time Durations языка PromQL.
Поле "data" для ответа на запросы мониторинга для данной конечной точки должно иметь следующий вид:
{
"resultType": "matrix",
"result": <value>
}
Формат поля "result" представлен в подпункте 1 п. 14 настоящего приложения.
3) "/api/v1/series" - предназначена для приема запросов мониторинга от ПУ в целях получения списка метрик, которые имеют заданный набор меток, а также передачи на ПУ результатов выполнения данных запросов. Данная конечная точка должна поддерживать HTTP методы GET и POST.
Принимаемые параметры:
"match[]" - перечень запрашиваемых меток в формате Time series Selectors языка PromQL;
"start" - дата и время начала диапазона в формате согласно RFC3339 или Unix-время;
"end" - дата и время конца диапазона в формате согласно RFC3339 или Unix-время.
Поле "data" для ответа на запросы мониторинга для данной конечной точки должно содержать перечень метрик (представляются перечнем их меток (пара ключ-значение)), удовлетворяющих критериям запроса.
4) "/api/v1/labels" - предназначена для приема запросов мониторинга от ПУ в целях получения списка меток, которые имеют заданный набор метрик, а также передачи на ПУ результатов выполнения данных запросов. Данная конечная точка должна поддерживать HTTP методы GET и POST.
Принимаемые параметры:
"match[]" (опционально) - перечень запрашиваемых метрик в формате Time series Selectors языка PromQL;
"start" (опционально) - дата и время начала диапазона в формате согласно RFC3339 или Unix-время;
"end" (опционально) - дата и время конца диапазона в формате согласно RFC3339 или Unix-время.
Поле "data" для ответа на запросы мониторинга для данной конечной точки должно содержать перечень названий меток, удовлетворяющих критериям запроса.
5) "/api/v1/label/<label_name>/values" - предназначена для приема запросов мониторинга от ПУ в целях получения значений заданных меток, а также передачи на ПУ результатов выполнения данных запросов. Данная конечная точка должна поддерживать HTTP метод GET.
Принимаемые параметры:
"match[]" (опционально) - перечень запрашиваемых метрик в формате Time series Selectors языка PromQL;
"start" (опционально) - дата и время начала диапазона в формате согласно RFC3339 или Unix-время;
"end" (опционально) - дата и время конца диапазона в формате согласно RFC3339 или Unix-время.
Поле "data" для ответа на запросы мониторинга для данной конечной точки должно содержать перечень значений меток, удовлетворяющих критериям запроса.
14. Поле "result" в ответах на запросы мониторинга может иметь один из следующих форматов:
1) если поле "resultType" имеет значение "matrix", то поле "result" должно иметь следующий формат:
[
{
"metric": {"<label_name>": "<label_value>", ... },
"values": [[<unix_time>, "<sample_value>"], ... ],
"histograms": [[<unix_time>, <histogram>], ... ]
},
...
]
2) если поле "resultType" имеет значение "vector", то поле "result" должно иметь следующий формат:
[
{
"metric": {"<label_name>": "<label_value>", ... },
"value": [<unix_time>, "<sample_value>"],
"histogram": [<unix_time>, <histogram>],
},
...
]
3) если поле "resultType" имеет значение "scalar", то поле "result" должно иметь следующий формат:
[<unix_time>, "<scalar_value>"]
4) если поле "resultType" имеет значение "string", то поле "result" должно иметь следующий формат:
[<unix_time>, "<string_value>"]
-------------------------------------------
*(1) Пункт 1 статьи 56.1 Федерального закона от 7 июля 2003 г. N 126-ФЗ "О связи".
*(2) Пункт 28 статьи 2 Федерального закона от 07.07.2003 N 126-ФЗ "О связи".
*(3) https://datatracker.ietf.org/doc/html/rfc8259
*(4) Введен в действие приказом Федерального агентства по техническому регулированию и метрологии от 22 мая 2018 г. N 265-ст.
См. Сводный отчет, загруженный при публикации проекта
Если вы являетесь пользователем интернет-версии системы ГАРАНТ, вы можете открыть этот документ прямо сейчас или запросить по Горячей линии в системе.