Megosztás a következőn keresztül:


Az IoT Hubhoz való hozzáférés szabályozása közös hozzáférésű jogosultságkódokkal

Az IoT Hub közös hozzáférésű jogosultságkód (SAS) jogkivonatokkal hitelesíti az eszközöket és a szolgáltatásokat, hogy elkerülje a kulcsok küldését a vezetéken. A SAS-jogkivonatokkal időkorlátos hozzáférést biztosít az eszközök és szolgáltatások meghatározott funkcióihoz az IoT Hubban. Az IoT Hubhoz való csatlakozás engedélyezéséhez az eszközöknek és szolgáltatásoknak megosztott hozzáféréssel vagy szimmetrikus kulccsal aláírt SAS-jogkivonatokat kell küldenie. A szimmetrikus kulcsokat az eszközidentitással együtt tárolják az identitásnyilvántartásban.

Ez a cikk a következőt ismerteti:

  • Az ügyfeleknek az IoT Hub eléréséhez adható különböző engedélyek.
  • Az IoT Hub az engedélyek ellenőrzésére használt jogkivonatokat használja.
  • Hitelesítő adatok hatóköre adott erőforrásokhoz való hozzáférés korlátozásához.
  • Meglévő eszközidentitás-nyilvántartásokat vagy hitelesítési sémákat használó egyéni eszközhitelesítési mechanizmusok.

Feljegyzés

A cikkben említett egyes funkciók, például a felhő–eszköz irányú üzenetküldés, az ikereszközök és az eszközfelügyelet csak a standard szintű IoT Hubon érhető el. Az alapszintű és standard/ingyenes IoT Hub-szintekkel kapcsolatban további információkért lásd Válassza ki a megoldása számára megfelelő IoT Hub-szintet és -méretet.

Az IoT Hub engedélyeket használ az egyes IoT Hub-végpontokhoz való hozzáférés biztosításához. Az engedélyek funkció alapján korlátozzák az IoT Hubhoz való hozzáférést. Az IoT Hub-végpontok eléréséhez megfelelő engedélyekkel kell rendelkeznie. Egy eszköznek például tartalmaznia kell egy biztonsági hitelesítő adatokat tartalmazó jogkivonatot, valamint az IoT Hubnak küldött összes üzenetet. Az aláíró kulcsokat azonban, például az eszköz szimmetrikus kulcsait, a rendszer soha nem küldi el a vezetéken keresztül.

Hitelesítés és engedélyezés

A hitelesítés annak bizonyítása, hogy Ön az, akinek mondja magát. A hitelesítés ellenőrzi egy felhasználó vagy eszköz identitását az IoT Hubon. A hitelesítés néha AuthN-ra rövidül. Az engedélyezés egy hitelesített felhasználó vagy eszköz engedélyeinek megerősítésének folyamata az IoT Hubon. Az engedélyezés megadja, hogy milyen erőforrásokhoz és parancsokhoz férhet hozzá, és mit tehet ezekkel az erőforrásokkal és parancsokkal. Az engedélyezést néha rövidítik AuthZ-re.

Ez a cikk a közös hozzáférésű jogosultságkódokkal végzett hitelesítést és engedélyezést ismerteti, amely lehetővé teszi az engedélyek csoportosítását és az alkalmazásoknak való megadását hozzáférési kulcsok és aláírt biztonsági jogkivonatok használatával. Szimmetrikus vagy közös hozzáférési kulcsokkal is hitelesíthet egy eszközt az IoT Hubbal. Az SAS-jogkivonatok az eszköz által az IoT Hubra irányuló minden egyes híváshoz biztosítják a hitelesítést a szimmetrikus kulcs minden híváshoz való társításával.

Hozzáférés-vezérlés és engedélyek

Használjon megosztott hozzáférési szabályzatokat az IoT Hub-szintű hozzáféréshez, és az egyes eszközök hitelesítő adatait használja arra, hogy a hozzáférést csak az adott eszközre korlátozza.

IoT hubszintű megosztott hozzáférési szabályzatok

