Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makale, Azure API Management'ı (APIM) Microsoft Planet Computer Pro GeoCatalog önünde API proxy'si olarak ayarlama işleminde size yol gösterir. Bu yapılandırmayla şunları yapabilirsiniz:
- Anonim erişimi etkinleştirme: Arayanların kendi Microsoft Entra kimlik bilgilerine ihtiyacı yoktur. APIM, yönetilen kimlik kullanarak GeoCatalog'da kendi adına kimlik doğrulaması yapar.
- Non-Entra Authentication: çağıranlar, Entra tabanlı olmayan kimlik doğrulama yöntemlerini destekleyebilir. APIM, yönetilen bir kimlik kullanarak GeoCatalog'da kendi adına kimlik doğrulaması yapar.
- Koleksiyon düzeyinde erişim denetimini zorunlu tutma: GeoCatalogs koleksiyon düzeyinde rol tabanlı erişim denetimini (RBAC) yerel olarak desteklemese de, proxy aracılığıyla hangi Spatiotemporal Erişim Kataloğu (STAC) koleksiyonlarının görünür olduğunu kısıtlayın.
Aşağıdaki diyagramda APIM proxy'si eklemeden önceki ve sonraki mimari gösterilmektedir:
Önce Her arayan doğrudan GeoCatalog'da kimlik doğrulaması yapar:
caller ──(Entra token)──► GeoCatalog
Sonra APIM, arayanlarla GeoCatalog arasında yer alıp kimlik doğrulaması ve erişim denetimini işler:
caller ──(anonymous / APIM Subscription Keys)──► APIM ──(managed identity token)──► GeoCatalog
Prerequisites
- Aktif bir aboneliğe sahip bir Azure hesabı. Ücretsiz bir hesap oluşturun.
- Mevcut bir GeoCatalog kaynağı.
- Azure API Management örneği.
- APIM örneğine, GeoCatalog kaynağı üzerinde GeoCatalog Reader rol ataması ile kullanıcı atamalı yönetilen kimlik atandı. Rol atama yönergeleri için bkz. Erişimi yönetme .
Yönetilen kimliği APIM'e atama
APIM'nin GeoCatalog'unuzda kimlik doğrulamasından önce kullanıcı tarafından atanan yönetilen kimliği APIM örneğiyle ilişkilendirmeniz gerekir.
- Azure portalında API Management örneğine gidin.
- Sol kenar çubuğundan Kimlik'i seçin.
- Kullanıcı tarafından atanan sekmesini seçin.
- Ekle'yi ve ardından GeoCatalog'unuzda GeoCatalog Okuyucusu rolüne sahip kullanıcı tarafından atanan yönetilen kimliği seçin.
- Onaylamak için Ekle'yi seçin.
APIM'de API oluşturma
APIM'de GeoCatalog arka ucuna istekleri yönlendiren yeni bir API tanımlayın.
APIM örneğinizde sol kenar çubuğundan API'ler'i seçin.
+ API HTTP Ekle'yi> seçin.
API'yi aşağıdaki ayarlarla yapılandırın:
Setting Değer Görüntü adı Açıklayıcı bir ad (örneğin, GeoCatalog API)Web hizmeti URL'si GeoCatalog uç noktanız (örneğin, https://<name>.<id>.<region>.geocatalog.spatio.azure.com)URL düzeni HTTPS API URL uzantısı Boş bırakın (kök yol) Abonelik gerekiyor Hayır, Anonim erişim için; Evet, Abonelik Anahtarı tabanlı erişim için Oluştur'i seçin.
API işlemlerini tanımlama
GeoCatalog API yüzeyiyle eşleştirmek için aşağıdaki işlemleri ekleyin. Joker karakter (/*) işlemleri tüm eşleşen istekleri arka uca iletir. Açık koleksiyon işlemleri, daha sonra erişim denetimi için koleksiyona özgü ilkeler uygulamanıza olanak tanır.
| Ekran adı | Yöntem | URL şablonu |
|---|---|---|
| GET | GET | /* |
| Koleksiyon öğelerini alma | GET | /stac/collections/{collection_id}/items |
| Tek koleksiyon alma | GET | /stac/collections/{collection_id} |
| Koleksiyon alt kaynaklarına erişim sağlama | GET | /stac/collections/{collection_id}/* |
| PAYLAŞ | PAYLAŞ | /* |
Her işlemi eklemek için:
- Oluşturduğunuz API'yi seçin.
- + İşlem ekle'yi seçin.
- Önceki tablodaki Görünen ad, Yöntem ve URL şablonunu girin.
- Kaydetseçeneğini seçin.
API düzeyi ilkesini yapılandırma
API düzeyinde ilke, API'nin tamamı için kimlik doğrulamasını ve URL yeniden yazmayı işler. Bu ilke, kullanıcı tarafından atanan yönetilen kimlikten bir belirteç alır ve GeoCatalog arka uç sistemine iletilen her isteğe iliştirir.
- Oluşturduğunuz API'yi ve ardından Tüm işlemler'i seçin.
- Gelen işleme bölümünde /< (kod düzenleyicisi) simgesini seçin>.
- İlke içeriğini aşağıdaki ilkeyle değiştirin:
<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>
Aşağıdaki yer tutucuları değiştirin:
| Yer tutucu | Değer |
|---|---|
<managed-identity-client-id> |
APIM'ye atanan kullanıcı tarafından atanan yönetilen kimliğin istemci kimliği |
<name>.<id>.<region> |
GeoCatalog uç nokta bileşenleriniz |
<apim-name> |
APIM örneğinizin adı |
Aşağıdaki tabloda her ilke öğesi açıklanmaktadır:
| İlke öğesi | Amaç |
|---|---|
authentication-managed-identity |
Belirtilen yönetilen kimliği kullanarak hedef kitle için https://geocatalog.spatio.azure.com bir belirteç alır ve giden isteğe ekler. |
set-header (sil Accept-Encoding) |
Gelen isteklerden Accept-Encoding başlığını kaldırır. Bkz Accept-Encoding'yi Neden Kaldırma. |
find-and-replace |
Yanıt gövdelerindeki GeoCatalog arka uç URL'sini APIM ağ geçidi URL'sine yeniden yazar. Bu yeniden yazma olmadan, STAC bağlantıları (self, root, parentvb.) arka uç URL'sini arayanlara gösterir. |
Neden Accept-Encoding'i çıkar
Python requests ve httpx gibi istemciler varsayılan olarak Accept-Encoding: gzip, deflate gönderir. Arka uç bu üst bilgiyi aldığında sıkıştırılmış bir yanıt döndürür.
find-and-replace gibi APIM giden ilkeleri, ham yanıt gövdesi üzerinde çalışır ve sıkıştırmasını açamaz, bu yüzden sessizce hiçbir işlem yapmaz. Üstbilgiyi kaldırmak, arka uçtan çıkış politikalarının işleyebileceği sıkıştırılmamış bir yanıt döndürülmesini zorlar.
Note
curl ve wget varsayılan olarak Accept-Encoding göndermiyor. Bu, bu araçlarla test ettiğinizde giden ilkelerin görünüşe göre düzgün çalıştığı anlamına gelir. Tutarsızlık yalnızca sıkıştırma isteyen istemcilerle ortaya çıkar.
Koleksiyon düzeyinde erişim denetimini zorunlu kılma
Varsayılan olarak, GeoCatalog tüm koleksiyonlarını kimliği doğrulanmış arayanlara gösterir. APIM aracılığıyla hangi koleksiyonların görünür olduğunu kısıtlamak için, geniş STAC bulmayı engelleyen ve izin verilenler listesini zorlayan işlem düzeyi ilkeleri uygulayın.
İzin verilen koleksiyonları tanımlama
İzin verilen koleksiyon kimliklerinin listesini depolamak için APIM'de adlandırılmış bir değer oluşturun:
- APIM örneğinizde sol kenar çubuğundan Adlandırılmış değerler'i seçin.
- + Ekle'yi seçin.
-
Ad'ı olarak
allowed-collectionsayarlayın. -
Değer'i izin verilen koleksiyon kimliklerinin virgülle ayrılmış bir listesine ayarlayın (örneğin,
sentinel-2-l2a,landsat-8-c2-l2). - Kaydetseçeneğini seçin.
Giriş sayfasını ve koleksiyon listesini engelleme
Katalogdaki tüm koleksiyonları gösteren yolları engelleyin. Aşağıdaki işlemleri ekleyin ve 404 öğesini hemen döndüren bir ilke ekleyin:
| Ekran adı | Yöntem | URL şablonu |
|---|---|---|
| Blok kökü | GET | / |
| Koleksiyonları engelle | GET | /stac/collections |
Her iki işleme de aşağıdaki işlem düzeyi ilkesini uygulayın:
<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>
STAC aramada izin verilen koleksiyonları zorunlu kılma
STAC /stac/search uç noktası, GET üzerinde sorgu dizesi olarak veya POST üzerindeki JSON gövdesinde bir collections parametre kabul eder. Katalogdaki her koleksiyonda koruyucu önlemler olmadan bir kullanıcı arama yapabilir. Aşağıdaki ilkeler yalnızca izin verilen kümedeki koleksiyonların istendiğini doğrular.
İki işlem ekleyin:
| Ekran adı | Yöntem | URL şablonu |
|---|---|---|
| GET araması | GET | /stac/search |
| POST araması | PAYLAŞ | /stac/search |
GET /stac/search ilkesi
Bu ilke sorgu parametresini collections doğrular. Virgülle ayrılmış her değer izin verilen kümede olmalıdır. Parametresi olmayan collections istekler ile 403 Forbiddenreddedilir.
GET arama işlemine aşağıdaki ilkeyi uygulayın:
<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
APIM ilke ifadeleri kısıtlı bir C# ortamında çalışır. Çift tırnakların ifadede çalışabilmesi için condition='@{...}' (tek tırnaklı öznitelik) kullanın. Genel tür parametrelerinden (örneğin, GetValueOrDefault<string>) ve LINQ lambda ifadelerinden kaçının; bunun yerine açık tür dönüşümleri ve foreach döngüleri kullanın.
POST /stac/search ilkesi
Bu ilke JSON gövdesini ayrıştırır ve diziyi collections doğrular. Parametresi olmayan collections istekler ile 403 Forbiddenreddedilir.
POST arama işlemine aşağıdaki ilkeyi uygulayın:
<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>
Koleksiyon uç noktaları üzerinde izin verilen koleksiyonları zorunlu kılma
Açık işlemler olmadan, GET /stac/collections/sentinel-2-l2a veya GET /stac/collections/sentinel-2-l2a/items gibi istekler joker karakteri GET /*'ye düşer ve herhangi bir koleksiyon düzeyi denetimi olmadan arka uca ulaşır.
collection_id bölümünde oluşturduğunuz aşağıdaki işlemlere karşı {{allowed-collections}} doğrulayan path-parameter ilkesini uygulayın:
| Ekran adı | Yöntem | URL şablonu |
|---|---|---|
| Tek koleksiyon alma | GET | /stac/collections/{collection_id} |
| Koleksiyon alt kaynaklarına erişim sağlama | GET | /stac/collections/{collection_id}/* |
| Koleksiyon öğelerini alma | GET | /stac/collections/{collection_id}/items |
Aşağıdaki ilkeyi üç işlem için de uygulayın:
<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>
SAS belirteci yollarında izin verilen koleksiyonları zorunlu kılma
GeoCatalog SAS API'si, çağıranların depolama belirteçleri oluşturmasına ve varlıkHREF'lerini imzalamasına olanak tanır. Çağıran, kısıtlama olmaksızın herhangi bir koleksiyon için belirteçler alabilir. Aşağıdaki ilkeler yalnızca izin verilen koleksiyonlara erişilmesini sağlar.
Aşağıdaki işlemleri ekleyin:
| Ekran adı | Yöntem | URL şablonu |
|---|---|---|
| SAS belirteci al | GET | /sas/token/{collection_id} |
| SAS işaretini engelle | GET | /sas/sign |
404 Engelleme ilkesini (kök ve koleksiyon bloğuyla aynı) SAS imzasını engelle işlemine uygulayın. Arayanlar bunun yerine koleksiyon düzeyinde SAS belirteçleri almak için kullanmalıdır /sas/token/{collection_id} .
GET SAS belirteci işlemine aşağıdaki ilkeyi uygulayın:
<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>
Veri yollarında izin verilen koleksiyonları zorunlu kılma
/data/mosaic/ Uç noktalar tayl işleme, sınırlayıcı kutu kırpmaları ve arama kaydı hizmeti sağlar. İki ilke grubu gereklidir:
-
Arama kaydı - JSON gövdesindeki
collectionsdizisini doğrulayın. -
Diğer tüm koleksiyon yolları - yol parametresini
collectionIddoğrulayın.
Aşağıdaki işlemleri ekleyin:
| Ekran adı | Yöntem | URL şablonu |
|---|---|---|
| POST yazmaç araması | PAYLAŞ | /data/mosaic/register |
| GET veri toplama | GET | /data/mosaic/collections/{collectionId}/* |
POST /data/mosaic/register ilkesi
Bu ilke, JSON gövdesindeki diziyi collections izin verilen kümeye göre doğrular. Parametresi olmayan collections istekler reddedilir.
<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}/* politika
Bu ilke, path parametresini collectionId izin verilen kümeye göre doğrular. Bu ilkeyi her iki GET veri toplama işlemine de uygulayın.
<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>
Sık sorulan sorular
İzin verilen koleksiyonlar listesini nasıl güncelleştirebilirim?
allowed-collections APIM örneğindeki adlandırılmış değeri düzenleyin. İlke değişikliği gerekmez.
Çağıran koleksiyon parametresini atlarsa ne olur?
İstek 403 Forbidden ile reddedilir. Arayanlar her zaman hangi koleksiyonları aramak istediklerini belirtmelidir.