Post

Azure keyvault secret elérése Azure function app-ból

Ugyan régi megoldás, de még mindig rendszeresen előkerül, így gyorsan le is írom, hogy hogyan lehet Azure function app-ból elérni az Azure keyvault-ban tárolt secret-eket. A megoldás lényege, hogy a function app-ban bekapcsoljuk a Managed Identity-t és a keyvault-ban, a function app-ban létrehozott identity-t hozzáadjuk a keyvault access policy-jéhez. Természetesen működik private endpoint-os keyvault-al is, de ebben az esetben a Function app-nak vnet integráltnak kell lennie és persze a DNS feloldásra is ügyeljünk, viszont most a legegyszerűbb megoldást mutatom be.

Előfeltételek

Az egyszerűbb részeket már kihagyom, hiszen az előző leírásaimban már sok ilyet hoztunk létre, de azért a leglényegesebbeket leírom. Ami kell:

  • Azure előfizetés
  • Magas jogosultság az Azure-ban (pl.: Owner)
  • Azure function app (Consumption plan-t a próba alatt nem javaslom, mert ott nem elérhető az SSH fukció)
  • Azure keyvault

Function app Managed Identity bekapcsolása

Első lépésként a function app-ban a Settings > Identity menüpontban kapcsoljuk be a Managed Identity-t. Két lehetőségünk van itt kapásból, system és user assign managed identity. A system assign managed identity az a function app-hoz létrehozott identity, a user pedig egy külön identity, amit külön tudunk létrehozni. A legfontosabb itt az életút és a felhasználás. Systemnél a function-nal együtt létezik és ha töröljük ezt az erőforrást, az Identity is eltűnik vele. A User-nél ezek külön utakat járnak. Ebben az esetben a system identity-t használjuk, majd ezt az identity-t fogjuk hozzáadni a keyvault access policy-hez. De ne siessünk ennyire előre.

Nyissuk meg a function-t és az Identity menüpontban kapcsoljuk be a system identity-t.

img-description
img-description

Bekapcsolás után a function app-ban létrejön egy új identity. Másoljuk ki az Object ID-jét, mert ezt kell majd a keyvault access policy-hoz hozzáadni.

img-description

Következik a KeyVault

Keyvault

A KeyVault-ban két féle access policy-t tudunk használni, az egyik a vault access policy, a másik pedig az RBAC. Ebben a leírásban a vault access policy-t használom.

img-description

Adjunk hozzáférést akkor a function app-nak a keyvault-hoz.

img-description

Elegendő a Secret Get és List jogosultság, de ha szeretnénk, akkor a Secret Set jogosultságot is megadhatjuk akár, így a function app-ból is tudunk secret-et létrehozni a keyvault-ban.

img-description

img-description

img-description

A jogosultság hozzáadása kész is, most jöhet maga a secret. A keyvault-ban a Secrets menüpontban hozzunk létre egy új secret-et.

img-description

img-description

Ezzel kész is vagyunk. Van jogoosultságunk a function app-hoz és van secret is a keyvault-ban. Most jöhet a function app-ban a kód, de előtte még egy fontos dolog. Ha nem ilyen erőforráson keresztül akarunk hozzáférni, hanem az adott nyelven akarunk bekérdezni, akkor előre generált példa kódok itt érhetőek el.

img-description

img-description

Na de térjünk vissza a function app-hoz.

Function app

Configuration alatt adjuk hozzá a keyvault-ban létrehozott secret-et.

img-description

Name mezőbe a secret nevét, Value mezőbe pedig a secret URI-jét kell beírni. A secret URI-t a keyvault-ban a secret részleteiben találjuk meg.

1
@Microsoft.KeyVault(VaultName=gudszentkeyvault;SecretName=testkey)

A VaultName a keyvault neve, a SecretName pedig a secret neve.

img-description

img-description

Mentés után pedig valami ilyesmit kell látnunk.

img-description

1-2 oldal frissítés után ki is fog zöldülni a secret sora.

img-description

Teszt

Nézzük is meg, hogyan érhető el az adott secret a function app-ból. Részemről egy python function-t használtam, tehát SSH-n keresztül beléptem a function app-ba és a python shell-ben megnéztem, hogy elérhető-e a secret. Egyszerűen csak írassuk ki a helyi változót, amin keresztül elérjük a secret-et.

img-description

img-description

Konklúzió

Ez egy beépített megoldás, ami nagyon jól működik. A function app-ban létrehozott identity-t hozzáadjuk a keyvault access policy-jéhez, és már is elérhető a secret. Nem kell technikai felhasználó, hogy elérjuk a secret-et és ha több app-ból is ugyanazt a secret-et akarjuk használni, akkor akár használhatjuk a user assign managed identity-t is, így nem kell minden app-hoz külön identity-t létrehozni és elég egy helyen változtatni a secret-et is.

This post is licensed under CC BY 4.0 by the author.