A megosztott hozzáférési szabályzatok az engedélyek tetszőleges kombinációját adhatják meg. Szabályzatokat az Azure Portalon, az IoT Hub Resource REST API-k vagy az Azure CLI az iot hub policy parancsával határozhat meg programozott módon. Egy újonnan létrehozott IoT Hub a következő alapértelmezett szabályzatokkal rendelkezik:

Megosztott hozzáférési szabályzat Engedélyek
iothubowner Minden engedély
szolgáltatás ServiceConnect-engedélyek
eszköz DeviceConnect-engedélyek
registryRead RegistryRead-engedélyek
registryReadWrite RegistryRead és RegistryWrite engedélyek

Az alábbi engedélyekkel szabályozhatja az IoT Hubhoz való hozzáférést:

  • A ServiceConnect-engedélyt a háttérbeli felhőszolgáltatások használják, és a következő hozzáférést biztosítják:

    • Hozzáférés a felhőszolgáltatással kapcsolatos kommunikációs és monitorozási végpontokhoz.
    • Fogadjon eszközről felhőbe irányuló üzeneteket, küldjön felhőből eszközre üzeneteket, és kérje le a megfelelő kézbesítési visszaigazolásokat.
    • A fájlfeltöltések kézbesítési nyugtáinak lekérése.
    • Ikerpéldányok elérése címkék és kívánt tulajdonságok frissítéséhez, jelentett tulajdonságok lekéréséhez és lekérdezések futtatásához.
  • A DeviceConnect-engedélyt az eszközök használják, és a következő hozzáférést biztosítják:

    • Hozzáférés az eszközoldali végpontokhoz.
    • Küldjön eszközről felhőbe irányuló üzeneteket, és fogadjon felhőből eszközre irányuló üzeneteket.
    • Fájlfeltöltés végrehajtása.
    • Ikereszköz kívánt tulajdonságértesítések fogadása és az ikereszköz jelentett tulajdonságainak frissítése.
  • A RegistryRead-engedélyt a háttérbeli felhőszolgáltatások használják, és a következő hozzáférést biztosítják:

  • A RegistryReadWrite engedélyt a háttérbeli felhőszolgáltatások használják, és a következő hozzáférést biztosítják:

Eszközenkénti biztonsági hitelesítő adatok

Minden IoT Hub rendelkezik egy identitásregisztrációs adatbázissal, amely információkat tárol a csatlakozáshoz engedélyezett eszközökről és modulokról. Ahhoz, hogy egy eszköz vagy modul csatlakozni tud, az IoT Hub identitásjegyzékében kell lennie egy bejegyzésnek az adott eszközhöz vagy modulhoz. Egy eszköz vagy modul az identitásjegyzékben tárolt hitelesítő adatok alapján hitelesíti az IoT Hubot.

Amikor regisztrál egy eszközt SAS-jogkivonat-hitelesítés használatára, az eszköz két szimmetrikus kulcsot kap. A szimmetrikus kulcsok engedélyezik a DeviceConnect-engedélyt a társított eszközidentitáshoz.

SAS-tokenek használata szolgáltatásokból

A szolgáltatások olyan megosztott hozzáférési szabályzattal hozhatnak létre SAS-jogkivonatokat, amelyek meghatározzák a hozzáférés-vezérlés és az engedélyek szakaszban korábban ismertetett megfelelő engedélyeket .

Például a registryRead nevű előre létrehozott megosztott hozzáférési szabályzatot használó szolgáltatás létrehoz egy tokent a következő paraméterekkel:

  • erőforrás URI-ja: {IoT hub name}.azure-devices.net,
  • aláírókulcs: a registryRead jogszabály egyik kulcsa,
  • szabályzat neve: registryRead,
  • lejárati idő.

A következő kód például egy SAS-jogkivonatot hoz létre Node.js-ben:

var endpoint = "myhub.azure-devices.net";
var policyName = 'registryRead';
var policyKey = '...';

var token = generateSasToken(endpoint, policyKey, policyName, 60);

Az eredmény, amely hozzáférést biztosít az összes eszközidentitás olvasásához az identitásjegyzékben, a következő lenne:

SharedAccessSignature sr=myhub.azure-devices.net&sig=JdyscqTpXdEJs49elIUCcohw2DlFDR3zfH5KqGJo4r4%3D&se=1456973447&skn=registryRead

További példákért lásd : SAS-jogkivonatok létrehozása.

Szolgáltatások esetén az SAS-jogkivonatok csak az IoT Hub szintjén biztosítanak engedélyeket. Vagyis a szolgáltatásszabályzaton alapuló jogkivonattal hitelesítendő szolgáltatás képes végrehajtani a ServiceConnect-engedély által biztosított összes műveletet. Ezek a műveletek magukban foglalják az eszközről a felhőbe irányuló üzenetek fogadását, a felhőből az eszközre irányuló üzenetek küldését stb. Ha részletesebb hozzáférést szeretne biztosítani a szolgáltatásokhoz, például korlátozni szeretné, hogy egy szolgáltatás csak felhőalapú üzeneteket küldjön az eszközre, használhatja a Microsoft Entra-azonosítót. További információ: Az IoT Hubhoz való hozzáférés szabályozása a Microsoft Entra ID használatával.

SAS-jogkivonatok használata eszközökről

A DeviceConnect-engedélyeket kétféleképpen szerezheti be az IoT Hubon SAS-jogkivonatokkal: használhat szimmetrikus eszközkulcsot az identitásjegyzékből, vagy használhat megosztott hozzáférési kulcsot.

Az eszközökről elérhető összes funkció az előtaggal /devices/{deviceId}rendelkező végpontokon való kialakítással érhető el.

Az eszközre néző végpontok (a protokolltól függetlenül):

Végpont Funkciók
{iot hub name}/devices/{deviceId}/messages/events Eszközről felhőbe irányuló üzenetek küldése.
{iot hub name}/devices/{deviceId}/messages/devicebound Felhőből eszközre irányuló üzenetek fogadása.

Szimmetrikus kulcs használata az identitásjegyzékben

Ha egy eszközidentitás szimmetrikus kulcsával hoz létre jogkivonatot, a rendszer kihagyja a token policyName (skn) elemét.

Például az összes eszközfunkció eléréséhez létrehozott jogkivonatnak a következő paraméterekkel kell rendelkeznie:

  • erőforrás URI-ja: {IoT hub name}.azure-devices.net/devices/{device id},
  • aláíró kulcs: az {device id} identitás bármely szimmetrikus kulcsa,
  • nincs szabályzat neve,
  • bármilyen lejárati idő.

Például, az alábbi kód létrehoz egy SAS-jogkivonatot a Node.js-ben.

var endpoint ="myhub.azure-devices.net/devices/device1";
var deviceKey ="...";

var token = generateSasToken(endpoint, deviceKey, null, 60);

Az eszköz1 összes funkciójának elérését biztosító eredmény a következő:

SharedAccessSignature sr=myhub.azure-devices.net%2fdevices%2fdevice1&sig=13y8ejUk2z7PLmvtwR5RqlGBOVwiq7rQR3WZ5xZX3N4%3D&se=1456971697

További példákért lásd : SAS-jogkivonatok létrehozása.

Megosztott hozzáférési szabályzat használata az eszköz nevében való hozzáféréshez

Amikor megosztott hozzáférési szabályzatból hoz létre jogkivonatot, állítsa a skn mezőt a szabályzat nevére. Ennek a házirendnek engedélyeznie kell a DeviceConnect-engedélyt .

A megosztott hozzáférési szabályzatok eszközfunkciókhoz való elérésének két fő forgatókönyve a következő:

A megosztott hozzáférési szabályzat lehetővé teheti bármilyen eszközként való csatlakozást, ezért fontos, hogy a megfelelő erőforrás-URI-t használjuk a SAS-jogkivonatok generálásakor. Ez a beállítás különösen fontos a jogkivonat-szolgáltatások esetében, amelyeknek a jogkivonatot egy adott eszközre kell korlátozniuk az erőforrás URI-jának használatával. Ez a pont kevésbé releváns a protokollátjárók esetében, mivel már az összes eszköz forgalmát közvetítik.

