Политика авторизации на уровне виртуальной машины

Права доступа на уровне виртуальных машин определяют политики авторизации для обмена данными между различными виртуальными машинами в сети программно-определяемых транспортных средств (SDV). Они обеспечивают многоуровневую защиту на случай компрометации одной из виртуальных машин.

Для обеспечения межмашинного взаимодействия необходимо предоставить разрешения как на уровне службы, так и на уровне виртуальной машины.

Протосхема

Права доступа на уровне виртуальной машины определяются с помощью одного сообщения VmAuthzPolicy в формате textproto.

message VmAuthzPolicy {
  repeated Publisher allow_publisher = 1;
  repeated Publisher deny_publisher = 2;
  repeated Subscriber allow_subscriber = 3;
  repeated Subscriber deny_subscriber = 4;
  repeated Server allow_server = 5;
  repeated Server deny_server = 6;
  repeated Client allow_client = 7;
  repeated Client deny_client = 8;
}

// Reuses the same Publisher message from AuthzPolicy, but uses "*" for
// wildcards.
message Publisher {
  string message = 1;
  repeated string topic = 2;
}

// Reuses the same Subscriber message from AuthzPolicy, but uses "*" for
// wildcards.
message Subscriber {
  string message = 1;
  repeated string topic = 2;
}

// Reuses the same Server message from AuthzPolicy, but uses "*" for
// wildcards.
message Server {
  string service = 1;
  repeated string channel = 2;
}

// Reuses the same Client message from AuthzPolicy, but uses "*" for
// wildcards.
message Client {
  string service = 1;
  repeated string channel = 2;
}

Решение об авторизации

При оценке применяется строгий порядок приоритета, где параметр «Запретить» имеет приоритет над параметром «Разрешить» на той же степени детализации. По умолчанию вся межмашинная связь запрещена.

порядок оценки приоритета

Логика принятия решения проверяет права доступа в следующем порядке:

  1. Детальный запрет : Если конкретный экземпляр (сообщение + тема или служба + канал) соответствует правилу deny_ , он явно запрещен .
  2. Детальное разрешение : Если конкретный экземпляр соответствует правилу allow_ , он разрешен .
  3. Тип Deny : Если весь тип сообщения или интерфейс службы соответствует правилу deny_ ( topic: "*" или channel: "*" ), то он явно запрещен .
  4. Тип Allow : Если весь тип сообщения или интерфейс службы соответствует правилу allow_ ( topic: "*" или channel: "*" ), то он разрешен .
  5. Полный запрет : Если все типы сообщений или службы запрещены ( message: "*" или service: "*" ), то это явный запрет .
  6. Общее разрешение : Если разрешены все типы сообщений или службы ( message: "*" или service: "*" ), то это разрешено .
  7. Неявное значение по умолчанию : если ни одно правило не соответствует условию, запрос неявно отклоняется . По умолчанию система запрещает все запросы.

Примеры

Следующие примеры демонстрируют, как оценивается политика авторизации.

Гранулярное разрешение переопределений типа запрет

# Deny door unlock publications by default...
deny_publisher {
  message: "com.sdv.security.UnlockDoors"
  topic: "*"
}

# ...but allow it for the driver door.
allow_publisher {
  message: "com.sdv.security.UnlockDoors"
  topic: "driver_door"
}

Тип запрета переопределяет общий разрешать

# Allow all client calls globally (blanket allow)...
allow_client {
  service: "*"
  channel: "*"
}

# ...except for the firmware update service (system-wide deny).
deny_client {
  service: "com.sdv.diagnostic.FirmwareUpdate"
  channel: "*"
}