Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk végigvezeti az Azure API Management (APIM) API-proxyként való beállításán a Microsoft Planetary Computer Pro GeoCatalog előtt. Ezzel a konfigurációval a következőt teheti:
- Névtelen hozzáférés engedélyezése: a hívóknak nincs szükségük saját Microsoft Entra-hitelesítő adataikra. Az APIM felügyelt identitás használatával hitelesíti a GeoCatalogot a nevükben.
- Nem Entra-hitelesítés: a hívók támogathatják a nem Entra-alapú hitelesítési módszereket. Az APIM felügyelt identitás használatával hitelesíti a GeoCatalogot a nevükben.
- Gyűjteményszintű hozzáférés-vezérlés kényszerítése: korlátozza, hogy mely Spatiotemporal Access Catalog (STAC) gyűjtemények láthatók a proxyn keresztül, annak ellenére, hogy a GeoCatalogs natív módon nem támogatja a gyűjteményszintű szerepköralapú hozzáférés-vezérlést (RBAC).
Az alábbi ábra az APIM-proxy hozzáadása előtti és utáni architektúrát mutatja be:
Előtt Minden hívó közvetlenül hitelesíti a GeoCatalogot:
caller ──(Entra token)──► GeoCatalog
Után Az APIM a hívók és a GeoCatalog között helyezkedik el, és kezeli a hitelesítést és a hozzáférés-vezérlést:
caller ──(anonymous / APIM Subscription Keys)──► APIM ──(managed identity token)──► GeoCatalog
Prerequisites
- Egy Azure-fiók, aktív előfizetéssel. Hozzon létre egy fiókot ingyenesen.
- Egy meglévő GeoCatalog-erőforrás.
- Egy Azure API Management-példány.
- Felhasználó által hozzárendelt felügyelt identitás, amely az APIM-példányhoz van rendelve, a GeoCatalog-erőforrás feletti GeoCatalog Reader szerepkör-hozzárendelésével. A szerepkör-hozzárendelési utasításokhoz lásd a Hozzáférés kezelése című témakört.
Felügyelt identitás hozzárendelése az APIM-hez
Ahhoz, hogy az APIM hitelesíthesse magát a GeoCatalogban, társítania kell a felhasználó által hozzárendelt felügyelt identitást az APIM-példánysal.
- Az Azure Portalon keresse meg az API Management-példányt.
- Válassza az Identitás lehetőséget a bal oldali oldalsávon.
- Válassza a Felhasználó által hozzárendelt lapot.
- Válassza a Hozzáadás lehetőséget, majd válassza ki azt a felhasználó által hozzárendelt felügyelt identitást, amelynek GeoCatalog-olvasó szerepköre van a GeoCatalogon.
- A megerősítéshez válassza a Hozzáadás lehetőséget.
Az API létrehozása az APIM-ben
Definiáljon egy új API-t az APIM-ben, amely a GeoCatalog-háttérrendszernek küldi a kéréseket.
Az APIM-példányban válassza az API-kat a bal oldali oldalsávon.
Válassza a + API hozzáadása>HTTP lehetőséget.
Konfigurálja az API-t a következő beállításokkal:
Setting Érték Megjelenített név Leíró név (például GeoCatalog API)A webszolgáltatás URL-címe A GeoCatalog-végpont (például https://<name>.<id>.<region>.geocatalog.spatio.azure.com)URL-séma HTTPS API URL-címének utótagja Hagyja üresen (gyökérútvonal) Előfizetés szükséges Nem, névtelen hozzáféréshez; Igen, előfizetési kulcsalapú hozzáférés esetén Válassza a Create gombot.
API-műveletek definiálása
Adja hozzá a következő műveleteket a GeoCatalog API felületének megfelelően. A helyettesítő (/*) műveletek minden egyező kérést továbbítanak a háttérrendszernek. Az explicit gyűjtési műveletek lehetővé teszik, hogy később gyűjteményspecifikus szabályzatokat alkalmazzon a hozzáférés-vezérléshez.
| Megjelenített név | Módszer | URL-sablon |
|---|---|---|
| GET | GET | /* |
| Gyűjteményelemek lekérése | GET | /stac/collections/{collection_id}/items |
| Egyetlen gyűjtemény lekérése | GET | /stac/collections/{collection_id} |
| Gyűjtemény-alerőforrások lekérése | GET | /stac/collections/{collection_id}/* |
| poszt | poszt | /* |
Az egyes műveletek hozzáadása:
- Válassza ki a létrehozott API-t.
- Válassza a + Művelet hozzáadása menüpontot.
- Adja meg az előző táblázat Megjelenítési nevét, metódusát és URL-sablont .
- Válassza az Mentésgombot.
Az API-szintű szabályzat konfigurálása
Az API-szintű szabályzat a teljes API hitelesítését és URL-átírását kezeli. Ez a szabályzat jogkivonatot szerez be a felhasználó által hozzárendelt felügyelt identitásból, és minden, a GeoCatalog háttérrendszernek továbbított kéréshez csatolja.
- Válassza ki a létrehozott API-t, majd válassza az Összes művelet lehetőséget.
- A Bejövő feldolgozás szakaszban válassza a </> (kódszerkesztő) ikont.
- Cserélje le a szabályzat tartalmát a következő szabályzatra:
<policies>
<inbound>
<base />
<authentication-managed-identity
resource="https://geocatalog.spatio.azure.com"
client-id="<managed-identity-client-id>" />
<set-header name="Accept-Encoding"
exists-action="delete" />
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
<find-and-replace
from="https://<name>.<id>.<region>.geocatalog.spatio.azure.com"
to="https://<apim-name>.azure-api.net" />
</outbound>
<on-error>
<base />
</on-error>
</policies>
Cserélje le a következő helyőrzőket:
| Placeholder | Érték |
|---|---|
<managed-identity-client-id> |
Az APIM-hez hozzárendelt, felhasználó által létrehozott felügyelt identitás ügyfélazonosítója |
<name>.<id>.<region> |
A GeoCatalog-végpont összetevői |
<apim-name> |
Az APIM-példány neve |
Az alábbi táblázat az egyes szabályzatelemeket ismerteti:
| Szabályzatelem | Alkalmazás célja |
|---|---|
authentication-managed-identity |
Jogkivonatot szerez be a célközönség számára a https://geocatalog.spatio.azure.com megadott felügyelt identitás használatával, és csatolja azt a kimenő kéréshez. |
set-header (törlés Accept-Encoding) |
Eltávolítja a fejlécet a Accept-Encoding bejövő kérelmekből. Lásd Miért távolítsa el az Accept-Encoding. |
find-and-replace |
A GeoCatalog háttérrendszer URL-címét a választörzsekben az APIM átjáró URL-címére írja át. Átírás nélkül a STAC-hivatkozások (self, root, parent, stb.) hozzáférhetővé teszik a háttéri URL-címet a hívók számára. |
Miért távolítsuk el az Accept-Encoding-et
A kliensek, mint például a Python requests és httpx, alapértelmezés szerint Accept-Encoding: gzip, deflate küldenek. Amikor a háttérrendszer megkapja ezt a fejlécet, tömörített választ ad vissza. Az APIM kimenő szabályzatai, mint például find-and-replace, a nyers válasz törzsén működnek, és nem tudják kicsomagolni, ezért észrevétlenül nem tesznek semmit. A fejléc eltávolításával a háttérrendszer egy tömörítetlen választ ad vissza, amelyet a kimenő szabályok feldolgozhatnak.
Note
curl és wget ne küldjön Accept-Encoding alapértelmezés szerint. Ez azt jelenti, hogy a kimenő szabályzatok megfelelően működnek, amikor ezekkel az eszközökkel teszteli őket. Az inkonzisztencia csak azoknál az ügyfeleknél jelentkezik, akik tömörítést kérnek.
Gyűjteményszintű hozzáférés-vezérlés kényszerítése
A GeoCatalog alapértelmezés szerint minden gyűjteményét elérhetővé teszi bármely hitelesített hívó számára. Ha korlátozni szeretné, hogy mely gyűjtemények láthatók az APIM-on keresztül, alkalmazzon olyan műveleti szintű szabályzatokat, amelyek blokkolják a széles körű STAC-felderítést, és engedélyezési listát kényszerítenek ki.
Az engedélyezett gyűjtemények meghatározása
Hozzon létre egy elnevezett értéket az APIM-ben az engedélyezett gyűjteményazonosítók listájának tárolásához:
- Az APIM-példányban válassza az Elnevezett értékeket a bal oldali oldalsávon.
- Válassza ki a -t, és adja hozzá a-et.
- Állítsa be a nevet a következőre
allowed-collections: . - Állítsa be az Értéket a megengedett gyűjteményazonosítók vesszővel tagolt listájára (például
sentinel-2-l2a,landsat-8-c2-l2). - Válassza az Mentésgombot.
A kezdőlap és a gyűjtemények listájának letiltása
Tiltsa le a katalógus összes gyűjteményét megjelenítő útvonalakat. Adja hozzá a következő műveleteket, és csatoljon egy szabályzatot, amely azonnal visszaküldi 404.
| Megjelenített név | Módszer | URL-sablon |
|---|---|---|
| Gyökér blokkolása | GET | / |
| Gyűjtemények blokkolása | GET | /stac/collections |
Alkalmazza a következő műveletszintű szabályzatot mindkét műveletre:
<policies>
<inbound>
<base />
<return-response>
<set-status code="404" reason="Not Found" />
</return-response>
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>
Engedélyezett gyűjtemények alkalmazása a STAC-keresés során
A STAC-végpont /stac/search egy paramétert collections fogad el – lekérdezési sztringként a GET-en vagy a POST JSON-törzsében. Védőkorlátok nélkül a hívó a katalógus összes gyűjteményében kereshet. Az alábbi szabályzatok ellenőrzik, hogy csak az engedélyezett készletből származó gyűjtemények kérve vannak-e.
Két művelet hozzáadása:
| Megjelenített név | Módszer | URL-sablon |
|---|---|---|
| GET keresés | GET | /stac/search |
| POST-keresés | poszt | /stac/search |
GET /stac/keresési szabályzat
Ez a szabályzat ellenőrzi a lekérdezési paramétert collections . Minden vesszővel elválasztott értéknek az engedélyezett csoportban kell lennie. A paraméter nélküli collections kérelmeket a rendszer elutasítja a következővel 403 Forbidden: .
Alkalmazza a következő szabályzatot a GET keresési műveletre:
<policies>
<inbound>
<base />
<set-variable name="allowedCsv"
value="{{allowed-collections}}" />
<choose>
<when condition='@{
var allowed = ((string)context
.Variables["allowedCsv"])
.Trim().ToLower();
var raw = context.Request.Url.Query
.GetValueOrDefault("collections", "");
if (string.IsNullOrWhiteSpace(raw)) {
return true;
}
foreach (var c in raw.ToLower().Split(
new [] { "," },
StringSplitOptions.RemoveEmptyEntries))
{
if (!c.Trim().Equals(allowed)) {
return true;
}
}
return false;
}'>
<return-response>
<set-status code="403"
reason="Forbidden" />
<set-body>
Collection not allowed.
</set-body>
</return-response>
</when>
</choose>
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>
Note
Az APIM-szabályzatkifejezések korlátozott C# környezetben futnak. Használja condition='@{...}' az (egy idézőjeles) attribútumot, hogy a kettős idézőjelek a kifejezésen belül működhessenek. Kerülje az általános típusparamétereket (például GetValueOrDefault<string>) és a LINQ lambdákat – használjon explicit típuskonverziókat és foreach hurkokat.
POST /stac/keresési szabályzat
Ez a szabályzat elemzi a JSON-törzset, és ellenőrzi a tömböt collections . A paraméter nélküli collections kérelmeket a rendszer elutasítja a következővel 403 Forbidden: .
Alkalmazza a következő szabályzatot a POST keresési műveletre:
<policies>
<inbound>
<base />
<set-variable name="allowedCsv"
value="{{allowed-collections}}" />
<set-variable name="requestBody"
value="@(context.Request.Body
.As<string>(
preserveContent: true))" />
<choose>
<when condition='@{
var allowed = ((string)context
.Variables["allowedCsv"])
.Trim().ToLower();
var body = (string)context
.Variables["requestBody"];
var json = Newtonsoft.Json.Linq
.JObject.Parse(body);
var arr = json["collections"]
as Newtonsoft.Json.Linq.JArray;
if (arr == null || arr.Count == 0) {
return true;
}
foreach (var token in arr) {
if (!token.ToString().Trim()
.ToLower().Equals(allowed))
{
return true;
}
}
return false;
}'>
<return-response>
<set-status code="403"
reason="Forbidden" />
<set-body>
Collection not allowed.
</set-body>
</return-response>
</when>
</choose>
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>
Engedélyezett gyűjtemények alkalmazása a gyűjteményvégpontokon
Explicit műveletek nélkül a GET /stac/collections/sentinel-2-l2a vagy GET /stac/collections/sentinel-2-l2a/items jellegű kérések átterelődnek a GET /* helyettesítő karakterhez, és gyűjteményszintű ellenőrzés nélkül érik el a háttérrendszert. Alkalmazza az elérési útparaméter-szabályzatot, amely érvényesíti a collection_id a {{allowed-collections}}-tal szemben, az alábbi, a API-műveletek definiálása során létrehozott műveletekre:
| Megjelenített név | Módszer | URL-sablon |
|---|---|---|
| Egyetlen gyűjtemény lekérése | GET | /stac/collections/{collection_id} |
| Gyűjtemény-alerőforrások lekérése | GET | /stac/collections/{collection_id}/* |
| Gyűjteményelemek lekérése | GET | /stac/collections/{collection_id}/items |
Alkalmazza a következő szabályzatot mindhárom műveletre:
<policies>
<inbound>
<base />
<set-variable name="allowedCsv"
value="{{allowed-collections}}" />
<choose>
<when condition='@{
var allowed = ((string)context
.Variables["allowedCsv"])
.Trim().ToLower();
var collectionId = (string)context
.Request.MatchedParameters[
"collection_id"];
return !collectionId.Trim()
.ToLower().Equals(allowed);
}'>
<return-response>
<set-status code="403"
reason="Forbidden" />
<set-body>
Collection not allowed.
</set-body>
</return-response>
</when>
</choose>
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>
Az engedélyezett gyűjtemények alkalmazása a SAS jogkivonat útvonalain
A GeoCatalog SAS API lehetővé teszi, hogy a hívók tárjogkivonatokat hozzanak létre, és aláírják az objektum HREF-eit. Korlátozások nélkül a hívó bármilyen gyűjteményhez tokeneket szerezhet be. Az alábbi szabályzatok biztosítják, hogy csak az engedélyezett gyűjtemények férhessenek hozzá.
Adja hozzá a következő műveleteket:
| Megjelenített név | Módszer | URL-sablon |
|---|---|---|
| SAS-jogkivonat lekérése | GET | /sas/token/{collection_id} |
| SAS jel blokkolása | GET | /sas/sign |
Alkalmazza a blokkolási 404 szabályzatot (ugyanaz, mint a gyökér- és gyűjteményblokk) a SAS aláírás blokkolása műveletre. A hívóknak ehelyett gyűjteményszintű SAS-jogkivonatokat kell /sas/token/{collection_id} beszerezniük.
Alkalmazza a következő szabályzatot a GET SAS-jogkivonat-műveletre :
<policies>
<inbound>
<base />
<set-variable name="allowedCsv"
value="{{allowed-collections}}" />
<choose>
<when condition='@{
var allowed = ((string)context
.Variables["allowedCsv"])
.Trim().ToLower();
var collectionId = (string)context
.Request.MatchedParameters[
"collection_id"];
return !collectionId.Trim()
.ToLower().Equals(allowed);
}'>
<return-response>
<set-status code="403"
reason="Forbidden" />
<set-body>
Collection not allowed.
</set-body>
</return-response>
</when>
</choose>
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>
Engedélyezett gyűjtemények szabályainak betartatása az adatútvonalakon
A /data/mosaic/ végpontok csempézési renderelést, határolókeret-kivágásokat és keresési regisztrációt biztosítanak. Két házirendcsoportra van szükség:
-
Keresés regisztrálása – ellenőrizze a
collectionstömböt a JSON-törzsben. -
Minden más gyűjtőútvonal – érvényesítse az elérési út paramétert
collectionId.
Adja hozzá a következő műveleteket:
| Megjelenített név | Módszer | URL-sablon |
|---|---|---|
| POST regisztrálási keresés | poszt | /data/mosaic/register |
| GET adatgyűjtés | GET | /data/mosaic/collections/{collectionId}/* |
POST /data/mozaik/regisztrációs szabályzat
Ez a szabályzat ellenőrzi a collections JSON törzs tömböt az engedélyezett készlettel szemben. A paraméter nélküli collections kérelmeket a rendszer elutasítja.
<policies>
<inbound>
<base />
<set-variable name="allowedCsv"
value="{{allowed-collections}}" />
<set-variable name="requestBody"
value="@(context.Request.Body
.As<string>(
preserveContent: true))" />
<choose>
<when condition='@{
var allowed = ((string)context
.Variables["allowedCsv"])
.Trim().ToLower();
var body = (string)context
.Variables["requestBody"];
var json = Newtonsoft.Json.Linq
.JObject.Parse(body);
var arr = json["collections"]
as Newtonsoft.Json.Linq.JArray;
if (arr == null || arr.Count == 0) {
return true;
}
foreach (var token in arr) {
if (!token.ToString().Trim()
.ToLower().Equals(allowed))
{
return true;
}
}
return false;
}'>
<return-response>
<set-status code="403"
reason="Forbidden" />
<set-body>
Collection not allowed.
</set-body>
</return-response>
</when>
</choose>
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>
GET /data/mozaik/collections/{collectionId}/* szabályzat
Ez a szabályzat hitelesíti az collectionId elérési út paraméterét az engedélyezett halmazhoz viszonyítva. Alkalmazza ezt a szabályzatot a GET adatgyűjtési műveletekre is.
<policies>
<inbound>
<base />
<set-variable name="allowedCsv"
value="{{allowed-collections}}" />
<choose>
<when condition='@{
var allowed = ((string)context
.Variables["allowedCsv"])
.Trim().ToLower();
var collectionId = (string)context
.Request.MatchedParameters[
"collectionId"];
return !collectionId.Trim()
.ToLower().Equals(allowed);
}'>
<return-response>
<set-status code="403"
reason="Forbidden" />
<set-body>
Collection not allowed.
</set-body>
</return-response>
</when>
</choose>
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>
Gyakori kérdések
Hogyan frissíthetem az engedélyezett gyűjtemények listáját?
Szerkessze a allowed-collections névvel ellátott értéket az APIM-példányban. Nincs szükség szabályzatmódosításra.
Mi történik, ha egy hívó kihagyja a gyűjtemények paraméterét?
A kérést a rendszer elutasítja a következővel 403 Forbidden: . A hívóknak mindig meg kell adniuk, hogy mely gyűjteményekben szeretnének keresni.