Consentire l'accesso alle risorse protette da un indirizzo IP interno

Questa pagina descrive come consentire il traffico dagli indirizzi IP interni di una rete VPC ai perimetri di servizio utilizzando le regole di inoltro e in uscita.

Panoramica

Puoi utilizzare Controlli di servizio VPC per specificare condizioni che consentano a intervalli IP specifici della rete VPC di accedere ai progetti e alle reti VPC protetti. Questa funzionalità ti consente di svolgere le seguenti attività:

  • Supporta le condizioni del livello di accesso di base per consentire gli intervalli di indirizzi IP interni delle reti VPC.

  • Consenti l'utilizzo di queste condizioni di livello di accesso per le chiamate API di entrata o di uscita all'interno o all'esterno del confine del perimetro di servizio.

Questa funzionalità offre i seguenti vantaggi:

  • Puoi specificare condizioni nelle configurazioni di Controlli di servizio VPC per consentire l'accesso da un indirizzo IP interno in una rete VPC.

  • Workflows che richiedono che le chiamate API passino attraverso più perimetri di servizio possono limitare l'accesso in modo da consentire solo alcune subnet anziché l'intera rete o il progetto VPC.

  • Puoi configurare risorse diverse on-premise per poter accedere solo a risorse Google Cloud specifiche. Devi utilizzare l'intervallo di indirizzi IP della subnet associato a queste risorse on-premise e alla rete VPC della zona di destinazione come parte del livello di accesso.

La Figura 1 mostra un esempio di configurazione che consente l'accesso a un servizio protetto specifico da un indirizzo IP interno autorizzato.

Limitazioni dell'utilizzo dell'indirizzo IP interno

Quando utilizzi un indirizzo IP interno in Controlli di servizio VPC, si applicano le seguenti limitazioni:

  • Puoi attivare un indirizzo IP interno solo con i livelli di accesso di base e non con quelli personalizzati.

  • Ti consigliamo di non negare i livelli di accesso con condizioni basate su indirizzi IP interni, poiché ciò può causare comportamenti imprevisti.

  • Si applicano anche le limitazioni per l'aggiunta di reti VPC ai perimetri di servizio.

  • Quando i controlli di servizio VPC registrano un log di controllo dei criteri negato, oscurano il nome della rete VPC come __UNKNOWN__ nel log di controllo.

  • Le reti VPC per le quali SUBNET_MODE è impostato su custom ma non hanno subnet non sono supportate. L'attivazione dell'indirizzo IP interno richiede che una rete VPC debba contenere almeno una subnet.

  • Puoi specificare solo 500 reti VPC in tutti i livelli di accesso all'interno del criterio di accesso.

  • Quando elimini una rete VPC a cui fa riferimento un livello di accesso o un perimetro di servizio e poi ne crei un'altra con lo stesso nome, Controlli di servizio VPC non abilita automaticamente gli indirizzi IP interni sulla rete VPC ricreata. Per superare questa limitazione, crea una rete VPC con un nome diverso e aggiungila al perimetro.

  • Non puoi utilizzare un indirizzo IP interno per consentire l'accesso da servizi gestiti da Google. Ad esempio, Cloud SQL.

  • Se utilizzi un livello di accesso con condizioni basate su indirizzi IP interni con una regola di uscita, ti consigliamo di non aggiungere altre condizioni come il tipo di dispositivo, l'identità utente al livello di accesso.

  • L'indirizzo IP interno non corrisponde ai livelli di accesso che fanno riferimento alle regioni geografiche.

Utilizza l'indirizzo IP interno nei livelli di accesso

  1. Specifica il nome della rete VPC e l'intervallo di indirizzi IP nel vpcNetworkSources campo della condizione del livello di accesso di base.

    • Nome della rete VPC. Devi definire il nome della rete VPC nel seguente formato:

      //compute.googleapis.com/projects/PROJECT_ID/global/networks/NETWORK_NAME
      

      Ad esempio, //compute.googleapis.com/projects/my-project/global/networks/my-vpc.

    • Intervallo di indirizzi IP. L'intervallo di indirizzi IP specificato nel campo VpcSubNetwork di VpcNetworkSource deve rispettare la specifica della sottorete IP del blocco CIDR. Puoi utilizzare qualsiasi intervallo di indirizzi IP che sia un intervallo IPv4 valido per le subnet.

  2. Utilizza questo livello di accesso con le condizioni di autorizzazione in IngressSource o EgressSource.

Utilizzando uno scenario di esempio, le sezioni seguenti spiegano come eseguire questi passaggi per attivare un indirizzo IP interno.

Un esempio di utilizzo di un indirizzo IP interno per configurare l'accesso alla sottorete

Nel seguente esempio, hai due progetti:

  1. Progetto host di rete: Project1 ospita una rete VPC: default. Le due VM in Project1, VM1 e VM2 utilizzano questa rete come interfaccia di rete per inviare il traffico.

  2. Progetto Cloud Storage: Project2 contiene un bucket Cloud Storage.

