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


Engedélyezés és szerepkörök a Data API Builderben

A Data API Builder szerepköralapú engedélyezési munkafolyamatot használ. A rendszer minden bejövő kérelmet, akár hitelesítve van, akár nem, hozzárendel egy szerepkörhöz. A szerepkörök lehetnek rendszerszerepkörök vagy felhasználói szerepkörök. A hozzárendelt szerepkör ezután a konfigurációban megadott engedélyekkel van ellenőrizve, hogy megismerje, milyen műveletek, mezők és szabályzatok érhetők el az adott szerepkörhöz a kért entitáson.

A felhasználó szerepkörének meghatározása

role nem rendelkezik alapértelmezett engedélyekkel. Ha a Data API Builder meghatároz egy szabályt, akkor az entitásnak permissionsactions -t kell meghatároznia, hogy a kérés sikeres legyen.

Token megadva x-ms-api-role Feltéve x-ms-api-role tokenben Eredményként kapott szerepkör
Nem Nem Nem anonymous
Igen Nem Nem authenticated
Igen Igen Nem Kivétel
Igen Igen Igen x-ms-api-role érték

Annak érdekében, hogy anonymous vagy authenticated helyett más szerepkört töltsön be, a x-ms-api-role fejlécre van szükség.

Megjegyzés:

Egy kérésnek csak egy szerepköre lehet. Még ha a jogkivonat több szerepkört is jelez, az x-ms-api-role érték kiválasztja, hogy melyik szerepkör legyen hozzárendelve a kéréshez.

Rendszerszerepkörök

A rendszerszerepkörök a Data API Builder által felismert beépített szerepkörök. A rendszerszerepkör automatikusan hozzárendelve van a kérelmezőhöz, függetlenül attól, hogy a kérelmező milyen szerepkör-tagságot jelöl a hozzáférési jogkivonataikban. Két rendszerszerepkör van: anonymous és authenticated.

Névtelen rendszerszerepkör

A anonymous rendszerszerepkör a nem hitelesített felhasználók által végrehajtott kérelmekhez van hozzárendelve. A futtatókörnyezet konfigurációja által definiált entitásoknak engedélyekkel kell rendelkezniük a anonymous szerepkörhöz, ha nem hitelesített hozzáférésre van szükség.

példa

Az alábbi Data API Builder-futtatókörnyezet-konfiguráció azt mutatja be, hogy a rendszerszerepkör anonymous explicit módon konfigurálva van a Book entitás olvasási hozzáférésével:

"Book": {
    "source": "books",
    "permissions": [
        {
            "role": "anonymous",
            "actions": [ "read" ]
        }
    ]
}

Amikor egy ügyfélalkalmazás egy nem hitelesített felhasználó nevében küld egy, a Book entitáshoz hozzáférő kérést, az alkalmazásnak nem szabad tartalmaznia a Authorization HTTP-fejlécet.

Hitelesített rendszerszerepkör

A authenticated rendszerszerepkör a hitelesített felhasználók által végrehajtott kérelmekhez van hozzárendelve.

példa

Az alábbi Data API Builder-futtatókörnyezet-konfiguráció azt mutatja be, hogy a rendszerszerepkör authenticated explicit módon konfigurálva van a Book entitás olvasási hozzáférésével:

"Book": {
    "source": "books",
    "permissions": [
        {
            "role": "authenticated",
            "actions": [ "read" ]
        }
    ]
}

Felhasználói szerepkörök

A felhasználói szerepkörök nem rendszerszintű szerepkörök, amelyek a futtatókörnyezet konfigurációjában beállított identitásszolgáltató felhasználóihoz vannak rendelve. Ahhoz, hogy a Data API Builder kiértékeljen egy kérést egy felhasználói szerepkör kontextusában, két követelménynek kell teljesülnie:

  1. Az ügyfélalkalmazás által biztosított hozzáférési jogkivonatnak tartalmaznia kell a felhasználó szerepkör-tagságát listázó szerepkör-jogcímeket.
  2. Az ügyfélalkalmazásnak tartalmaznia kell a HTTP-fejlécet X-MS-API-ROLE a kérésekkel, és meg kell adnia a fejléc értékét a kívánt felhasználói szerepkörként.

Példa a szerepkör-értékelésre

Az alábbi példa a Book Data API Builder futtatókörnyezet konfigurációjában konfigurált entitáshoz érkező kéréseket mutatja be az alábbiak szerint:

"Book": {
    "source": "books",
    "permissions": [
        {
            "role": "anonymous",
            "actions": [ "read" ]
        },
        {
            "role": "authenticated",
            "actions": [ "read" ]
        },
        {
            "role": "author",
            "actions": [ "read" ]
        }
    ]
}

A Static Web Appsben a felhasználó alapértelmezés szerint a névtelen szerepkör tagja. Ha a felhasználó hitelesítve van, akkor mind a anonymous, mind a authenticated szerepkörök tagja.

Amikor egy ügyfélalkalmazás hitelesített kérelmet küld a Static Web Apps adatbázis-kapcsolataival (előzetes verzió) üzembe helyezett Data API Buildernek, az ügyfélalkalmazás egy hozzáférési jogkivonatot biztosít, amelyet a Static Web Apps JSON-vá alakít át:

{
  "identityProvider": "azuread",
  "userId": "d75b260a64504067bfc5b2905e3b8182",
  "userDetails": "username",
  "userRoles": ["anonymous", "authenticated", "author"]
}

Mivel a Data API Builder egyetlen szerepkör kontextusában értékeli ki a kéréseket, alapértelmezés szerint a rendszerszerepkör authenticated kontextusában értékeli ki a kérést.

Ha az ügyfélalkalmazás kérése a HTTP-fejlécet X-MS-API-ROLE is tartalmazza az értékkel author, a rendszer kiértékeli a kérést a author szerepkör kontextusában. Példakérés hozzáférési jogkivonattal és X-MS-API-ROLE HTTP-fejléccel:

curl -k -r GET -H 'Authorization: Bearer ey...' -H 'X-MS-API-ROLE: author' https://localhost:5001/api/Book

Fontos

Az ügyfélalkalmazás kérését a rendszer elutasítja, ha a megadott hozzáférési jogkivonat jogcíme roles nem tartalmazza a fejlécben felsorolt szerepkört X-MS-API-ROLE .

Engedélyek

Az engedélyek leírása:

  • Ki kérhet kéréseket egy entitásnál szerepkör-tagság alapján?
  • Milyen műveleteket (létrehozás, olvasás, frissítés, törlés, végrehajtás) hajthat végre egy felhasználó?
  • Mely mezők érhetők el egy adott művelethez?
  • Milyen további korlátozások vonatkoznak a kérés által visszaadott eredményekre?

Az engedélyek meghatározásának szintaxisát a futtatókörnyezet konfigurációs cikkében ismertetjük.

Fontos

Egy entitás engedélykonfigurációjában több szerepkör is definiálható. A kérések kiértékelése azonban csak egyetlen szerepkör kontextusában történik:

  • Alapértelmezés szerint a rendszerszerepkör anonymous vagy authenticated
  • Amikor belefoglalásra kerül, a szerepkör a X-MS-API-ROLE HTTP-fejlécben állítható be.

Alapértelmezés szerint biztonságos

Az entitások alapértelmezés szerint nincsenek konfigurálva engedélyekkel, ami azt jelenti, hogy senki sem férhet hozzá az entitáshoz. A Data API Builder emellett figyelmen kívül hagyja az adatbázis-objektumokat, ha nem hivatkoznak rájuk a futtatókörnyezet konfigurációjában.

Az engedélyeket explicit módon kell konfigurálni

Az entitáshoz való hitelesítés nélküli hozzáférés engedélyezéséhez a anonymous szerepkört explicit módon kell definiálni az entitás engedélyeiben. Az entitás engedélyei például kifejezetten úgy van beállítva, book hogy engedélyezve legyen a hitelesítés nélküli olvasási hozzáférés:

"book": {
  "source": "dbo.books",
  "permissions": [{
    "role": "anonymous",
    "actions": [ "read" ]
  }]
}

Az entitások engedélydefiníciójának egyszerűsítése érdekében tegyük fel, hogy ha nincs külön engedély a authenticated szerepkörhöz, akkor a rendszer a szerepkörhöz anonymous definiált engedélyeket használja. A book korábban bemutatott konfiguráció lehetővé teszi, hogy bármely névtelen vagy hitelesített felhasználó olvasási műveleteket hajtson végre az book entitáson.

Ha az olvasási műveleteket csak hitelesített felhasználókra kell korlátozni, a következő engedélykonfigurációt kell beállítani, ami a nem hitelesített kérések elutasítását eredményezi:

"book": {
  "source": "dbo.books",
  "permissions": [{
    "role": "authenticated",
    "actions": [ "read" ]
  }]
}

Egy entitás nem igényel és nincs előre konfigurálva a anonymous és authenticated szerepkörök engedélyeivel. Egy vagy több felhasználói szerepkör definiálható az entitás engedélykonfigurációjában, és minden más definiálatlan szerepkör, rendszer vagy felhasználó automatikusan megtagadja a hozzáférést.

Az alábbi példában a felhasználói szerepkör administrator az entitás egyetlen definiált szerepköre book . A felhasználónak tagja kell legyen a administrator szerepkörnek, és ezt a szerepkört bele kell foglalnia a X-MS-API-ROLE HTTP-fejlécbe, hogy az book entitáson működhessen.

"book": {
  "source": "dbo.books",
  "permissions": [{
    "role": "administrator",
    "actions": [ "*" ]
  }]
}

Megjegyzés:

A GraphQL-lekérdezések hozzáférés-vezérlésének kikényszerítéséhez a Data API Builder Azure Cosmos DB-vel való használatakor a megadott @authorize kell használnia az irányelvet. A GraphQL-lekérdezések GraphQL-mutációi és szűrői esetében azonban a hozzáférés-vezérlést a korábban ismertetett engedélykonfiguráció továbbra is kikényszeríti.

Műveletek

A műveletek egy szerepkör hatókörén belüli entitás akadálymentességét írják le. A műveletek egyedileg vagy a helyettesítő karakterrel is megadhatóak: * (csillag). A helyettesítő karakter parancsikonja az entitástípushoz támogatott összes műveletet jelöli:

  • Táblák és nézetek: create, read, update, delete
  • Tárolt eljárások: execute

A műveletekkel kapcsolatos további információkért tekintse meg a konfigurációs fájl dokumentációját.

Mezőhozzáférés

Konfigurálhatja, hogy mely mezők legyenek elérhetők egy művelethez. Beállíthatja például, hogy mely mezőket vegye fel és zárja ki a read műveletből.

Az alábbi példa megakadályozza, hogy a free-access szerepkörben lévő felhasználók olvasási műveleteket hajtsanak végre.Column3 Column3 A GET-kérelmekre (REST-végpontra) vagy lekérdezésekre (GraphQL-végpontra) mutató hivatkozások elutasított kérést eredményeznek:

    "book": {
      "source": "dbo.books",
      "permissions": [
        {
          "role": "free-access",
          "actions": [
            "create",
            "update",
            "delete",
            {
              "action": "read",
              "fields": {
                "include": [ "Column1", "Column2" ],
                "exclude": [ "Column3" ]
              }
            }
          ]
        }
      ]
    }

Megjegyzés:

A GraphQL-lekérdezések hozzáférés-vezérlésének kikényszerítéséhez a Data API Builder Azure Cosmos DB-vel való használatakor a megadott @authorize kell használnia az irányelvet. A GraphQL-lekérdezések GraphQL-mutációi és szűrői esetében azonban a hozzáférés-vezérlést továbbra is az itt ismertetett engedélykonfiguráció kényszeríti ki.

Elemszintű biztonság

Az adatbázisházirend-kifejezések lehetővé teszik az eredmények további korlátozását. Az adatbázis-szabályzatok kifejezéseket fordítanak le az adatbázison végrehajtott lekérdezési predikátumokra. Az adatbázisházirend-kifejezések a következő műveletekhez támogatottak:

  • létrehoz
  • beolvasás
  • frissít
  • töröl

Figyelmeztetés

A tárolt eljárásokhoz használt végrehajtási művelet nem támogatja az adatbázis-szabályzatokat.

Megjegyzés:

A CosmosDB for NoSQL jelenleg nem támogatja az adatbázis-szabályzatokat.

Az adatbázis-szabályzatokkal kapcsolatos további információkért tekintse meg a konfigurációs fájl dokumentációját.

példa

Egy adatbázis-szabályzat, amely korlátozza a read szerepkörhöz tartozó consumer műveletet, hogy csak olyan rekordokat adjon vissza, amelyeknek a címe "Mintacím".

{
  "role": "consumer",
  "actions": [
    {
      "action": "read",
      "policy": {
        "database": "@item.title eq 'Sample Title'"
      }
    }
  ]
}