Windows Azure újdonságok – Service Bus III.

Ahogy korábban olvasóinknak ígértük, igyekszünk folyamatosan frissíteni a blogot a könyv megjelenése után bejelentett Azure frissítésekkel és új szolgáltatásokkal, amik bizonyos időközönként bekerülnek majd a könyv elektronikus kiadásaiba is. Ezúttal a Service Bus újdonságokat mutatjuk be egy több részes sorozatban:

Az előző bejegyzések:

A Windows Azure SDK 2.0-s változata több újdonságot is hozott a közvetített üzenetek továbbítását megvalósító üzenetsorok és feliratkozások kezelésében, és egyúttal bemutatkozott az esemény-vezérelt programozási modell is. A főbb újdonságok az alábbi témakörökbe csoportosíthatóak:

  • Újdonságok az üzenetsorok és feliratkozások kezelésében
  • Eseményvezérelt programozási modell
  • Task alapú aszinkron API
  • Shared Access Signature (SAS) autentikáció

Shared Access Signature (SAS) autentikáció

A Windows Azure csapat valószínűleg érezte, hogy a Service Bus hozzáférések korlátozására az Access Control Service szolgáltatás (új nevén: Windows Azure Active Directory Access Control) használata az esetek jelentős részében túlzott bonyolultságot jelentett mind fejlesztési mind üzemeltetési oldalról, és sok alkalmazásnál nem megengedhető, hogy a teljes értékű adminisztratív hozzáférési kulcs beágyazása.

Az új SDK elérhetővé tette az alkalmazások számára, hogy a régi mód mellett már a Shared Access Signature (SAS),- osztott hozzáférési lenyomat -, megoldást is használhatják a hozzáférések hitelesítésére. A SAS autentikáció segítségével szolgáltatás névterek, végpontok és üzenettovábbító entitások elérését korlátozhatod egy hozzáférési kulcs megadásával, és a kliens specifikus jogosultságok beállításával. Ezen kulcs segítségével generálható egy ideiglenes SAS token, mely autentikálja a klienst és biztosítja számára a szabályozott hozzáférést.

A SAS egy egyszerű. rugalmas és könnyen alkalmazásba vehető autentikációs megoldás, míg az ACS használatával nagyvállalati szintű, valódi felhasználói hozzáférés menedzsment eszköz áll rendelkezésedre.

A SAS használatához egy SharedAccessAuthorizationRule objektumot kell konfigurálnod a szolgáltatás névtéren, üzenetsoron, témán vagy feliratkozáson. Az objektum példányosításához az alábbi négy dolgot adhatod meg:

  • keyName: egyedi név, mely azonosítja a szabályt. Az egyediség garantálása a te feladatod.
  • primaryKey: az elsődleges hozzáférési kulcs. Egy megfelelően biztonságos véletlen kulcsot generálhatsz az osztály GenerateRandomKey statikus metódusával.
  • secondaryKey: másodlagos hozzáférési kulcs.
  • rights: a hozzáférési jogosultságok felsorolása, melyeket az AccessRights felsorolás értékeinek listájával fogalmazhatsz meg. Ilyen jogosultságok a Listen, Send és Manage.

Itt egy érdekes döntés született a Windows Azure SDK fejlesztői csapatának részéről, ugyanis az AccessRigths egy felsorolás (enum), ám a már megszokott [Flags] attribútum használata helyett valódi IEnumerable felsorolást várnak!

1.ábra: Szolgáltatásbusz elmei és a kiosztható jogosultságok kapcsolata

1.ábra: Szolgáltatásbusz elmei és a kiosztható jogosultságok kapcsolata

Mint ahogy az 1. ábrán láthatod, a Manage jogosultság kiosztható mind a névterekre, sorokra, témákra és feliratkozásokra. A Send jogosultságot szabályozhatjuk névtér, vagy az üzenetküldést támogató entitás szintjén, ilyen a sor és a téma. Végül pedig A Listen jogosultságot vagy névtér, vagy üzenet fogadására alkalmas entitás szintjén állíthatod, ilyen a sor és a feliratkozás.

Jó tudnod, hogy minden szolgáltatás névtér létrejöttekor automatikusan kap egy SharedAccessAuthorizationRule szabályt, melynek a KeyName tulajdonságában tárolt egyedi azonosítójának értéke a RootManageSharedAccessKey karakterlánc. E mellett két alapértelmezett szabályt is automatikusan létrejön: egy a Listen, Send és Manage jogokkal, egy másik pedig csak Listen joggal.

Az elsődleges és másodlagos kulcsok szerepe