Puoi utilizzare Controlli di servizio VPC per consentire solo a VM1 da Project1 di accedere al bucket Cloud Storage in Project2 utilizzando un indirizzo IP interno. Per eseguire questa configurazione, devi svolgere i seguenti passaggi:

  1. Creerai un perimetro di servizio sp1 attorno a Project1 e un altro perimetro di servizio sp2 attorno a Project2.

  2. Poi, puoi aggiungere regole di ingresso e uscita ai perimetri di servizio per consentire solo alla sottorete di VM1 di accedere al bucket Cloud Storage.

Il seguente diagramma mostra la configurazione descritta in questo esempio.

Configura un criterio di accesso a livello di organizzazione

  1. Assicurati di avere un criterio di accesso a livello di organizzazione. Se non hai un criterio di accesso a questo livello, esegui il seguente comando gcloud CLI:

    gcloud access-context-manager policies create \
        --organization=ORGANIZATION_ID --title=POLICY_TITLE
    

    Sostituisci quanto segue:

    • ORGANIZATION_ID: l'ID numerico della tua organizzazione.

    • POLICY_TITLE: un titolo leggibile per le norme di accesso.

    Per ulteriori informazioni, consulta Creare un criterio di accesso a livello di organizzazione.

  2. Ottieni il nome del criterio di accesso.

  3. Per impostare questo criterio come criterio di accesso predefinito, esegui il seguente comando gcloud CLI:

    gcloud config set access_context_manager/policy POLICY_NAME
    

    Sostituisci POLICY_NAME con il nome numerico del criterio di accesso.

    Per ulteriori informazioni, vedi Impostare il criterio di accesso predefinito per lo strumento a riga di comando gcloud.

Crea perimetri per proteggere il progetto host di rete e il progetto Cloud Storage

  1. Per creare un perimetro sp1 attorno a Project1, esegui il seguente comando gcloud CLI:

    gcloud access-context-manager perimeters create sp1 --title="sp1" --resources=PROJECT_NUMBER \
        --restricted-services=storage.googleapis.com --policy=POLICY_NAME
    

    Sostituisci quanto segue:

    • PROJECT_NUMBER: il numero del progetto host della rete. Ad esempio, projects/111.

    • POLICY_NAME: il nome numerico del criterio di accesso. Ad esempio, 1234567890.

  2. Per creare un perimetro sp2 attorno a Project2 che limiti il servizio Cloud Storage, esegui il seguente comando gcloud CLI:

    gcloud access-context-manager perimeters create sp2 --title="sp2" --resources=PROJECT_NUMBER \
        --restricted-services=storage.googleapis.com --policy=POLICY_NAME
    

    Sostituisci quanto segue:

    • PROJECT_NUMBER: il numero del progetto Cloud Storage. Ad esempio, projects/222.

    • POLICY_NAME: il nome numerico del criterio di accesso. Ad esempio, 1234567890.

Per ulteriori informazioni sulla creazione di un perimetro di servizio, vedi Creare un perimetro di servizio.

Dopo aver creato questi due perimetri, il bucket Cloud Storage non è più accessibile dalle due VM.

Creare un livello di accesso con una condizione di accesso basata su indirizzo IP interno

Crea un livello di accesso che consenta solo il traffico proveniente dalla subnet di VM1.

  1. Crea un file YAML che definisce le condizioni di accesso. Il seguente esempio mostra solo gli attributi necessari per attivare un indirizzo IP interno:

    echo """
    - vpcNetworkSources:
      - vpcSubnetwork:
          network: VPC_NETWORK_NAME
          vpcIpSubnetworks:
          - IP_RANGE
    
    """ > level.yaml
    

    Sostituisci quanto segue:

    • VPC_NETWORK_NAME: il nome della rete VPC in cui si trova VM1. Ad esempio, //compute.googleapis.com/projects/Project1/global/networks/default.

    • IP_RANGE: l'intervallo di indirizzi IP della subnet. Ad esempio, 10.10.0.0/24.

    Utilizza il nome della rete VPC e i formati degli intervalli di indirizzi IP spiegati in precedenza.

    Per ulteriori informazioni sul file YAML, consulta basic-level-spec File.

  2. Per creare un livello di accesso utilizzando il file YAML, esegui il seguente comando gcloud CLI:

    gcloud access-context-manager levels create LEVEL_NAME \
        --title="TITLE" --basic-level-spec=FILE_NAME
    

    Sostituisci quanto segue:

    • LEVEL_NAME: un nome univoco per il livello di accesso. Ad esempio, allowvm1.

    • TITLE: un titolo breve e leggibile per il livello di accesso. Ad esempio, allowvm1.

    • FILE_NAME: il file YAML che definisce le condizioni di accesso per il livello di accesso. Ad esempio, level.yaml.

    Per ulteriori informazioni, vedi Creare un livello di accesso di base.

Configura una regola di ingresso per consentire il traffico API in entrata al bucket Cloud Storage

Per consentire l'accesso solo da VM1, configura una regola di ingresso nel perimetro sp2 per consentire al traffico dell'API Cloud Storage di entrare nel perimetro.

  1. Crea un file YAML che definisce il criterio in entrata.

    echo """
    - ingressFrom:
        identityType: ANY_IDENTITY
        sources:
        - accessLevel: accessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME
      ingressTo:
        operations:
        - methodSelectors:
          - method: '*'
          serviceName: storage.googleapis.com
        resources:
        - '*'
    
    """ > ingress.yaml
    

    Sostituisci quanto segue:

    • POLICY_NAME: il nome numerico del criterio di accesso. Ad esempio, 1234567890.

    • ACCESS_LEVEL_NAME: il nome del livello di accesso. Ad esempio, allowvm1.

    Per ulteriori informazioni sul file YAML, consulta il riferimento alle regole Ingress.

  2. Per aggiornare il criterio di ingresso per un perimetro di servizio, esegui il seguente comando gcloud CLI:

    gcloud access-context-manager perimeters update PERIMETER --set-ingress-policies=FILE_NAME
    

    Sostituisci quanto segue:

    • PERIMETER: il nome del perimetro di servizio che protegge il progetto Cloud Storage. Ad esempio, sp2.

    • FILE_NAME: il file YAML che definisce il criterio di ingresso. Ad esempio, ingress.yaml.

    Per ulteriori informazioni, consulta Aggiornare i criteri di ingresso e di uscita per un perimetro di servizio.

Configura un criterio di uscita per consentire il traffico API in uscita al bucket Cloud Storage

Inoltre, configura un criterio di uscita nel perimetro sp1 per consentire al traffico dell'API Cloud Storage di uscire dal perimetro.

  1. Crea un file YAML che definisce il criterio in uscita. Assicurati di impostare il campo sourceRestriction come SOURCE_RESTRICTION_ENABLED nel file YAML.

    echo """
    - egressFrom:
        identityType: ANY_IDENTITY
        sourceRestriction: SOURCE_RESTRICTION_ENABLED
        sources:
        - accessLevel: accessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME
      egressTo:
        operations:
        - methodSelectors:
          - method: '*'
          serviceName: storage.googleapis.com
        resources:
        - '*'
    
    """ > egress.yaml
    

    Sostituisci quanto segue:

    • POLICY_NAME: il nome numerico del criterio di accesso. Ad esempio, 1234567890.

    • ACCESS_LEVEL_NAME: il nome del livello di accesso. Ad esempio, allowvm1.

    Per ulteriori informazioni sul file YAML, consulta la sezione Riferimento alle regole di uscita.

  2. Per aggiornare il criterio di uscita per un perimetro di servizio, esegui il seguente comando:

    gcloud access-context-manager perimeters update PERIMETER --set-egress-policies=FILE_NAME
    

    Sostituisci quanto segue:

    • PERIMETER: il nome del perimetro di servizio che protegge il progetto host della rete. Ad esempio, sp1.

    • FILE_NAME: il file YAML che definisce il criterio di uscita. Ad esempio, egress.yaml.

    Per ulteriori informazioni, consulta Aggiornare i criteri di ingresso e di uscita per un perimetro di servizio.

Dopo aver configurato i criteri di ingresso e di uscita, il bucket Cloud Storage è accessibile da VM1, mentre non è accessibile da VM2.

Consigli

  • Quando attivi un indirizzo IP interno, ti consigliamo di disattivare il rifi forwarding IP per le VM. L'inoltro IP consente a una VM all'interno della stessa rete VPC di inviare richieste utilizzando un indirizzo IP diverso, con il rischio di spoofing dell'indirizzo IP.

  • Se vuoi attivare l'inoltro IP, ti consigliamo di utilizzare le seguenti configurazioni per ridurre il rischio di spoofing dell'indirizzo IP:

    • Utilizza il Restrict VM IP Forwarding vincolo delle norme dell'organizzazione (constraints/compute.vmCanIpForward) per assicurarti che solo le VM autorizzate possano attivare il forwarding IP.

    • Utilizza le origini per le regole firewall per limitare gli indirizzi IP che possono comunicare con le VM in cui è abilitato il forwarding IP. Completa le seguenti attività:

      • Configura le regole firewall in entrata per consentire il traffico in entrata solo da un determinato intervallo di indirizzi IP alle VM in cui è abilitato il forwarding IP.

      • Configura le regole del firewall in uscita per consentire il traffico in uscita solo a un intervallo di indirizzi IP specifico dalle VM in cui è abilitato il forwarding IP.