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


Azure-adattárakhoz való biztonságos hozzáférés folyamatokból

Az adattárak kritikus fontosságú erőforrást jelentenek az üzleti sikerhez, mivel tartalmazzák a vállalkozását irányító kódot. Az adattárakhoz való hozzáférést nem szabad könnyen biztosítani.

Ez a cikk bemutatja, hogyan javíthatja az Azure-adattárakhoz hozzáférő folyamatok biztonságát annak érdekében, hogy korlátozza a forráskód rossz kezekbe kerülésének kockázatát.

Ahhoz, hogy a folyamatok biztonságosan hozzáférjenek az Azure-adattárakhoz, a Feladat engedélyezési hatókörének aktuális projektre való korlátozása nem kibocsátási folyamatok esetén, a Feladat engedélyezési hatókörének aktuális projektre való korlátozása kibocsátási folyamatok esetén és az Adattárakhoz való hozzáférés védelme a YAML-folyamatokban beállításokat engedélyezni kell.

A buildelési folyamatokat és a klasszikus kiadási folyamatokat egyaránt lefedjük:

Alapszintű folyamat

A lépések az összes folyamathoz hasonlóak:

  1. Határozza meg azon Azure-adattárak listáját, amelyekhez a folyamatnak hozzáférésre van szüksége, amelyek ugyanahhoz a szervezethez tartoznak, de különböző projektekben találhatók.

    Az adattárak listáját a folyamat vizsgálatával állíthatja össze. Vagy bekapcsolhatja a Feladat engedélyezési hatókörének korlátozása funkciót a (nem)kiadási folyamatok aktuális projektjéhez, és megfigyelheti, hogy a folyamat mely tárházait nem tudja kivenni. Előfordulhat, hogy az almodul-adattárak nem jelennek meg az első sikertelen futtatás során.

  2. Minden olyan Azure DevOps-projekt esetében, amely tartalmaz egy adattárat, amelyhez a folyamatnak hozzá kell férnie, kövesse azokat a lépéseket, amelyekkel hozzáférést biztosíthat a folyamat buildidentitás-hozzáféréséhez a projekthez.

  3. Minden Azure-adattár esetében, amelyet a folyamat kivesz, kövesse azokat a lépéseket, amelyekkel olvasási hozzáférést adhat a folyamat buildidentitásának olvasási hozzáféréséhez az adattárhoz.

  4. Minden olyan adattár esetében, amelyet egy adattár almodulként használ, a folyamat kijelentkezik, és ugyanabban a projektben van, kövesse azokat a lépéseket, amelyekkel hozzáférést adhat a folyamat buildidentitásának olvasási hozzáféréséhez az adattárhoz.

  5. Kapcsolja be a feladatengedélyezési hatókör korlátozását az aktuális projektre a nem kiadási folyamatok esetében, a feladat engedélyezési hatókörének korlátozása az aktuális projektre a kiadási folyamatok esetében, és a YAML-folyamatok adattáraihoz való hozzáférés védelme kapcsoló.

Folyamatok létrehozása

Az Azure-adattárak elérésekor a folyamatok biztonságának javításához szükséges lépéseket egy futó példán keresztül mutatjuk be.

Tegyük fel, hogy a SpaceGameWebfabrikam-tailspin/SpaceGameWeb projektben, az SpaceGameWeb Azure-adattárban üzemeltetett folyamaton dolgozik. Tegyük fel, hogy a SpaceGameWeb folyamat kiveszi az adattárat ugyanabban a SpaceGameWebReact projektben, valamint a FabrikamFiber projektben lévő fabrikam-tailspin/FabrikamFiber adattárakat.FabrikamChat

Végül tegyük fel, hogy az FabrikamFiber adattár az FabrikamFiberLib adattárat almodulként használja, amely ugyanabban a projektben fut. További információ az almodulok megtekintéséről.

A SpaceGameWeb projekt adattárstruktúrái az alábbi képernyőképen láthatóhoz hasonlóan néznek ki.

Screenshot of the SpaceGameWeb repository structure.

A FabrikamFiber projekt adattárstruktúrái az alábbi képernyőképen láthatóhoz hasonlóan néznek ki.

Screenshot of the FabrikamFiber repository structure.

Tegyük fel, hogy a projekt nincs beállítva projektalapú buildidentitás használatára vagy a YAML-folyamatok adattáraihoz való hozzáférés védelmére. Tegyük fel, hogy már sikeresen futtatta a folyamatot.

Project-alapú buildidentitás használata buildelési folyamatokhoz

Egy folyamat végrehajtásakor identitással fér hozzá különböző erőforrásokhoz, például adattárakhoz, szolgáltatáskapcsolatokhoz, változócsoportokhoz. A folyamat kétféle identitást használhat: egy projektszintű és egy gyűjteményszintű identitást. Az előbbi nagyobb biztonságot nyújt, az utóbbi könnyű használatot biztosít. További információ a hatókörön belüli build-identitásokról és a feladat-engedélyezési hatókörről.

Javasoljuk, hogy projektszintű identitásokat használjon a folyamatok futtatásához. Alapértelmezés szerint a projektszintű identitások csak abban a projektben férhetnek hozzá erőforrásokhoz, amelynek a tagja. Az identitás használata javítja a biztonságot, mivel csökkenti a rosszindulatú személyek hozzáférését a folyamat eltérítésekor.

Ha azt szeretné, hogy a folyamat projektszintű identitást használjon, kapcsolja be a Feladat engedélyezési hatókörének korlátozása beállítást a jelenlegi projektre a nem kiadási folyamatok beállításához.

A futó példában, amikor ez a kapcsoló ki van kapcsolva, a SpaceGameWeb folyamat minden projekt összes adattárához hozzáférhet. Ha a kapcsoló be van kapcsolva, SpaceGameWeb csak a fabrikam-tailspin/SpaceGameWeb projekt erőforrásaihoz férhet hozzá, így csak az és SpaceGameWebReact az SpaceGameWeb adattárakhoz.

Ha futtatja a példafolyamatot, amikor bekapcsolja a kapcsolót, a folyamat sikertelen lesz, és a hibanaplók közlik, remote: TF401019: The Git repository with name or identifier FabrikamChat does not exist or you do not have permissions for the operation you are attempting. és remote: TF401019: The Git repository with name or identifier FabrikamFiber does not exist or you do not have permissions for the operation you are attempting.

A kivételekkel kapcsolatos problémák megoldásához kövesse az Alapszintű folyamat lépéseit.

Emellett explicit módon ki kell vennie az almodul-adattárakat az őket használó adattárak előtt . A példánkban ez az adattárat FabrikamFiberLib jelenti.

Ha most futtatja a példafolyamatot, az sikeres lesz.

További konfiguráció

Az Azure-adattárak elérésekor a biztonság további javítása érdekében érdemes bekapcsolni a YAML-folyamatokban az adattárakhoz való hozzáférés védelmét.

Tegyük fel, hogy a SpaceGameWeb folyamat EGY YAML-folyamat, és a YAML-forráskódja az alábbi kódhoz hasonlóan néz ki.

trigger:
- main

pool:
  vmImage: ubuntu-latest

resources:
  repositories:
    - repository: SpaceGameWebReact
      name: SpaceGameWeb/SpaceGameWebReact
      type: git
    - repository: FabrikamFiber
      name: FabrikamFiber/FabrikamFiber
      type: git
    - repository: FabrikamChat
      name: FabrikamFiber/FabrikamChat
      type: git

steps:
  - script: echo "Building SpaceGameWeb"
  - checkout: SpaceGameWebReact
  - checkout: FabrikamChat
    condition: always()  
  - checkout: FabrikamFiber
    submodules: true
    condition: always()
  - script: |
      cd FabrikamFiber
      git -c http.extraheader="AUTHORIZATION: bearer $(System.AccessToken)" submodule update --recursive --remote
  - script: cat $(Build.Repository.LocalPath)/FabrikamFiber/FabrikamFiberLib/README.md
  - ...

Adattárakhoz való hozzáférés védelme YAML-folyamatokban

Az Azure DevOps részletes engedélyezési mechanizmust biztosít az Azure-adattárakhoz a YAML-folyamatok adattáraihoz való hozzáférés védelme beállítás formájában. Ezzel a beállítással egy YAML-folyamat kifejezetten engedélyt kér az összes Azure-adattár eléréséhez, függetlenül attól, hogy melyik projekthez tartoznak. További információ erről a beállításról. Ez a beállítás nem befolyásolja más típusú adattárak, például a GitHub által üzemeltetett tárházak megtekintését.

A futó példában, amikor ez a kapcsoló be van kapcsolva, a SpaceGameWeb folyamat engedélyt kér a SpaceGameWebReact projekt adattárának fabrikam-tailspin/SpaceGameWeb és a FabrikamFiberFabrikamChat projekt adattárainak fabrikam-tailspin/FabrikamFiber eléréséhez.

A példafolyamat futtatásakor az alábbi képernyőképhez hasonló build jelenik meg. Screenshot of running the SpaceGameWeb pipeline the first time after turning on the Protect access to repositories in YAML pipelines toggle.

A rendszer kérni fogja, hogy adjon engedélyt a folyamat által kijelentkezett vagy erőforrásként definiált adattáraknak. Screenshot of being asked to grant permission to the SpaceGameWeb pipeline to access three repositories.

Ha így tesz, a folyamat futni fog, de sikertelen lesz, mert nem tudja kivenni az adattárat almodulként FabrikamFiberLibFabrikamFiber. A probléma megoldásához explicit módon tekintse meg például a FabrikamFiberLiblépés hozzáadását - checkout: git://FabrikamFiber/FabrikamFiberLib a -checkout: FabrikamFiber lépés előtt.

Ha most futtatja a példafolyamatot, az sikeres lesz.

Az utolsó YAML-folyamat forráskódja az alábbi kódrészlethez hasonlóan néz ki.

trigger:
- main

pool:
  vmImage: ubuntu-latest

resources:
  repositories:
    - repository: SpaceGameWebReact
      name: SpaceGameWeb/SpaceGameWebReact
      type: git
    - repository: FabrikamFiber
      name: FabrikamFiber/FabrikamFiber
      type: git
    - repository: FabrikamChat
      name: FabrikamFiber/FabrikamChat
      type: git

steps:
  - script: echo "Building SpaceGameWeb"
  - checkout: SpaceGameWebReact
  - checkout: FabrikamChat
    condition: always()  
  - checkout: git://FabrikamFiber/FabrikamFiberLib  
  - checkout: FabrikamFiber
    submodules: true
    condition: always()
  - script: |
      cd FabrikamFiber
      git -c http.extraheader="AUTHORIZATION: bearer $(System.AccessToken)" submodule update --recursive --remote
  - script: cat $(Build.Repository.LocalPath)/FabrikamFiber/FabrikamFiberLib/README.md

Hibaelhárítás

Íme néhány problémás helyzet, és hogyan kezelhetők.

A git parancssori használatával ellenőrizheti az ugyanabban a szervezetben lévő adattárakat

Használja például a .. parancsot - script: git clone https://$(System.AccessToken)@dev.azure.com/fabrikam-tailspin/FabrikamFiber/_git/OtherRepo/. A parancs sikertelen lesz, ha be van kapcsolva a YAML-folyamatok adattáraihoz való hozzáférés védelme.

A probléma megoldásához tekintse meg az OtherRepo adattárat például a checkout paranccsal - checkout: git://FabrikamFiber/OtherRepo.

Az adattár egy másik adattárat használ almodulként

Tegyük fel, hogy a folyamat által kivetett adattárak egyike egy másik adattárat használ (ugyanabban a projektben) az almoduléval, ahogyan a példánkban az és FabrikamFiberLib az FabrikamFiber adattárak esetében is. További információ az almodulok megtekintéséről.

Tegyük fel továbbá, hogy olvasási hozzáférést adott a SpaceGame build identitásának ehhez az adattárhoz, de az FabrikamFiber adattár kivétele továbbra is meghiúsul az FabrikamFiberLib almodul kivételekor.

A probléma megoldásához explicit módon tekintse meg FabrikamFiberLiba következőt, például adjon hozzá egy - checkout: git://FabrikamFiber/FabrikamFiberLib lépést az -checkout: FabrikamFiber egyik előtt.

Klasszikus kiadási folyamatok

A kiadási folyamatok adattáraihoz való hozzáférés biztosításának folyamata hasonló a buildelési folyamatokhoz.

A szükséges lépések szemléltetéséhez egy futó példát használunk. A példánkban egy kiadási folyamat van elnevezve FabrikamFiberDocRelease a fabrikam-tailspin/FabrikamFiberDocRelease projektben. Tegyük fel, hogy a folyamat ellenőrzi a FabrikamFiber projekt adattárát fabrikam-tailspin/FabrikamFiber , futtat egy parancsot a nyilvános dokumentáció létrehozásához, majd közzéteszi azt egy webhelyen. Tegyük fel továbbá, hogy az FabrikamFiber adattár az FabrikamFiberLib adattárat használja (ugyanabban a projektben), mint egy almodul

Project-alapú buildidentitás használata klasszikus kiadási folyamatokhoz

Egy folyamat végrehajtásakor identitással fér hozzá különböző erőforrásokhoz, például adattárakhoz, szolgáltatáskapcsolatokhoz, változócsoportokhoz. A folyamat kétféle identitást használhat: egy projektszintű és egy gyűjteményszintű identitást. Az előbbi nagyobb biztonságot nyújt, az utóbbi könnyű használatot biztosít. További információ a hatókörön belüli build-identitásokról és a feladat-engedélyezési hatókörről.

Javasoljuk, hogy projektszintű identitásokat használjon a folyamatok futtatásához. Alapértelmezés szerint a projektszintű identitások csak abban a projektben férhetnek hozzá erőforrásokhoz, amelynek a tagja. Az identitás használata javítja a biztonságot, mivel csökkenti a rosszindulatú személyek hozzáférését a folyamat eltérítésekor.

Ha azt szeretné, hogy a folyamat projektszintű identitást használjon, kapcsolja be a Feladat engedélyezési hatókörének korlátozását az aktuális projektre a kiadási folyamatok beállításához.

A futó példában, amikor ez a kapcsoló ki van kapcsolva, a FabrikamFiberDocRelease kiadási folyamat minden projekt összes adattárához hozzáférhet, beleértve az FabrikamFiber adattárat is. Ha a kapcsoló be van kapcsolva, FabrikamFiberDocRelease csak a fabrikam-tailspin/FabrikamFiberDocRelease projekt erőforrásaihoz férhet hozzá, így az FabrikamFiber adattár elérhetetlenné válik.

Ha futtatja a példafolyamatot, amikor bekapcsolja a kapcsolót, a folyamat sikertelen lesz, és a naplók közlik remote: TF401019: The Git repository with name or identifier FabrikamFiber does not exist or you do not have permissions for the operation you are attempting.

A problémák megoldásához kövesse az alapszintű folyamat lépéseit.

Ha most futtatja a példafolyamatot, az sikeres lesz.

Lásd még