Condividi tramite


Configurare un'origine di acquisizione per Microsoft Planetary Computer Pro usando i token SAS

Il caricamento di nuovi dati nella risorsa GeoCatalog di Microsoft Planetary Computer Pro viene chiamato inserimento. Un GeoCatalog necessita di autorizzazioni o origini di inserimento per accedere ai dati archiviati esternamente alla risorsa GeoCatalog.   In questa guida si apprenderà come:

  • Creare un'origine di inserimento tramite il portale di Azure
  • Creare un'origine di inserimento tramite l'API Microsoft Planetary Computer Pro usando Azure Python SDK

Prerequisiti

Identità gestita e token SAS

Le identità gestite forniscono un'identità gestita automaticamente in Microsoft Entra ID per le applicazioni da usare per la connessione alle risorse che supportano l'autenticazione di Microsoft Entra.

Le firme di accesso condiviso creano credenziali di crittografia per l'accesso a una risorsa, ad esempio Archiviazione BLOB di Azure.

Le identità gestite sono un meccanismo più sicuro e automatizzato per stabilire l'accesso permanente a un account di archiviazione e sono l'approccio consigliato per fornire l'accesso sicuro all'archiviazione BLOB di Azure per l'inserimento dati.

Le identità gestite funzionano solo all'interno di un singolo tenant di Microsoft Entra; pertanto, l'approccio SAS Token è utile quando si trasferiscono dati da un account di archiviazione situato al di fuori del proprio tenant. L'inserimento dati è specifico di un contenitore BLOB e i token SAS della risorsa di archiviazione radice non sono consentiti.

Configurare un'origine di inserimento tramite l'interfaccia utente

I token SAS possono essere ottenuti in diversi modi; in questa guida, utilizziamo il portale Azure. Azure Storage Explorer è anche un approccio alternativo basato sull'interfaccia utente che funziona in un computer locale. Vedere Azure Storage Explorer

Nel portale di Azure trovare la risorsa di archiviazione contenente il contenitore BLOB di Azure con i dati da inserire in Planetary Computer Pro. In Impostazioni risorsa selezionare l'impostazione "Contenitori" in "Archiviazione dati".

Screenshot del portale di Azure che mostra la sezione Contenitori in Archiviazione dati per un account di archiviazione selezionato.

Seleziona il contenitore BLOB e richiedi un SAS Token

Selezionare il contenitore specifico da inserire, in questo esempio viene selezionato il contenitore "test".

Screenshot del portale di Azure che mostra la pagina di configurazione token di accesso condiviso per un contenitore BLOB selezionato.

Selezionare l'impostazione "Token di accesso condiviso" e aprire le impostazioni di configurazione.

La schermata del portale di Azure mostra la pagina di configurazione dei token di accesso condiviso per un contenitore Blob selezionato. La pagina include campi per l'impostazione delle autorizzazioni, dell'orario di inizio e di scadenza e pulsanti per generare il token SAS e l'URL.

Verificare che queste impostazioni siano configurate correttamente:

  • Autorizzazioni = Lettura (verificare che non siano selezionate altre opzioni)
  • La validità del token di firma di accesso condiviso copre il tempo necessario per l'inserimento dei dati (la procedura consigliata per la sicurezza consiste nell'avere questo token valido non più di sette giorni)

Dopo aver verificato le impostazioni, selezionare il pulsante "Genera token di firma di accesso condiviso e URL". Vengono visualizzati due elementi generati: il token SAS del BLOB e l'URL SAS del BLOB. Mantenere aperta la finestra o la scheda perché saranno necessarie queste informazioni per la sezione successiva.

Usare l'URL di Planetary Computer Pro per passare alla pagina di destinazione e selezionare la scheda "Impostazioni" dalla barra di spostamento.

Screenshot del portale GeoCatalog che mostra dove si trova il pulsante Impostazioni.

Creare un'origine di inserimento

  • Selezionare il pulsante Crea sorgente di ingestione
  • Immettere l'URL del contenitore BLOB nel campo URL contenitore
    • Includere solo l'URL e non includere la chiave. Il formato dell'URL deve essere:

      https://(Storage Resource Name).blob.core.windows.net/(Blob Container Name)

  • Taglia e incolla il token SAS nella casella Token credenziali.
    • Un token SAS è simile a una stringa di query. Includere tutto il testo che inizia con il ? simbolo:

      Esempio:?sv=<signed-version>&ss=<signed-services>&srt=<signed-resource-types>&sp=<signed-permissions>&se=<signed-expiry-time>&st=<signed-start-time>&spr=<signed-protocol>&sig=<signature>

  • Selezionare il pulsante Crea

Screenshot della pagina Planetary Computer Pro Settings che mostra un'origine di inserimento creata correttamente. Nella pagina vengono visualizzati l'URL del contenitore, il token delle credenziali e una data di scadenza per le credenziali.

L'origine di inserimento ora è configurata per supportare l'inserimento dei dati.

Se l'inserimento scade o è necessario aggiungere token SAS per un contenitore BLOB diverso, ripetere il processo precedente.

Configurare l'origine di inserimento per i token SAS tramite l'API

Le origini di inserimento possono anche essere impostate tramite l'API usando il servizio di archiviazione di Azure SDK e l'API Planetary Computer. Vedere la documentazione dell'API sulle origini di inserimento.

Il blocco di codice seguente importa le librerie necessarie e configura le variabili chiave.

  • Sostituire <your_container_url> con l'URL del contenitore BLOB di Azure contenente i dati da inserire.
  • Sostituire <your_geocatalog_url> con l'URL dell'endpoint della risorsa di Computer Planetario Pro.
  • Sostituire <token_duration_in_hours> con quante ore si vuole che il token di firma di accesso condiviso sia valido (il valore predefinito è 168 ore, ovvero 7 giorni).
import requests
from azure.identity import AzureCliCredential
from datetime import datetime, timedelta, timezone
import azure.storage.blob
from urllib.parse import urlparse

###################################

# Set Key Variables Here
## The Planetary Computer Pro App ID. Do not change.
MPCPRO_APP_ID = "https://geocatalog.spatio.azure.com"

## The API version. Do not change.
API_VERSION = "2025-04-30-preview"

## Replace with the URL of the Blob Container
CONTAINER_URL = "<your_container_url>" # e.g., "https://youraccount.blob.core.windows.net/yourcontainer"

## Replace with the URL of your GeoCatalog Resource
GEOCATALOG_URL = "<your_geocatalog_url>" # e.g., "https://yourgeocatalog.randomid.region.geocatalog.spatio.azure.com/"

## Replace with the desired duration of the token in hours (default: 168 hours = 7 days)
EXPIRATION_HOURS = <token_duration_in_hours> # e.g., 7 * 24

Il blocco di codice seguente utilizza l'SDK di Azure per richiedere un token SAS per il contenitore Blob specificato.

# Parse the container URL
parsed_url = urlparse(CONTAINER_URL)
account_url = f"{parsed_url.scheme}://{parsed_url.netloc}"
account_name = parsed_url.netloc.split(".")[0]
container_name = parsed_url.path.lstrip("/")

# Login to Azure using the Azure CLI
credential = azure.identity.AzureCliCredential()

# Set up Blob Service Client
with azure.storage.blob.BlobServiceClient(
        account_url=account_url,
        credential=credential,
    ) as blob_service_client:
        now = datetime.now(timezone.utc).replace(microsecond=0)
        key = blob_service_client.get_user_delegation_key(
            key_start_time=now + timedelta(hours=-1),
            key_expiry_time=now + timedelta(hours = EXPIRATION_HOURS), )

# Generate the SAS token
sas_token = azure.storage.blob.generate_container_sas(
    account_name=account_name,
    container_name=container_name,
    user_delegation_key=key,
    permission=azure.storage.blob.ContainerSasPermissions(
        read=True,
        list=True,
    ),
    start=now + timedelta(hours=-1),
    expiry=now + timedelta(hours = EXPIRATION_HOURS),)

Il blocco di codice successivo usa l'API Planetary Computer Pro per pubblicare le credenziali.

# Obtain an access token
credential = AzureCliCredential()
access_token = credential.get_token(f"{MPCPRO_APP_ID}/.default")

# Payload for the POST request
payload = {
    "sourceType": "SasToken",
    "connectionInfo": {
        "containerUrl": CONTAINER_URL,
        "sasToken": sas_token,
    },
}

# STAC Collection API endpoint
endpoint = f"{GEOCATALOG_URL}/inma/ingestion-sources"

# Make the POST request
response = requests.post(
    endpoint,
    json=payload,
    headers={"Authorization": f"Bearer {access_token.token}"},
    params={"api-version": API_VERSION},
)

# Print the response
if response.status_code == 201:
    print("Ingestion source created successfully")
else:
    print(f"Failed to create ingestion: {response.text}")

Passaggi successivi

Ora che è stata configurata l'identità gestita, è il momento di importare i dati.

Per l'inserimento di un singolo elemento:

Per l'ingestione in massa: