Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek popisuje dostupné možnosti zabezpečení služby Azure IoT Hub Device Provisioning Service (DPS). Služba zřizování používá ověřování a oprávnění k udělení přístupu ke každému koncovému bodu. Oprávnění umožňují procesu ověřování omezit přístup k instanci služby na základě funkcí.
Tento článek popisuje:
Proces ověřování a tokeny, které služba zřizování používá k ověření oprávnění vůči rozhraním REST API pro službu a zařízení.
Různá oprávnění, která můžete udělit back-endové aplikaci pro přístup k rozhraní API služby.
Autentizace
Rozhraní API pro zařízení podporuje ověřování zařízení na bázi klíčů a na bázi certifikátů X.509.
Rozhraní API služby podporuje ověřování na základě klíčů pro back-endové aplikace.
Při použití ověřování založeného na klíči služba Device Provisioning používá tokeny zabezpečení k ověřování služeb, aby se zabránilo odesílání klíčů v přenosu. Kromě toho jsou tokeny zabezpečení omezené v časovém rozsahu a platnosti. Sady SDK služby Azure IoT Hub Device Provisioning automaticky generují tokeny bez nutnosti jakékoli speciální konfigurace.
V některých případech může být potřeba použít přímo rozhraní REST API služby HTTP Device Provisioning bez použití sad SDK. Následující části popisují, jak se ověřovat přímo v rozhraníCH REST API.
Ověřování rozhraní API zařízení
Rozhraní zařízení API používají zařízení k potvrzení služby Device Provisioning a k příjmu připojení IoT Hubu.
Poznámka:
Aby bylo možné přijímat ověřené připojení, musí být zařízení nejprve zaregistrovaná ve službě Device Provisioning prostřednictvím registrace. Rozhraní API služby slouží k programové registraci zařízení prostřednictvím registrace.
Zařízení se musí v rámci procesu zřizování ověřit prostřednictvím API zařízení. Metoda, kterou zařízení používá k ověření, je definována při nastavování skupiny registrací nebo jednotlivé registrace. Bez ohledu na metodu ověřování musí zařízení vydat metodu HTTPS PUT na následující adresu URL, aby se zřídila sama.
https://global.azure-devices-provisioning.net/[ID_Scope]/registrations/[registration_id]/register?api-version=2021-06-01
Pokud používáte ověřování založené na klíči, předá se token zabezpečení v hlavičce požadavku HTTP authorization v následujícím formátu:
SharedAccessSignature sig={signature}&se={expiry}&skn={policyName}&sr={URL-encoded-resourceURI}
Struktura tokenů zabezpečení pro ověřování na základě klíčů
Token zabezpečení se předá v hlavičce požadavku HTTP Authorization v následujícím formátu:
SharedAccessSignature sig={signature}&se={expiry}&skn={policyName}&sr={URL-encoded-resourceURI}
Očekávané hodnoty jsou:
| Hodnota | Description |
|---|---|
{signature} |
Řetězec podpisu HMAC-SHA256 formuláře: {URL-encoded-resourceURI} + "\n" + expiry.
Důležité: Klíč je dekódován z base64 a slouží jako klíč k HMAC-SHA256 výpočtu. |
{expiry} |
UTF-8 řetězce pro počet sekund od Unix epochy 00:00:00 UTC dne 1. ledna 1970. |
{URL-encoded-resourceURI} |
Kódování adresy URL malými písmeny {ID_Scope}/registrations/{registration_id} |
{policyName} |
Pro rozhraní API zařízení je tato zásada vždy "registrace". |
Následující fragment kódu Pythonu ukazuje funkci, která vypočítá generate_sas_token token ze vstupů uri, key, policy_nameexpiry pro jednotlivou registraci pomocí typu ověřování symetrického klíče.
from base64 import b64encode, b64decode, encode
from hashlib import sha256
from time import time
from urllib.parse import quote_plus, urlencode
from hmac import HMAC
def generate_sas_token(uri, key, policy_name, expiry=3600):
ttl = time() + expiry
sign_key = "%s\n%d" % ((quote_plus(uri)), int(ttl))
signature = b64encode(HMAC(b64decode(key), sign_key.encode('utf-8'), sha256).digest())
rawtoken = {
'sr' : uri,
'sig': signature,
'se' : str(int(ttl)),
'skn' : policy_name
}
return 'SharedAccessSignature ' + urlencode(rawtoken)
print(generate_sas_token("myIdScope/registrations/mydeviceregistrationid", "00mysymmetrickey", "registration"))
Výsledek by měl vypadat přibližně takto:
SharedAccessSignature sr=myIdScope%2Fregistrations%2Fmydeviceregistrationid&sig=SDpdbUNk%2F1DSjEpeb29BLVe6gRDZI7T41Y4BPsHHoUg%3D&se=1630175722&skn=registration
Následující příklad ukazuje, jak se sdílený přístupový podpis pak použije k ověření pomocí rozhraní API zařízení.
curl -L -i -X PUT -H 'Content-Type: application/json' -H 'Content-Encoding: utf-8' -H 'Authorization: [token]' -d '{"registrationId": "[registration_id]"}' https://global.azure-devices-provisioning.net/[ID_Scope]/registrations/[registration_id]/register?api-version=2021-06-01
Pokud používáte skupinu registrací založenou na symetrických klíčích, musíte nejprve vygenerovat device symmetric klíč pomocí klíče skupiny registrací. Primární nebo sekundární klíč skupiny pro registraci použijte k výpočtu HMAC-SHA256 ID registrace zařízení. Výsledek se pak převede do formátu Base64 a získá odvozený klíč zařízení. Pokud chcete zobrazit příklady kódu, přečtěte si téma Odvození klíče zařízení. Po odvození symetrického klíče zařízení můžete zařízení zaregistrovat pomocí předchozích příkladů.
Výstraha
Aby se zabránilo zahrnutí hlavního klíče skupiny do kódu zařízení, měl by být proces odvození klíče zařízení proveden mimo zařízení.
Ověřování pomocí certifikátů
Pokud jste pro ověřování na základě certifikátů X.509 nastavili jednotlivou registraci nebo skupinu registrací, musí zařízení k ověření rozhraní API zařízení použít jeho vydaný certifikát X.509. Informace o nastavení registrace a vygenerování certifikátu zařízení najdete v následujících článcích.
Rychlý start: Zřízení simulovaného zařízení certifikátu X.509
Programové vytvoření skupiny registrací služby Device Provisioning pro ověření certifikátu X.509
Po nastavení registrace a vystavení certifikátu zařízení ukazuje následující příklad, jak se ověřit v rozhraní API zařízení pomocí certifikátu X.509 zařízení.
curl -L -i -X PUT –cert ./[device_cert].pem –key ./[device_cert_private_key].pem -H 'Content-Type: application/json' -H 'Content-Encoding: utf-8' -d '{"registrationId": "[registration_id]"}' https://global.azure-devices-provisioning.net/[ID_Scope]/registrations/[registration_id]/register?api-version=2021-06-01
Ověřování rozhraní API služby
Rozhraní API služby slouží k načtení stavu registrace a odebrání registrací zařízení. Služba je také používána back-endovými aplikacemi k programové správě jednotlivých skupin i skupin registrací. Rozhraní API služby podporuje ověřování na základě klíčů pro back-endové aplikace.
Pro přístup ke všem koncovým bodům rozhraní API služby musíte mít příslušná oprávnění. Například back-endová aplikace musí obsahovat token obsahující přihlašovací údaje zabezpečení spolu se každou zprávou, kterou odešle do služby.
Služba Azure IoT Hub Device Provisioning uděluje přístup ke koncovým bodům ověřením tokenu proti zásadám sdíleného přístupu. Přihlašovací údaje zabezpečení, jako jsou symetrické klíče, se nikdy neposílají přes drát.
Řízení přístupu a oprávnění
Oprávnění můžete udělit následujícími způsoby:
Zásady autorizace sdíleného přístupu Zásady sdíleného přístupu můžou udělit libovolnou kombinaci oprávnění. Zásady můžete definovat na webu Azure Portal nebo programově pomocí rozhraní REST API služby Device Provisioning. Nově vytvořená služba zřizování má následující výchozí zásady:
provisioningserviceowner: Zásady se všemi oprávněními. Podrobné informace najdete v oprávněních .
Poznámka:
Poskytovatel prostředků služby Device Provisioning je zabezpečený prostřednictvím vašeho předplatného Azure, stejně jako všichni poskytovatelé v Azure Resource Manageru.
Další informace o vytváření a používání tokenů zabezpečení najdete v další části.
HTTP je jediný podporovaný protokol a implementuje ověřování zahrnutím platného tokenu do hlavičky žádosti o autorizaci .
Example
SharedAccessSignature sr =
mydps.azure-devices-provisioning.net&sig=kPszxZZZZZZZZZZZZZZZZZAhLT%2bV7o%3d&se=1487709501&skn=provisioningserviceowner`\
Poznámka:
Sady SDK služby Azure IoT Hub Device Provisioning automaticky generují tokeny při připojování ke službě.
Tokeny zabezpečení
Služba Device Provisioning používá tokeny zabezpečení k ověřování služeb, aby se zabránilo odesílání klíčů v přenosu. Kromě toho jsou tokeny zabezpečení omezené v časovém rozsahu a platnosti. Sady SDK služby Azure IoT Hub Device Provisioning automaticky generují tokeny bez nutnosti jakékoli speciální konfigurace. Některé scénáře vyžadují přímé generování a používání tokenů zabezpečení. Mezi takové scénáře patří přímé použití povrchu HTTP.
Struktura tokenů zabezpečení
Tokeny zabezpečení slouží k udělení časově omezeného přístupu k určitým funkcím ve službě IoT Hub Device Provisioning Service pro konkrétní služby. Aby bylo možné získat autorizaci pro připojení ke službě zřizování, musí služby odesílat tokeny zabezpečení podepsané sdíleným přístupem nebo symetrickým klíčem.
Token podepsaný sdíleným přístupovým klíčem uděluje přístup ke všem funkcím přidruženým k oprávněním zásad sdíleného přístupu.
Token zabezpečení má následující formát:
SharedAccessSignature sig={signature}&se={expiry}&skn={policyName}&sr={URL-encoded-resourceURI}
Tady jsou očekávané hodnoty.
| Hodnota | Description |
|---|---|
| {signature} | Řetězec podpisu HMAC-SHA256 formuláře: {URL-encoded-resourceURI} + "\n" + expiry.
Důležité: Klíč je dekódován z base64 a slouží jako klíč k HMAC-SHA256 výpočtu. |
| {datum vypršení} | UTF-8 řetězce pro počet sekund od Unix epochy 00:00:00 UTC dne 1. ledna 1970. |
| {URL-encoded-resourceURI} | Kódování adresy URL malého písmena identifikátoru URI prostředku. Předpona identifikátoru URI (podle segmentu) koncových bodů, ke kterým se dá přistupovat pomocí tohoto tokenu, počínaje názvem hostitele služby IoT Device Provisioning (bez protokolu). Například: mydps.azure-devices-provisioning.net. |
| {policyName} | Název zásady sdíleného přístupu, na kterou tento token odkazuje. |
Poznámka:
Předpona identifikátoru URI se počítá na základě segmentu, nikoli znakem. Například /a/b je předpona pro /a/b/c , ale ne pro /a/bc.
Následující Node.js fragment kódu ukazuje funkci s názvem generateSasToken , která vypočítá token ze vstupů resourceUri, signingKey, policyName, expiresInMins. Další části podrobně popisuje, jak inicializovat různé vstupy pro různé případy použití tokenu.
var generateSasToken = function(resourceUri, signingKey, policyName, expiresInMins) {
resourceUri = encodeURIComponent(resourceUri);
// Set expiration in seconds
var expires = (Date.now() / 1000) + expiresInMins * 60;
expires = Math.ceil(expires);
var toSign = resourceUri + '\n' + expires;
// Use crypto
var hmac = crypto.createHmac('sha256', new Buffer(signingKey, 'base64'));
hmac.update(toSign);
var base64UriEncoded = encodeURIComponent(hmac.digest('base64'));
// Construct authorization string
var token = "SharedAccessSignature sr=" + resourceUri + "&sig="
+ base64UriEncoded + "&se=" + expires + "&skn="+ policyName;
return token;
};
V porovnání je ekvivalentní kód Pythonu pro vygenerování tokenu zabezpečení následující:
from base64 import b64encode, b64decode
from hashlib import sha256
from time import time
from urllib.parse import quote_plus, urlencode
from hmac import HMAC
def generate_sas_token(uri, key, policy_name, expiry=3600):
ttl = time() + expiry
sign_key = "%s\n%d" % ((quote_plus(uri)), int(ttl))
print sign_key
signature = b64encode(HMAC(b64decode(key), sign_key, sha256).digest())
rawtoken = {
'sr' : uri,
'sig': signature,
'se' : str(int(ttl)),
'skn' : policy_name
}
return 'SharedAccessSignature ' + urlencode(rawtoken)
Poznámka:
Vzhledem k tomu, že se na počítačích se službou IoT Device Provisioning Service ověřuje doba platnosti tokenu, musí být posun hodin počítače, který token generuje, minimální.
Použití tokenů zabezpečení ze součástí služby
Součásti služeb můžou generovat pouze tokeny zabezpečení pomocí zásad sdíleného přístupu, které udělují příslušná oprávnění, jak bylo vysvětleno dříve.
Tady jsou funkce služby zveřejněné na koncových bodech:
| Endpoint | Funkčnost |
|---|---|
{your-service}.azure-devices-provisioning.net/enrollments |
Poskytuje operace registrace zařízení pomocí služby Device Provisioning. |
{your-service}.azure-devices-provisioning.net/enrollmentGroups |
Poskytuje operace pro řízení skupin pro registraci zařízení. |
{your-service}.azure-devices-provisioning.net/registrations/{id} |
Poskytuje operace pro načítání a správu stavu registrace zařízení. |
Například služba vygenerovaná pomocí předem vytvořené zásady enrollmentread sdíleného přístupu by vytvořila token s následujícími parametry:
- URI prostředku:
{mydps}.azure-devices-provisioning.net, - podpisový klíč: jeden z klíčů
enrollmentreadpolitiky, - název zásady:
enrollmentread, - libovolná doba platnosti.backn
var endpoint ="mydps.azure-devices-provisioning.net";
var policyName = 'enrollmentread';
var policyKey = '...';
var token = generateSasToken(endpoint, policyKey, policyName, 60);
Výsledkem, který by udělil přístup ke čtení všech záznamů o registraci, by byl:
SharedAccessSignature sr=mydps.azure-devices-provisioning.net&sig=JdyscqTpXdEJs49elIUCcohw2DlFDR3zfH5KqGJo4r4%3D&se=1456973447&skn=enrollmentread
Sady SDK a ukázky
Referenční články:
Následující referenční články obsahují další informace o řízení přístupu ke službě IoT Device Provisioning.
Služba Device Provisioning – oprávnění
Následující tabulka uvádí oprávnění, která můžete použít k řízení přístupu ke službě IoT Device Provisioning.
| Povolení | Poznámky |
|---|---|
| ServiceConfig | Uděluje přístup ke změně konfigurací služby. Toto oprávnění používají back-endové cloudové služby. |
| EnrollmentRead | Uděluje přístup pro čtení k registracím zařízení a skupinám registrací. Toto oprávnění používají back-endové cloudové služby. |
| EnrollmentWrite | Uděluje oprávnění pro zápis do registrací zařízení a skupin registrací. Toto oprávnění používají back-endové cloudové služby. |
| RegistrationStatusRead | Udělí oprávnění ke čtení stavu registrace zařízení. Toto oprávnění používají back-endové cloudové služby. |
| RegistrationStatusWrite | Umožňuje odstranění stavu registrace zařízení. Toto oprávnění používají back-endové cloudové služby. |