A SAS autentikáció használata esetén a szolgáltatásbuszhoz hozzáférő kliensek az általad felkonfigurált SharedAccessAuthorizationRule objektum elsődleges (primaryKey), vagy másodlagos (secondaryKey) kulcs segítségével igényelhetnek hozzáférési lenyomatot. Helyesen jársz el, ha a megoldásod rendszeres időközönként lecseréli az elsődleges kulcsot, a régi értéket átmásolva a másodlagos kulcsba. Így az elsődleges kulccsal rendelkező kliensek tovább futhatnak, és lehetőséged van a kulcsok frissítésére.

Ha a kulcsok kompromittálódnak, mindkettőt lecserélheted egy újra, így az ideiglenes hozzáférési lenyomatok automatikusan érvénytelenné válnak.

SAS autorizáció használata névtereken

Szolgáltatásbusz névterek konfigurációjához szükséged lesz egy, a Windows Azure előfizetésedhez tartozó, menedzsment tanúsítványra. A Windows Azure SDK 2.0-s változata esetén a névterek SAS szabályainak kiolvasását, illetve írását egyelőre csak szabványos HTTP GET, illetve POST műveletekkel érheted el, az alábbi URL sémát használva:

https://management.core.windows.net/{subscriptionId}/services/ServiceBus/namespaces/{namespace}/AuthorizationRules/

Az URL-ben a subscriptionId paraméter az előfizetésed egyedi azonosítója, a namespace paraméter pedig a szolgáltatásbusz névtered neve. Az így megformázott URL-re a HttpClient és WebRequestHandler osztályok segítségével adhatod ki legegyszerűbben a parancsokat. Először nézzük meg együtt, hogyan lehet kiolvasni a SAS szabályokat:


// Ne felejtsd el behelyettesíteni a paramétereket!
string baseAddress = @"https://management.core.windows.net/{subscriptionId}/services/ServiceBus/namespaces/{namespace}/AuthorizationRules/";

// Programozottan szeretnénk megadni a kliens oldali menedzsment tanúsítványt
var webRequestHandler = new WebRequestHandler
{
 ClientCertificateOptions = ClientCertificateOption.Manual
};

// Adjuk hozzá a kéréshez a tanúsítványt, ne felejtsd el megadni a sajátod!
webRequestHandler.ClientCertificates.Add(
 GetCertificate("{tanúsítvány lenyomat}"));

var httpClient = new HttpClient(webRequestHandler)
{
 BaseAddress = new Uri(baseAddress)
};

// JSON formázott választ szeretnénk kapni
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
httpClient.DefaultRequestHeaders.Add("x-ms-version", "2012-03-01");

var getResult = httpClient.GetAsync("").Result;
if (getResult.StatusCode == System.Net.HttpStatusCode.OK) // Ha a kiolvasás sikeres volt
{
 var rules = getResult.Content.ReadAsAsync<SharedAccessAuthorizationRule[]>().Result;
 foreach (var rule in rules)
 {
 Console.WriteLine(rule.KeyName);
 Console.WriteLine(rule.PrimaryKey);
 }
}

Az így kiolvasott szabályokat lehetőséged van törölni, vagy szerkeszteni az alábbi URL-re megfogalmazott kérésekkel:

https://management.core.windows.net/{subscriptionId}/services/ServiceBus/namespaces/{namespace}/AuthorizationRules/{KeyName}

A fenti példák alapján egy új szabály létrehozása így néz ki:


var sendRuleAll = new SharedAccessAuthorizationRule(
 "sendRuleAll",
 SharedAccessAuthorizationRule.GenerateRandomKey(),
 new[] { AccessRights.Send });

var postResult = httpClient.PostAsJsonAsync("", sendRuleAll).Result;
if (!postResult.IsSuccessStatusCode)
{
 throw new InvalidOperationException(postResult.ReasonPhrase);
}

A példákban használt HttpClient metódusok a Microsoft ASP.NET Web API nuget csomagban található System.Net.Http.Formatting kiterjesztések, így használatukhoz telepítened kell ezt a csomagot! A tanúsítvány kiolvasásához használt GetCertificate metódus egy lehetséges implementációját elérhetővé tettem számodra a http://pastebin.com/tFyayNsf webcímen!

Ezeket az újdonságokat Te is kipróbálhatod! Regisztrálj az ingyenes, 90 napos Azure előfizetésre!

Holnap folytatjuk!

One thought on “Windows Azure újdonságok – Service Bus III.

  1. Visszajelzés: Windows Azure újdonságok – Service Bus IV. | Felhők között

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s