Share via


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. SAS-jogkivonatokkal időkorlátos hozzáférést biztosít az eszközökhöz és szolgáltatásokhoz az IoT Hub adott funkcióihoz. 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 egy eszközidentitás tárolja az identitásjegyzékben.

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 által használt jogkivonatok ellenőrzik az engedélyeket.
  • 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-szintekről további információt a megoldáshoz megfelelő IoT Hub-szint kiválasztása című témakörben talál.

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. Néha rövidítve van AuthN-ra. Az engedélyezés egy hitelesített felhasználó vagy eszköz engedélyeinek megerősítésének folyamata az IoT Hubon. Meghatározza, hogy milyen erőforrásokhoz és parancsokhoz férhet hozzá, és mit tehet ezekkel az erőforrásokkal és parancsokkal. Az engedélyezés néha rövidítve van az AuthZ-hez.

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 hitelesítő adataival csak az adott eszközhöz való hozzáférést hatókörébe.

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
service Szolgáltatás Csatlakozás engedélyek
device Eszköz Csatlakozás 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 szolgáltatás Csatlakozás 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.
  • Az eszköz Csatlakozás 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:

    • Olvasási hozzáférés az identitásjegyzékhez. További információ: Identitásjegyzé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:

    • Olvasási és írási hozzáférés az identitásjegyzékhez. További információ: Identitásjegyzé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élyt adnak az eszköznek Csatlakozás a társított eszközidentitásra.

SAS-jogkivonatok 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 szabályzat egyik kulcsa registryRead ,
  • szabályzat neve: registryRead,
  • lejárati idő.

Az alábbi kód például létrehoz egy SAS-jogkivonatot Node.js:

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 lesz végrehajtani a szolgáltatás által biztosított összes műveletet Csatlakozás engedélyt. 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ó: Hitelesítés a Microsoft Entra-azonosítóval.

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

Az Eszköz Csatlakozás engedélyeket kétféleképpen szerezheti be az IoT Hub 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 házirend neve,
  • lejárati idő.

Az alábbi kód például létrehoz egy SAS-jogkivonatot Node.js:

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 közös hozzáférési szabályzatból hoz létre jogkivonatot, állítsa a skn mezőt a szabályzat nevére. Ennek a szabályzatnak engedélyt kell adnia az eszköznek Csatlakozás.

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ő:

Mivel a megosztott hozzáférési szabályzat bármilyen eszközként biztosíthat hozzáférést a csatlakozáshoz, fontos a megfelelő erőforrás-URI használata SAS-jogkivonatok létrehozá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 minden 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: a szabályzat egyik kulcsa device ,
  • szabályzat neve: device,
  • lejárati idő.

Az alábbi kód például létrehoz egy SAS-jogkivonatot Node.js:

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.

Jogkivonat-szolgáltatás létrehozása 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 jogkivonat-szolgáltatás egy egyéni felhőszolgáltatás. Egy IoT Hub megosztott hozzáférési szabályzatot használ az Eszköz Csatlakozás engedéllyel eszköz- 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 jogkivonat-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 Eszköz Csatlakozás az IoT Hub 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 jogkivonat-szolgáltatás egy jogkivonatot ad vissza. A jogkivonat az eszköz hitelesítésével és resourceURI/devices/{deviceId}/modules/{moduleId}moduleId a modul hitelesítésével deviceId jön létre./devices/{deviceId} 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 az IotHubServiceSasToken Java osztály használatával hozhat létre jogkivonatot a jogkivonat-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, 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 egyéni átjáróval

A jogkivonat-szolgáltatásminta az egyéni identitásregisztrációs adatbázis/hitelesítési séma IoT Hubbal való implementálásának ajánlott módja. 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 annyira összefonódik a protokollal, akkor szükség lehet egy egyéni átjáróra 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:

  • Az MQTT, AMQP vagy HTTPS felületek közvetlen használata.

  • A jogkivonat-szolgáltatásminta implementálása a Jogkivonat-szolgáltatás létrehozása szakaszban leírtak szerint.

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 az Eszköz Csatlakozás a társított eszközidentitáshoz biztosít engedélyt.

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 az 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 is létrehozhat.

SAS-jogkivonat-struktúra

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

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

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

Érték Leírás
{signature} Az űrlap HMAC-SHA256 aláírási sztringje: {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.
{resourceURI} Az ezzel a jogkivonattal elérhető végpontok URI-előtagja (szegmens szerint), kezdve az IoT Hub gazdagépnevé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.
{lejárat} UTF8 sztringek másodpercekig az 1970. január 1-jén (UTC) 00:00:00 (UTC) óta eltelt idő óta.
{URL-encoded-resourceURI} A kisbetűs erőforrás URI-jának kisbetűs URL-kódolása
{policyName} Annak a megosztott hozzáférési szabályzatnak a neve, amelyre ez a jogkivonat hivatkozik. Hiányzik, ha a jogkivonat az eszközregisztrációs adatbázis hitelesítő adataira hivatkozik.

Az URI-előtagot szegmens és nem karakter alapján számítjuk ki. Például egy előtag a következőhöz: /a/b ./a/b/c>/a/bc

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

Minden támogatott protokoll, például az MQTT, az AMQP és a HTTPS különböző módokon szállítja a jogkivonatokat.

Az MQTT használatakor a CONNECT-csomagban az eszközazonosító ügyfélazonosítóként, {iothubhostname}/{deviceId} a Felhasználónév mezőben, valamint egy SAS-jogkivonat található 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 jogcímalapú biztonságot használ, a szabvány meghatározza, hogyan továbbíthatja ezeket a jogkivonatokat.

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} eszközhatókörű jogkivonatok használata esetén.

A jelszómező mindkét esetben tartalmazza a jogkivonatot az SAS-jogkivonat szerkezetében leírtak szerint.

A HTTPS úgy valósítja meg a hitelesítést, hogy az engedélyezési kérelem fejlécében egy érvényes jogkivonatot 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 SDK-k automatikusan létrehoznak jogkivonatokat 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ás-korlátozott eszközöket hátrányosan érinti az erőforrások megnövekedett használata az egyes jogkivonatok lejárata után történő újracsatlakozáshoz.

Következő lépések

Most, hogy megtanulta, hogyan szabályozhatja az IoT Hubhoz való hozzáférést, az alábbi IoT Hub fejlesztői útmutató témakörei érdekelhetik: