Limitare il traffico in entrata alle applicazioni e alle funzioni utilizzando restrizioni basate sul contesto

È possibile usare le restrizioni basate sul contesto (CBR) di IBM Cloud® per controllare il traffico di rete in entrata verso le applicazioni e le funzioni di IBM Cloud® Code Engine. Con CBR è possibile limitare l'accesso attraverso endpoint privati, endpoint pubblici o entrambi, garantendo una sicurezza flessibile a livello di rete per i carichi di lavoro. Invece di assegnare l'accesso in base all'identità, le restrizioni basate sul contesto verificano che una richiesta di accesso provenga da un contesto consentito configurato dall'utente. Potete limitare il traffico in entrata alle vostre applicazioni e funzioni all'interno dei vostri progetti Code Engine per proteggere i vostri progetti dal traffico in entrata indesiderato. Queste restrizioni basate sul contesto si applicano a livello di account, progetto, gruppo di risorse o sede (regione) e si applicano a tutte le applicazioni e funzioni che rientrano nell'ambito della restrizione.

Le restrizioni basate sul contesto per le applicazioni e le funzioni di Code Engine supportano i seguenti casi d'uso:

  • Bloccare completamente gli accessi pubblici: Limitare l'accesso alle applicazioni e alle funzioni solo attraverso il loro endpoint privato tramite CBR. Questo approccio elimina la necessità di configurare le impostazioni di visibilità degli endpoint delle applicazioni, poiché l'accesso pubblico viene bloccato a livello di rete. I carichi di lavoro rimangono accessibili da reti private (come le VPC) e da altri componenti di Code Engine all'interno dello stesso progetto.

  • Bloccare il pubblico e limitare il privato per IP: ottenere il massimo controllo sul traffico in entrata bloccando tutti gli accessi pubblici a Internet e limitando l'accesso degli endpoint privati a indirizzi IP o zone di rete specifici. Questo combina la capacità di restrizioni basate su IP per gli endpoint privati con la possibilità di bloccare interamente gli endpoint pubblici a livello di rete.

  • Isolare completamente i carichi di lavoro: Bloccate gli endpoint pubblici e privati per isolare completamente le applicazioni e le funzioni a livello di rete. Questo caso d'uso è ideale per scenari come i carichi di lavoro di elaborazione batch che hanno bisogno di effettuare solo connessioni in uscita, microservizi interni che comunicano esclusivamente attraverso code di messaggi o sottoscrizioni di eventi, o carichi di lavoro in fase di manutenzione in cui si desidera impedire temporaneamente tutto il traffico in entrata mantenendo l'applicazione distribuita.

Le restrizioni basate sul contesto si applicano solo alle applicazioni e alle funzioni perché questi carichi di lavoro espongono gli endpoint di rete. Le restrizioni basate sul contesto non si applicano a lavori e flotte, poiché non espongono alcun endpoint di rete.

Quando si proteggono le risorse di Code Engine con restrizioni basate sul contesto, oltre a limitare il traffico in entrata che si connette alle applicazioni o alle funzioni con regole basate sul contesto, è possibile limitare i contesti(percorsi di rete)da cui provengono le risorse di Code Engine gestire, ad esempio, la distribuzione o l'aggiornamento di applicazioni e segreti.

Le restrizioni basate sul contesto per Code Engine possono riguardare un singolo progetto, un intero gruppo di risorse o una località (regione). Per ulteriori informazioni sulle restrizioni basate sul contesto di IBM Cloud, consultare la sezione " Sicurezza a più livelli con restrizioni basate sul contesto ".

Quando una regola di restrizione basata sul contesto riguarda un gruppo di risorse o una posizione (regione), le restrizioni si applicano ai progetti esistenti. Se si crea un nuovo progetto nella stessa posizione o gruppo di risorse, le restrizioni vengono applicate automaticamente al nuovo progetto. Possono essere necessari alcuni minuti perché il nuovo progetto venga associato alle restrizioni. Per verificare l'applicazione delle regole CBR, controllare la sezione connettività dello stato del progetto nell'interfaccia utente, nella CLI o nell'API.

Creazione di una restrizione basata sul contesto per le risorse di Code Engine

È possibile creare restrizioni basate sul contesto per le risorse di Code Engine utilizzando la console IBM Cloud, la CLI, le API, gli SDK o Terraform. Per ulteriori informazioni sulla creazione di restrizioni basate sul contesto, vedere Creazione di restrizioni basate sul contesto. Le sezioni seguenti forniscono indicazioni specifiche per la creazione di restrizioni per le applicazioni e le funzioni di Code Engine.

IPv6 non sono supportate per Code Engine.

Aggiunta di una restrizione basata sul contesto tramite la console

Per creare una restrizione basata sul contesto, vedere Creazione di restrizioni basate sul contesto. I passi seguenti sono specifici per la creazione di una risorsa di Code Engine.

  1. Andare alla pagina Regole di restrizione basate sul contesto.

  2. Fare clic su Crea per creare una nuova regola per la restrizione basata sul contesto, a partire dal servizio.

  3. Selezionare Code Engine per Servizi e fare clic su Avanti per selezionare le API del servizio da proteggere.

  4. Limitate l'accesso per proteggere i carichi di lavoro delle applicazioni o delle funzioni di Code Engine selezionando l'opzione Piano dati per le API di servizio.

    Si definiscono le limitazioni del carico di lavoro a livello di piano dati, quindi selezionare almeno il servizio di piano dati. È possibile selezionare anche altre API di servizi o piattaforme.

    Fare clic su Avanti per impostare la restrizione per le risorse.

  5. Applicare la restrizione a un singolo progetto, all'intero gruppo di risorse o a una posizione (regione) in cui sono presenti più progetti. Applicare questo ambito nella sezione Risorse e fare clic su Revisione per procedere.

  6. Fare clic su Continua per aggiungere il contesto alla regola.

  7. Configurare i contesti per definire quali endpoint sono limitati. Scegliete uno dei seguenti scenari in base ai vostri requisiti di sicurezza:

    • Caso d'uso A: bloccare interamente il pubblico in entrata

      Utilizzate questo caso d'uso per rendere le vostre applicazioni e funzioni accessibili solo attraverso il loro endpoint privato, eliminando l'accesso pubblico a Internet a livello di rete.

      1. Impostate Endpoint su on.
      2. Selezionare Privato (consente il traffico).
      3. Lasciare deselezionato Pubblico (blocca il traffico).
      4. Lasciare le zone di rete vuote. Assicurarsi che in questa sezione non siano abilitate zone di rete, in modo che tutti gli endpoint privati rimangano accessibili.
      5. Fai clic su " Aggiungi " per creare un nuovo contesto.
    • Caso d'uso B: bloccare il pubblico e limitare il privato per IP

      Utilizzate questo caso d'uso per ottenere il massimo controllo bloccando tutti gli accessi pubblici a Internet e limitando l'accesso degli endpoint privati a indirizzi IP o zone di rete specifici.

      1. Impostate Endpoint su on.
      2. Selezionare Privato (consente il traffico).
      3. Lasciare deselezionato Pubblico (blocca il traffico).
      4. Selezionare le zone di rete che si desidera consentire per l'accesso privato (ad esempio, VPC o intervalli IP specifici).
      5. Fai clic su " Aggiungi " per creare un nuovo contesto.
    • Caso d'uso C: isolare completamente i carichi di lavoro

      Utilizzate questo caso d'uso per isolare completamente le vostre applicazioni e funzioni a livello di rete, bloccando gli endpoint pubblici e privati. È utile per i carichi di lavoro di elaborazione batch che effettuano solo connessioni in uscita, per i microservizi interni che comunicano esclusivamente attraverso code di messaggi o eventi o per i carichi di lavoro in fase di manutenzione.

      1. Impostate Endpoint su on.
      2. Lasciare Privato deselezionato (blocca il traffico).
      3. Lasciare deselezionato Pubblico (blocca il traffico).
      4. Lasciare le zone di rete vuote. Un contesto pubblico vuoto senza zone di rete blocca tutti gli accessi pubblici.
      5. Fai clic su " Aggiungi " per creare un nuovo contesto.
  8. Fare clic su Continua per fornire i dettagli della regola.

  9. Fornire una descrizione della regola.

  10. Selezionare Abilitato per l'applicazione.

  11. Controlla il riepilogo e clicca su “Crea ”.

Aggiunta di una restrizione basata sul contesto utilizzando la CLI

È possibile utilizzare la CLI di IBM Cloud per creare restrizioni basate sul contesto per le risorse di Code Engine. Prima di iniziare, assicurarsi di aver installato IBM Cloud CLI installata e il plug-in per le restrizioni basate sul contesto eseguendo ibmcloud plugin install cbr.

  • Caso d'uso A: bloccare interamente il pubblico in entrata

    Utilizzate questo caso d'uso per rendere le vostre applicazioni e funzioni accessibili solo attraverso il loro endpoint privato, eliminando l'accesso pubblico a Internet a livello di rete.

    Creare una regola che consenta l'accesso privato e blocchi quello pubblico:

    ibmcloud cbr rule-create --description "Block public inbound entirely" \
    --service-name codeengine \
    --api-types crn:v1:bluemix:public:context-based-restrictions::::api-type:data-plane \
    --context-attributes endpointType=private
    
  • Caso d'uso B: bloccare il pubblico e limitare il privato per IP

    Utilizzate questo caso d'uso per ottenere il massimo controllo bloccando tutti gli accessi pubblici a Internet e limitando l'accesso degli endpoint privati a indirizzi IP o zone di rete specifici. Per trovare gli ID di zona disponibili, eseguire ibmcloud cbr zones.

    Creare una regola che limiti l'accesso privato a zone specifiche e blocchi l'accesso pubblico:

    ibmcloud cbr rule-create --description "Block public and restrict private by IP" \
    --service-name codeengine \
    --api-types crn:v1:bluemix:public:context-based-restrictions::::api-type:data-plane \
    --context-attributes endpointType=private \
    --zone-id <zone-id>
    
  • Caso d'uso C: isolare completamente i carichi di lavoro

    Utilizzate questo caso d'uso per isolare completamente le vostre applicazioni e funzioni a livello di rete, bloccando gli endpoint pubblici e privati. È utile per i carichi di lavoro di elaborazione batch che effettuano solo connessioni in uscita, per i microservizi interni che comunicano esclusivamente attraverso code di messaggi o eventi o per i carichi di lavoro in fase di manutenzione.

    Per bloccare tutto il traffico in entrata, creare una regola senza contesti (una regola vuota blocca tutti gli accessi):

    ibmcloud cbr rule-create --description "Isolate workloads entirely" \
    --service-name codeengine \
    --api-types crn:v1:bluemix:public:context-based-restrictions::::api-type:data-plane
    

Le regole di restrizione basate sul contesto riguardano l'intero account, il progetto, il gruppo di risorse o la posizione (regione). Utilizzare --resource-attributes per specificare il livello di applicazione della regola, ad esempio --resource-attributes "projectId=<your-project-id>" per applicare la regola a livello di progetto.

Verifica della regola di restrizione basata sul contesto per la connettività in entrata

Dopo aver creato la regola di restrizione basata sul contesto, è possibile testarla utilizzando la propria applicazione o funzione:

  • Se si bloccano gli endpoint pubblici: I tentativi di accesso all'applicazione o alla funzione attraverso il suo URL pubblico risultano in un messaggio di errore RBAC Access Denied. Il carico di lavoro rimane accessibile attraverso endpoint privati (da VPC o da altri componenti di Code Engine nello stesso progetto).

  • Se si limitano gli endpoint privati per IP: l'accesso attraverso gli endpoint privati è consentito solo alle zone di rete o agli indirizzi IP elencati. Se una richiesta proviene da una fonte che non è stata inserita nell'elenco, viene visualizzato un messaggio di errore RBAC Access Denied. Ad esempio, se si consente solo 9.9.9.9/32, l'applicazione o la funzione è accessibile solo da quell'intervallo IP attraverso l'endpoint privato. Qualsiasi cosa al di fuori di questo intervallo genera un messaggio di errore.

Se è stata selezionata una zona di rete che punta a un VPC (virtual private cloud), è necessario creare anche un gateway VPE (virtual private endpoint) per consentire al VPC di accedere ai carichi di lavoro privati. Dopo aver creato il gateway, potrebbe verificarsi un ritardo temporaneo dovuto alla risoluzione di PDNS. Inizialmente si possono vedere i messaggi di errore di RBAC Access Denied, ma dopo un po' di tempo verrà concesso l'accesso.