Például az előre létrehozott, eszköznek nevezett megosztott hozzáférési szabályzatot használó jogkivonat-szolgáltatás a következő paraméterekkel hoz létre jogkivonatot:

  • erőforrás URI-ja: {IoT hub name}.azure-devices.net/devices/{device id},
  • aláírókulcs: az device irányelv egyik kulcsa,
  • szabályzat neve: device,
  • bármilyen lejárati idő.

Például az alábbi kód létrehoz egy SAS-jogkivonatot Node.js-ben.

var endpoint ="myhub.azure-devices.net/devices/device1";
var policyName = 'device';
var policyKey = '...';

var token = generateSasToken(endpoint, policyKey, policyName, 60);

Az eszköz1 összes funkciójának elérését biztosító eredmény a következő:

SharedAccessSignature sr=myhub.azure-devices.net%2fdevices%2fdevice1&sig=13y8ejUk2z7PLmvtwR5RqlGBOVwiq7rQR3WZ5xZX3N4%3D&se=1456971697&skn=device

A protokollátjárók ugyanazt a jogkivonatot használhatják az összes eszközhöz az erőforrás URI-jának myhub.azure-devices.net/devicesbeállításával.

További példákért lásd : SAS-jogkivonatok létrehozása.

Token szolgáltatás létrehozása a meglévő eszközök integrálásához

Az IoT Hub identitásjegyzékével eszközenként vagy modulonkénti biztonsági hitelesítő adatokat és hozzáférés-vezérlést konfigurálhat jogkivonatokkal. Ha egy IoT-megoldás már rendelkezik egyéni identitásregisztrációs adatbázissal és/vagy hitelesítési sémával, érdemes lehet létrehozni egy jogkivonat-szolgáltatást , amely integrálja ezt az infrastruktúrát az IoT Hubbal. Ily módon más IoT-funkciókat is használhat a megoldásban.

A token szolgáltatás egy egyéni felhőszolgáltatás. Egy IoT Hub megosztott hozzáférési szabályzatot használ a DeviceConnect-engedéllyel eszközhatókörű vagy modulhatókörű jogkivonatok létrehozásához. Ezek a jogkivonatok lehetővé teszik, hogy egy eszköz vagy modul csatlakozzon az IoT Hubhoz.

A tokenszolgáltatás-minta lépéseit bemutató diagram.

A token alapú szolgáltatás mintájának főbb lépései:

  1. Hozzon létre egy megosztott IoT Hub hozzáférési szabályzatot az IoT Hub DeviceConnect-engedélyével . Ezt a szabályzatot az Azure Portalon vagy programozott módon is létrehozhatja. A jogkivonat-szolgáltatás ezzel a szabályzattal írja alá az általa létrehozott jogkivonatokat.

  2. Ha egy eszköznek vagy modulnak hozzá kell férnie az IoT Hubhoz, aláírt jogkivonatot kér a jogkivonat-szolgáltatástól. Az eszköz hitelesítheti magát az egyéni identitásregisztrációs adatbázissal/hitelesítési sémával annak meghatározásához, hogy a jogkivonat-szolgáltatás milyen eszköz-/modulidentitást használ a jogkivonat létrehozásához.

  3. A token-szolgáltatás egy tokent ad vissza. A jogkivonat úgy jön létre, hogy a /devices/{deviceId} vagy /devices/{deviceId}/modules/{moduleId} használatával resourceURI-ként, az eszköz hitelesítésére deviceId-et, és a modul hitelesítésére moduleId-et alkalmazunk. A jogkivonat-szolgáltatás a megosztott hozzáférési szabályzat használatával hozza létre a jogkivonatot.

  4. Az eszköz/modul a jogkivonatot közvetlenül az IoT hubbal használja.

Feljegyzés

A .NET osztály SharedAccessSignatureBuilder vagy a Java osztály IotHubServiceSasToken használatával hozhat létre egy tokent a token szolgáltatásban.

