Azuren App Configuration ja kontit

Published on Sunday, May 21, 2023

Azuren App Configuration ja kontit

Konttien ja konttipalveluiden kanssa pelatessa saattaa tulla tarve hallinnoida tiettyjä asetuksia (esim. tietokantapalvelimen osoite tai yhteyksien määrä) mahdollisimman helposti. Helposti tarkoittaa tässä tapauksessa selaimessa toimivaa työkalua, jossa koko järjestelmän asetuksia saa hallittua keskitetysti ja tarvittaessa luoda erilaisia ympäristöjä esim. testausta ja tuotantoa varten.

Azuressa tämän toiminnon tarjoaa App Configuration, joka on hintatietoiselle henkilölle mukava vaihtoehto, koska siitä on tarjolla täysin ilmainen taso. Ohjelmointikielten osalta App Configuration on suoraan tuettu C#-, Java-, Javascript- ja Python-kielten kanssa lisäämällä sopivan kirjaston mukaan projektiin, ja muiden ohjelmointikielten kanssa on mahdollista käyttää REST-rajapintaa.

App Configurationin käyttöönotto

Ensimmäinen vaihe App Configurationin käyttöönottossa on resurssin luonti Azuressa. Tämä tapahtuu esim. Azuren Portalin kautta luomalla uusi App Configuration haluttuun resurssiryhmään.

Create App Configuration

Luomisen jälkeen kannattaa kopioida talteen luodun App Configurationin osoite (esim. https://XYZ.azconfig.io), sillä sitä tarvitaan myöhemmin.

Testauksen vuoksi kannattaa palveluun lisätä myös jokin esimerkkiasetus Configuration Explorer -osion kautta (vaikkapa MinunArvoni), jonka voi myöhemmin noutaa omassa ohjelmassa, ja varmistaa että kaikki toimii oikein.

App Configuration Explorer

App Configuration Keys

Salasanakirjautuminen (huono tapa) 📉

Asetusten säätämisen osalta helpoin tapa päästä käsiksi App Configurationiin omasta ohjelmasta on sallia Access keys -pohjainen kirjautuminen.

App Configuration Settings Access keys

Tässä tavassa Connection string riittää sellaisenaan yhteyden luomiseen ohjelman ja App Configurationin välille. Read-only keys kelpaa normaalisti hyvin (eli Read-write keys -osioon ei tarvitse mennä), koska useimmiten suoritettavan ohjelman ei tarvitse kirjoittaa mitään arvoja App Configuratoriin.

App Configuration Access keys connection string

Tämän salasanapohjaisen kirjautumistavan huono puoli on se, että ohjelmassa yhdistämiseen käytettävä connection string pitää säilöä jonnekin, ja se ei saa joutua vääriin käsiin, koska sen avulla kuka tahansa voi lukea App Configuratorissa olevia asetuksia.

RBAC ja Azure (hyvä tapa) 📈

Jos omia kontteja ajaa Azuressa (esim. Azure Container Instancesin kautta) niin tietoturvaa ajatellen kannattaa palvelujen välinen autentikointi ja autorisointi hoitaa Azuren RBAC:in avulla. Yksinkertaisesti tämä onnistuu laittamalla halutulle resurssille (esim. Azure Container Instancesille) Identity-osiosta System assigned managed identity -asetus päälle

Settings Identity

System assigned managed identity

Ja tämän jälkeen App Configurationiin lisätään oikeus kyseiselle resurssille menemällä ensin Access control (IAM) -osioon

Access Control IAM

ja Role assignments -välilehden kautta voidaan äsken lisätylle identiteetille antaa App Configuration Data Reader -oikeus.

App Configuration Data Reader

App Configuration ja C#

C#:n ja .NET-ympäristön kanssa App Configuration otetaan mukaan projektiin lisäämällä Microsoft.Extensions.Configuration.AzureAppConfiguration -paketti osaksi projektia. Tämän jälkeen haluttuun .cs-tiedostoon projektissa lisätään seuraavat using-lauseet

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.AzureAppConfiguration;

Salasanakirjautuminen (huono tapa) 📉

Salasanan sisältävän connection stringin kanssa palveluun yhdistäminen ja halutun asetuksen noutaminen onnistuu seuraavalla tavalla

var builder = new ConfigurationBuilder();
builder.AddAzureAppConfiguration("Endpoint=https://XYZ.azconfig.io;Id=tunnus;Secret=salasana");

var config = builder.Build();
Console.WriteLine(config["MinunArvoni"]);

Tämän tavan huono puoli on se, että yhdistämiseen käytettävä connection string/Endpoint pitää säilöä johonkin, ja yllä esitetty tapa ei ole tietoturvan kannalta hyvä ratkaisu.

RBAC ja Azure (hyvä tapa) 📈

Jos RBAC on käytössä, voi yhteyden avauksen ja halutun asetuksen noutamisen tehdä seuraavalla tavalla

var builder = new ConfigurationBuilder();
builder.AddAzureAppConfiguration(options => options.ConnectWithManagedIdentity("https://XYZ.azconfig.io"));

var config = builder.Build();
Console.WriteLine(config["MinunArvoni"]);

ja kaiken pitäisi nyt toimia oikein!

☁️⚡📦