Inviare l'SDK dei messaggi di sicurezza
Questa guida pratica illustra le funzionalità del servizio Defender per IoT quando si sceglie di raccogliere e inviare messaggi di sicurezza del dispositivo senza usare un agente Defender per IoT e spiega come eseguire questa operazione.
Questa guida illustra come eseguire queste operazioni:
- Inviare messaggi di sicurezza con Azure IoT C SDK
- Inviare messaggi di sicurezza con Azure IoT C# SDK
- Inviare messaggi di sicurezza con Azure IoT Python SDK
- Inviare messaggi di sicurezza con Azure IoT Node.js SDK
- Inviare messaggi di sicurezza con Azure IoT Java SDK
Funzionalità di Defender per IoT
Defender per IoT può elaborare e analizzare qualsiasi tipo di dati dei messaggi di sicurezza purché i dati inviati siano conformi allo schema di Defender per IoT e il messaggio sia impostato come messaggio di sicurezza.
Messaggio di sicurezza
Defender per IoT definisce un messaggio di sicurezza usando i criteri seguenti:
- Se il messaggio è stato inviato con Azure IoT SDK
- Se il messaggio è conforme allo schema dei messaggi di sicurezza
- Se il messaggio è stato impostato come messaggio di sicurezza prima dell'invio
Ogni messaggio di sicurezza include i metadati del mittente, ad AgentId
esempio , AgentVersion
MessageSchemaVersion
e un elenco di eventi di sicurezza.
Lo schema definisce le proprietà valide e obbligatorie del messaggio di sicurezza, inclusi i tipi di eventi.
Nota
I messaggi inviati che non sono conformi allo schema vengono ignorati. Assicurarsi di verificare lo schema prima di avviare l'invio di dati, perché i messaggi ignorati non vengono attualmente archiviati.
Nota
I messaggi inviati che non sono stati impostati come messaggio di sicurezza tramite Azure IoT SDK non verranno instradati alla pipeline di Defender per IoT.
Esempio di messaggio valido
L'esempio seguente mostra un oggetto messaggio di sicurezza valido. L'esempio contiene i metadati del messaggio e un ProcessCreate
evento di sicurezza.
Dopo aver impostato come messaggio di sicurezza e inviato, questo messaggio verrà elaborato da Defender per IoT.
"AgentVersion": "0.0.1",
"AgentId": "e89dc5f5-feac-4c3e-87e2-93c16f010c25",
"MessageSchemaVersion": "1.0",
"Events": [
{
"EventType": "Security",
"Category": "Triggered",
"Name": "ProcessCreate",
"IsEmpty": false,
"PayloadSchemaVersion": "1.0",
"Id": "21a2db0b-44fe-42e9-9cff-bbb2d8fdf874",
"TimestampLocal": "2019-01-27 15:48:52Z",
"TimestampUTC": "2019-01-27 13:48:52Z",
"Payload":
[
{
"Executable": "/usr/bin/myApp",
"ProcessId": 11750,
"ParentProcessId": 1593,
"UserName": "aUser",
"CommandLine": "myApp -a -b"
}
]
}
]
Inviare messaggi di sicurezza
Inviare messaggi di sicurezza senza usare l'agente Defender per IoT usando Azure IoT C SDK per dispositivi, Azure IoT C# SDK per dispositivi, Azure IoT Node.js SDK, Azure IoT Python SDK o Azure IoT Java SDK.
Per inviare i dati del dispositivo dai dispositivi per l'elaborazione da Defender per IoT, usare una delle API seguenti per contrassegnare i messaggi per il routing corretto alla pipeline di elaborazione di Defender per IoT.
Tutti i dati inviati, anche se contrassegnati con l'intestazione corretta, devono essere conformi allo schema dei messaggi di Defender per IoT.
API di invio messaggio di sicurezza
L'API Invia messaggi di sicurezza è attualmente disponibile in C e C#, Python, Node.js e Java.
API C
bool SendMessageAsync(IoTHubAdapter* iotHubAdapter, const void* data, size_t dataSize) {
bool success = true;
IOTHUB_MESSAGE_HANDLE messageHandle = NULL;
messageHandle = IoTHubMessage_CreateFromByteArray(data, dataSize);
if (messageHandle == NULL) {
success = false;
goto cleanup;
}
if (IoTHubMessage_SetAsSecurityMessage(messageHandle) != IOTHUB_MESSAGE_OK) {
success = false;
goto cleanup;
}
if (IoTHubModuleClient_SendEventAsync(iotHubAdapter->moduleHandle, messageHandle, SendConfirmCallback, iotHubAdapter) != IOTHUB_CLIENT_OK) {
success = false;
goto cleanup;
}
cleanup:
if (messageHandle != NULL) {
IoTHubMessage_Destroy(messageHandle);
}
return success;
}
static void SendConfirmCallback(IOTHUB_CLIENT_CONFIRMATION_RESULT result, void* userContextCallback) {
if (userContextCallback == NULL) {
//error handling
return;
}
if (result != IOTHUB_CLIENT_CONFIRMATION_OK){
//error handling
}
}
API C#
private static async Task SendSecurityMessageAsync(string messageContent)
{
ModuleClient client = ModuleClient.CreateFromConnectionString("<connection_string>");
Message securityMessage = new Message(Encoding.UTF8.GetBytes(messageContent));
securityMessage.SetAsSecurityMessage();
await client.SendEventAsync(securityMessage);
}
API Node.js
var Protocol = require('azure-iot-device-mqtt').Mqtt
function SendSecurityMessage(messageContent)
{
var client = Client.fromConnectionString(connectionString, Protocol);
var connectCallback = function (err) {
if (err) {
console.error('Could not connect: ' + err.message);
} else {
var message = new Message(messageContent);
message.setAsSecurityMessage();
client.sendEvent(message);
client.on('error', function (err) {
console.error(err.message);
});
client.on('disconnect', function () {
clearInterval(sendInterval);
client.removeAllListeners();
client.open(connectCallback);
});
}
};
client.open(connectCallback);
}
API Python
Per usare l'API Python è necessario installare il pacchetto azure-iot-device.
Quando si usa l'API Python, è possibile inviare il messaggio di sicurezza tramite il modulo o tramite il dispositivo usando il dispositivo o il modulo univoco stringa di connessione. Quando si usa l'esempio di script Python seguente, con un dispositivo, usare IoTHubDeviceClient e con un modulo usare IoTHubModuleClient.
from azure.iot.device.aio import IoTHubDeviceClient, IoTHubModuleClient
from azure.iot.device import Message
async def send_security_message_async(message_content):
conn_str = os.getenv("<connection_string>")
device_client = IoTHubDeviceClient.create_from_connection_string(conn_str)
await device_client.connect()
security_message = Message(message_content)
security_message.set_as_security_message()
await device_client.send_message(security_message)
await device_client.disconnect()
API Java
public void SendSecurityMessage(string message)
{
ModuleClient client = new ModuleClient("<connection_string>", IotHubClientProtocol.MQTT);
Message msg = new Message(message);
msg.setAsSecurityMessage();
EventCallback callback = new EventCallback();
string context = "<user_context>";
client.sendEventAsync(msg, callback, context);
}
Passaggi successivi
- Leggere la panoramica del servizio Defender per IoT
- Altre informazioni su Defender per IoT Che cos'è la soluzione basata su agente per i generatori di dispositivi
- Abilitare il servizio
- Leggere le domande frequenti sull'agente Microsoft Defender per IoT
- Informazioni su come accedere a dati non elaborati sulla sicurezza
- Informazioni sulle raccomandazioni
- Informazioni sugli avvisi