A jogkivonat-szolgáltatás igény szerint beállíthatja a jogkivonat lejáratát. A jogkivonat lejárata után az IoT Hub megszakítja az eszköz-/modulkapcsolatot. Ezután az eszköznek/modulnak új jogkivonatot kell kérnie a jogkivonat-szolgáltatástól. A rövid lejárati idő növeli az eszköz/modul és a jogkivonat-szolgáltatás terhelését.

Ahhoz, hogy egy eszköz/modul csatlakozzon a központhoz, akkor is hozzá kell adnia azt az IoT Hub identitásjegyzékéhez, annak ellenére, hogy tokent használ, és nem kulcsot a csatlakozáshoz. Ezért továbbra is használhatja az eszközön/modulonkénti hozzáférés-vezérlést az eszköz/modul identitásainak engedélyezésével vagy letiltásával az identitásjegyzékben. Ez a megközelítés csökkenti a jogkivonatok hosszú lejárati idővel való használatának kockázatát.

Összehasonlítás testre szabott átjáróval

Az azonosítószolgáltatási minta az ajánlott módszer az egyéni identitás-nyilvántartás/hitelesítési séma IoT Hubbal való megvalósítására. Ez a minta azért ajánlott, mert az IoT Hub továbbra is kezeli a megoldás forgalmának nagy részét. Ha azonban az egyéni hitelesítési séma ennyire összefonódik a protokollal, előfordulhat, hogy egy egyéni átjáróra van szükség az összes forgalom feldolgozásához. Ilyen forgatókönyv például a Transport Layer Security (TLS) és az előmegosztott kulcsok (PSK-k) használata. További információ: IoT Edge-eszköz használata átjáróként.

SAS-jogkivonatok létrehozása

Az Azure IoT SDK-k automatikusan létrehoznak jogkivonatokat, de bizonyos forgatókönyvek esetében az SAS-jogkivonatok közvetlen generálására és használatára van szükség, beleértve a következőket:

A megosztott hozzáférési kulccsal aláírt jogkivonat hozzáférést biztosít a megosztott hozzáférési szabályzat engedélyeivel társított összes funkcióhoz. Az eszközidentitás szimmetrikus kulcsával aláírt jogkivonat csak a DeviceConnect-engedélyt adja a társított eszközidentitáshoz.

Ez a szakasz példákat mutat be az SAS-jogkivonatok különböző kódnyelveken történő létrehozására. SAS-jogkivonatokat is létrehozhat a az iot hub generate-sas-token CLI bővítményparanccsal, vagy a Visual Studio Code Azure IoT Hub-bővítményével.

SAS-jogkivonat-struktúra

Az SAS-jogkivonat formátuma a következő:

SharedAccessSignature sr={URL-encoded-resourceURI}&sig={signature-string}&se={expiry}&skn={policyName}

A várt értékek a következők:

Érték Leírás
{URL-encoded-resourceURI} A kisbetűs erőforrás URI-jának kisbetűs URL-kódolása
{resourceURI} Az ezzel a tokennel elérhető végpontok URI előtagja, szegmensekre bontva, kezdve az IoT hub hostnevével (protokoll nélkül). A háttérszolgáltatásoknak biztosított SAS-jogkivonatok hatóköre az IoT Hub szintjére terjed ki; például myHub.azure-devices.net. Az eszközöknek biztosított SAS-jogkivonatokat egy adott eszközre kell korlátozni; például myHub.azure-devices.net/devices/device1.
{signature-string} A HMAC-SHA256 aláírási sztring formája: {URL-encoded-resourceURI} + "\n" + {expiry}. Fontos: A kulcs a base64-ről van dekódolva, és kulcsként szolgál a HMAC-SHA256 számítás végrehajtásához.
{lejárat} UTF8 karakterláncok az 1970. január 1-jén 00:00:00 (UTC) óta eltelt másodpercek számához.
{policyName} Annak a megosztott hozzáférési szabályzatnak a neve, amelyre ez a jogkivonat hivatkozik. Hiányzik, ha a token az eszköz-nyilvántartási hitelesítő adatokra hivatkozik.

Az URI-előtagot szegmens és nem karakter alapján számítjuk ki. Például a /a/b előtag a /a/b/c esetében megfelelő, de a /a/bc esetében nem.

Az alábbi kód létrehoz egy SAS-jogkivonatot az erőforrás URI-jának, az aláíró kulcsnak, a szabályzat nevének és a lejárati időszaknak a használatával. A következő szakaszok részletesen ismertetik, hogyan inicializálhatók a különböző jogkivonat-használati esetek különböző bemenetei.

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', Buffer.from(signingKey, 'base64'));
    hmac.update(toSign);
    var base64UriEncoded = encodeURIComponent(hmac.digest('base64'));

    // Construct authorization string
    var token = "SharedAccessSignature sr=" + resourceUri + "&sig="
    + base64UriEncoded + "&se=" + expires;
    if (policyName) token += "&skn="+policyName;
    return token;
};

Protokollspecifikusságok

Az egyes támogatott protokollok, mint például az MQTT, az AMQP és a HTTPS, különböző módokon szállítják a jogkivonatokat.

Az MQTT használatakor a CONNECT-csomagban az eszközazonosító ügyfélazonosítóként szerepel, a {iothubhostname}/{deviceId} a Felhasználónév mezőben található, és egy SAS-jogkivonat a Jelszó mezőben. {iothubhostname} az IoT Hub teljes CName-jének kell lennie (például myhub.azure-devices.net).

Az AMQP használatakor az IoT Hub támogatja a SASL PLAIN és az AMQP Jogcímalapú biztonságot.

Ha AMQP igényalapú biztonságot használ, a szabvány meghatározza, hogyan továbbíthatja ezeket a tokeneket.

SASL PLAIN esetén a felhasználónév a következő lehet:

  • {policyName}@sas.root.{iothubName} IoT Hub-szintű jogkivonatok használata esetén.
  • {deviceId}@sas.{iothubname} ha eszközhatókörű jogkivonatokat használ.

A jelszómező mindkét esetben tartalmazza a tokent, ahogy az az SAS token szerkezetében leírtak szerint van.

A HTTPS úgy valósítja meg a hitelesítést, hogy az Authorization kérelem fejlécében egy érvényes tokent is felvesz.

Például a felhasználónév (a DeviceId megkülönbözteti a kis- és nagybetűket): iothubname.azure-devices.net/DeviceId

Jelszó (SAS-jogkivonatot az iot hub generate-sas-token parancssori bővítmény parancsával vagy a Visual Studio Code Azure IoT Hub-bővítményével hozhat létre):

SharedAccessSignature sr=iothubname.azure-devices.net%2fdevices%2fDeviceId&sig=kPszxZZZZZZZZZZZZZZZZZAhLT%2bV7o%3d&se=1487709501

Feljegyzés

Az Azure IoT Hub SDK-k automatikusan generálnak tokeneket a szolgáltatáshoz való csatlakozáskor. Bizonyos esetekben az Azure IoT SDK-k nem támogatják az összes protokollt vagy az összes hitelesítési módszert.

A SASL PLAIN speciális szempontjai

Az AMQP-vel rendelkező SASL PLAIN használatakor az IoT Hubhoz csatlakozó ügyfelek minden TCP-kapcsolathoz egyetlen jogkivonatot használhatnak. A jogkivonat lejárata után a TCP-kapcsolat megszakad a szolgáltatástól, és újracsatlakozást indít el. Ez a viselkedés, bár nem problémás a háttéralkalmazások esetében, az eszközalkalmazások esetében a következő okok miatt káros:

  • Az átjárók általában számos eszköz nevében csatlakoznak. A SASL PLAIN használatakor külön TCP-kapcsolatot kell létrehozniuk minden IoT Hubhoz csatlakozó eszközhöz. Ez a forgatókönyv jelentősen növeli az energia- és hálózati erőforrások felhasználását, és növeli az egyes eszközkapcsolatok késését.

  • Az erőforrások megnövekedett használata az egyes jogkivonatok lejárata után történő újracsatlakozáshoz hátrányosan érinti az erőforrás-korlátozott eszközöket.

Következő lépések

Most, hogy már tudja, hogyan szabályozhatja az IoT Hubhoz való hozzáférést, az alábbi IoT Hub fejlesztői útmutatókban olvashat: