Versione 1.13

Rafforza la sicurezza della tua app con Anthos Service Mesh e Anthos Config Management

Questo tutorial ti mostra come migliorare la strategia di sicurezza del cluster e dell'app. Immagina di essere un amministratore della piattaforma la cui organizzazione gestisce le app per il suo negozio online con Anthos Service Mesh, una suite di strumenti che ti consente di monitorare e gestire un mesh di servizi affidabile. È tua responsabilità assicurarti che il tuo mesh e le tue app siano sicuri.

Puoi prevenire l'errore di configurazione e convalidare automaticamente i tuoi criteri Anthos Service Mesh utilizzando Anthos Config Management Policy Controller e Config Sync. Policy Controller consente l'applicazione forzata di criteri completamente programmabili per i cluster. Policy Controller include inoltre una libreria predefinita di modelli di vincolo che puoi utilizzare con il pacchetto sulla sicurezza di Anthos Service Mesh per verificare la conformità alle vulnerabilità e alle best practice per la sicurezza della rete mesh. Config Sync riconcilia continuamente lo stato dei cluster con un set centrale di file di configurazione dichiarativi di Kubernetes. L'uso combinato di Policy Controller e Config Sync ti consente di applicare in modo continuo i vincoli alle configurazioni dei criteri di Anthos Service Mesh.

Il seguente diagramma mostra una panoramica di come Anthos Service Mesh, Policy Controller e Config Sync interagiscono in questo tutorial per gestire e proteggere le app di esempio Online Boutique che utilizzi in questo tutorial:

Un diagramma che mostra l'architettura che crei per questo tutorial

Obiettivi

  • Crea un cluster Google Kubernetes Engine (GKE) e registralo in una flotta.
  • Installare Policy Controller, Config Sync e Anthos Service Mesh su un cluster.
  • Esegui il deployment delle app di esempio Online Boutique e di un gateway in entrata.
  • Sfrutta il pacchetto di criteri di Anthos Service Mesh per applicare le seguenti best practice:
    • Assicurati che tutti i carichi di lavoro nel mesh siano inseriti automaticamente tramite sidecar.
    • Cripta tutto il traffico nel mesh.
    • Garantisci che tutti i carichi di lavoro nel mesh abbiano un controllo granulare degli accessi.

Costi

Questo tutorial utilizza i seguenti componenti fatturabili di Google Cloud:

  • GKE.
  • Anthos. La fatturazione di Anthos include la fatturazione per i componenti Anthos Service Mesh e Anthos Config Management.

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud possono beneficiare di una prova gratuita.

Al termine di questo tutorial, puoi evitare una fatturazione continua eliminando le risorse che hai creato. Per scoprire di più, vedi Pulizia.

Prima di iniziare

  1. Nella pagina del selettore dei progetti in Google Cloud Console, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  2. Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.

prepara l'ambiente

In questa sezione prepari il tuo ambiente in modo da poter installare Anthos Service Mesh, Policy Controller e Config Sync:

  1. Apri una sessione di Cloud Shell. Per aprire questa sessione, nell'angolo in alto a destra della pagina, fai clic su Attiva Cloud Shell e quindi su Confermo. Una sessione di Cloud Shell si apre all'interno di un frame inferiore della pagina. Completa i seguenti comandi nella sessione di Cloud Shell.
  2. Esegui l'upgrade all'ultima versione dell'interfaccia a riga di comando di Google Cloud:

    gcloud components update
    
  3. Per archiviare i file creati in questo tutorial, crea una directory utilizzando una variabile di ambiente:

    WORK_DIR=~/asm-acm-tutorial-dir
    mkdir $WORK_DIR
    
  4. Per semplificare il resto del tutorial, crea le seguenti variabili di ambiente:

    PROJECT_ID=PROJECT_ID
    gcloud config set project $PROJECT_ID
    CLUSTER=asm-acm-tutorial
    CLUSTER_ZONE=us-east4-a
    PROJECT_NUMBER=$(gcloud projects describe ${PROJECT_ID} --format='get(projectNumber)')
    

    Sostituisci PROJECT_ID con l'ID progetto che vuoi utilizzare per questo tutorial.

    Se ti viene chiesto di autorizzare Cloud Shell, fai clic su Autorizza per completare l'operazione.

  5. Attiva le API che ti servono per questo tutorial:

    gcloud services enable \
        container.googleapis.com \
        gkehub.googleapis.com \
        mesh.googleapis.com \
        anthos.googleapis.com
    

    Questa operazione può richiedere più di un minuto.

Configura un cluster GKE

In questa sezione creerai un cluster GKE e lo registrerai in un flotte. Le flotte sono un concetto di Google Cloud per l'organizzazione logica dei cluster e di altre risorse, che consentono di utilizzare e gestire funzionalità multi-cluster e di applicare criteri coerenti a tutti i sistemi.

Il cluster che crei in questa sezione è il cluster su cui installi Anthos Service Mesh, Policy Controller e Config Sync. È anche il cluster in cui esegui il deployment delle app di esempio Online Boutique.

Per configurare il cluster:

  1. Crea un cluster GKE:

    gcloud container clusters create ${CLUSTER} \
        --zone ${CLUSTER_ZONE} \
        --machine-type=e2-standard-4 \
        --num-nodes 4 \
        --workload-pool ${PROJECT_ID}.svc.id.goog \
        --labels mesh_id=proj-${PROJECT_NUMBER}
    

    Questa operazione può richiedere più di cinque minuti.

    L'output è simile al seguente:

    kubeconfig entry generated for asm-acm-tutorial.
    NAME: asm-acm-tutorial
    LOCATION: us-east4-a
    MASTER_VERSION: 1.21.10-gke.2000
    MASTER_IP: 34.85.159.120
    MACHINE_TYPE: e2-standard-4
    NODE_VERSION: 1.21.10-gke.2000
    NUM_NODES: 4
    STATUS: RUNNING
    
  2. Registra il cluster in un parco risorse:

    gcloud container fleet memberships register ${CLUSTER} \
        --project=${PROJECT_ID} \
        --gke-cluster=${CLUSTER_ZONE}/${CLUSTER} \
        --enable-workload-identity
    

    L'output è simile al seguente:

    kubeconfig entry generated for asm-acm-tutorial.
    Waiting for membership to be created...done.
    Created a new membership [projects/PROJECT_ID/locations/global/memberships/asm-acm-tutorial] for the cluster [asm-acm-tutorial]
    Generating the Connect Agent manifest...
    Deploying the Connect Agent on cluster [asm-acm-tutorial] in namespace [gke-connect]...
    Deployed the Connect Agent on cluster [asm-acm-tutorial] in namespace [gke-connect].
    Finished registering the cluster [asm-acm-tutorial] with the Fleet.
    

Esplora il repository

Nella seguente sezione di installazione, applichi un manifest Anthos Config Management acm-config.yaml. Questo manifest configura il cluster per la sincronizzazione dalla cartella asm-acm-tutorial del repository di esempio Anthos Config Management. Questa cartella contiene tutti i file di configurazione necessari per completare il resto del tutorial.

Per semplificare l'utilizzo di questo tutorial, utilizzi i comandi sed per aggiornare il file acm-config.yaml al fine di eseguire il deployment dei manifest richiesti per ogni passaggio. L'aggiornamento di un singolo file ti aiuta a concentrarti sui concetti e sul flusso per proteggere i cluster, il mesh e le applicazioni senza manipolare ripetutamente i file ed eseguire i comandi git add|commit|push.

Prima di applicare il manifest acm-config.yaml, è utile comprendere la struttura complessiva e i contenuti del repository.

Per utilizzare la capacità di Config Sync di sincronizzare più repository, il repository asc-acm-tutorial contiene due cartelle di primo livello: root-sync e online-boutique.

La cartella root-sync

La cartella root-sync è il repository principale. Questo repository è diviso in più sottocartelle e ognuna di queste contiene cartelle secondarie e risorse per una parte diversa del tutorial.

Esistono due cartelle che contengono risorse per configurare l'app di esempio Online Boutique e il gateway Ingress:

  • init: risorse per configurare RepoSync per le app Boutique online.
  • deployments: risorse per il deployment del gateway Ingress e degli spazi dei nomi e delle app di Boutique online.

Esistono tre cartelle che contengono le risorse per eseguire il deployment dei diversi criteri di Anthos Service Mesh:

  • enforce-sidecar-injection: risorse per il deployment dei criteri per applicare l'inserimento collaterale per Namespace e Pod.
  • enforce-strict-mtls: risorse per il deployment dei criteri per applicare STRICTmTLS per l'intera rete mesh e per qualsiasi PeerAuthentication.
  • enforce-authorization-policies: risorse per il deployment dei criteri che consentono di applicare il criterio predefinito deny AuthorizationPolicy per l'intera rete mesh, oltre che per l'applicazione di entità di origine granulari per qualsiasi AuthorizationPolicies.

Le tre cartelle rimanenti contengono risorse per il deployment delle risorse che risolvono le violazioni dei criteri di Anthos Service Mesh:

  • fix-strict-mtls: risorse per il deployment del STRICTmTLS predefinitoPeerAuthentication nello spazio dei nomi istio-system.
  • fix-default-deny-authorization-policy: risorse per il deployment del valore predefinito di deny AuthorizationPolicy nello spazio dei nomi istio-system.
  • deploy-authorization-policies: risorse per il deployment delle risorse AuthorizationPolicy granulari per consentire il funzionamento delle app di esempio Online Boutique.

La cartella online-boutique

La cartella online-boutique è un repository dello spazio dei nomi. Questo repository contiene le risorse necessarie per eseguire il deployment delle app di esempio Online Boutique utilizzando Kustomize.

Installa Policy Controller, Config Sync e Anthos Service Mesh gestito

Ora che hai creato e registrato il cluster, puoi installare Config Sync, Policy Controller e Anthos Service Mesh nel cluster e configurare il cluster per la sincronizzazione dalle configurazioni nella cartella asc-acm-tutorial:

  1. Attiva Anthos Config Management nel tuo parco risorse:

    gcloud beta container fleet config-management enable
    
  2. Attiva Anthos Service Mesh nel tuo parco risorse.

    gcloud container fleet mesh enable
    
  3. Abilita la gestione automatica del piano di controllo di Anthos Service Mesh per consentire a Google di applicare la configurazione consigliata di Anthos Service Mesh gestito:

    gcloud container fleet mesh update \
        --control-plane automatic \
        --memberships ${CLUSTER}
    
  4. Per installare e configurare Config Sync e Policy Controller, crea il seguente manifest di Anthos Config Management:

    cat <<EOF > $WORK_DIR/acm-config.yaml
    applySpecVersion: 1
    spec:
      policyController:
        enabled: true
        templateLibraryInstalled: true
        referentialRulesEnabled: true
      configSync:
        enabled: true
        sourceFormat: unstructured
        syncRepo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples
        syncBranch: main
        secretType: none
        policyDir: asm-acm-tutorial/root-sync/init
    EOF
    

    Per scoprire di più sui campi di configurazione di Anthos Config Management, consulta gcloud apply spec fields (Campo di applicazione di gcloud).

  5. Applica il file:

    gcloud beta container fleet config-management apply \
        --membership ${CLUSTER} \
        --config $WORK_DIR/acm-config.yaml
    

    Dopo aver applicato questo file, Policy Controller e Config Sync vengono installati nel cluster. Successivamente, Config Sync inizia la sincronizzazione di tutte le configurazioni nella cartella asm-acm-tutorial con il tuo cluster. Queste configurazioni installano e configurano i seguenti componenti chiave:

    • L'oggetto RepoSync che configura l'app Online Boutique viene sincronizzato:

      apiVersion: configsync.gke.io/v1beta1
      kind: RepoSync
      metadata:
        name: repo-sync
      spec:
        sourceFormat: unstructured
        git:
          repo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples
          revision: HEAD
          branch: main
          dir: asm-acm-tutorial/online-boutique/init
          auth: none
    • Dal momento che il RepoSync riconciliatore necessita di ulteriori autorizzazioni per creare le risorse Istio, il repository contiene anche ruoli cluster e associazioni di ruoli cluster per concedere queste autorizzazioni. Questo è il manifest per il ruolo del cluster applicato automaticamente al cluster:

      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRole
      metadata:
        labels:
          rbac.authorization.k8s.io/aggregate-to-edit: "true"
        name: custom:aggregate-to-edit:istio
      rules:
      - apiGroups:
        - "networking.istio.io"
        - "security.istio.io"
        resources:
        - "virtualservices"
        - "authorizationpolicies"
        verbs:
        - "*"
  6. Per assicurare la corretta installazione di Policy Controller e Config Sync, visualizza lo stato di Anthos Config Management:

    gcloud beta container fleet config-management status
    

    L'output è simile al seguente:

    Name: asm-acm-tutorial
    Status: SYNCED
    Last_Synced_Token: 4b3384d
    Sync_Branch: main
    Last_Synced_Time: 2022-05-04T21:32:58Z
    Policy_Controller: INSTALLED
    Hierarchy_Controller: PENDING
    

    Se vedi PENDING o NOT_INSTALLED nelle righe Status o Policy_Controller, attendi qualche minuto ed esegui di nuovo gcloud beta container fleet config-management status.

  7. Per garantire la corretta installazione di Anthos Service Mesh, descrivi il suo stato:

    gcloud container fleet mesh describe
    

    L'output è simile al seguente:

    createTime: '2022-05-05T23:33:44.041608250Z'
    membershipSpecs:
      projects/841604900168/locations/global/memberships/asm-acm-tutorial:
        mesh:
          controlPlane: AUTOMATIC
    membershipStates:
      projects/841604900168/locations/global/memberships/asm-acm-tutorial:
        servicemesh:
          controlPlaneManagement:
            details:
            - code: REVISION_READY
              details: 'Ready: asm-managed'
            state: ACTIVE
        state:
          code: OK
          description: 'Revision(s) ready for use: asm-managed.'
          updateTime: '2022-05-05T23:45:38.800808838Z'
    name: projects/PROJECT_ID/locations/global/features/servicemesh
    resourceState:
      state: ACTIVE
    spec: {}
    state:
      state: {}
    updateTime: '2022-05-05T23:45:44.848011023Z'
    

    Se vedi state.code: ERROR anziché state.code: OK, attendi alcuni minuti ed esegui di nuovo gcloud container fleet mesh describe. Prima di procedere con il tutorial, devi assicurarti che il campo servicemesh.controlPlaneManagement.details[].code abbia il valore REVISION_READY.

Eseguire il deployment di un gateway in entrata e di un'applicazione di esempio

In questa sezione eseguirai il deployment dell'applicazione di esempio Online Boutique e di un gateway in entrata per gestire il traffico in entrata.

  1. Esegui il deployment dell'applicazione di esempio Online Boutique e del gateway in entrata.

    Il comando seguente utilizza sed per aggiornare il manifest acm-config.yaml per fare in modo che Config Sync esegua il deployment delle risorse necessarie per il deployment del gateway in entrata e dell'app di esempio.

    sed -i "s,root-sync/init,root-sync/deployments,g" $WORK_DIR/acm-config.yaml
    gcloud beta container fleet config-management apply \
        --membership ${CLUSTER} \
        --config $WORK_DIR/acm-config.yaml
    

    Tieni presente che il completamento di questo passaggio può richiedere alcuni minuti.

  2. Visualizza lo stato di Config Sync per RootSync:

    gcloud alpha anthos config sync repo describe \
        --sync-name root-sync \
        --sync-namespace config-management-system
    

    L'output è simile al seguente:

    getting 1 RepoSync and RootSync from projects/project_id/locations/global/memberships/asm-acm-tutorial
    [
      {
        "clusters": [
          "projects/project_id/locations/global/memberships/asm-acm-tutorial"
        ],
        "commit": "7d15d49af13c44aa531a4565b2277ddcf8b81884",
        "errors": [],
        "source": "https://github.com/GoogleCloudPlatform/anthos-config-management-samples//asm-acm-tutorial/root-sync/deployments@main",
        "status": "SYNCED"
      }
    ]
    

    Se vedi status: RECONCILING anziché status: SYNCED, attendi alcuni minuti ed esegui di nuovo gcloud alpha anthos config sync repo describe.

    Per visualizzare anche le risorse gestite, puoi aggiungere il flag --managed-resources. Per ulteriori informazioni, vedi Visualizzare lo stato di Config Sync su più cluster.

  3. Visualizza lo stato di Config Sync per RepoSync:

    gcloud alpha anthos config sync repo describe \
        --sync-name repo-sync \
        --sync-namespace onlineboutique
    

    L'output è simile al seguente:

    getting 1 RepoSync and RootSync from projects/project_id/locations/global/memberships/asm-acm-tutorial
    [
      {
        "clusters": [
          "projects/project_id/locations/global/memberships/asm-acm-tutorial"
        ],
        "commit": "7d15d49af13c44aa531a4565b2277ddcf8b81884",
        "errors": [],
        "source": "https://github.com/GoogleCloudPlatform/anthos-config-management-samples//online-boutique/deployments@main:HEAD",
        "status": "SYNCED"
      }
    ]
    

    Se vedi status: RECONCILING anziché status: SYNCED, attendi alcuni minuti ed esegui di nuovo gcloud alpha anthos config sync repo describe.

  4. Attendi che venga eseguito il provisioning dell'indirizzo IP pubblico del gateway in entrata:

    until kubectl -n asm-ingress get svc asm-ingressgateway -o jsonpath='{.status.loadBalancer}' | grep "ingress"; do : ; done
    
  5. Ottieni l'indirizzo IP pubblico del gateway in entrata:

    EXTERNAL_IP=$(kubectl get svc asm-ingressgateway -n asm-ingress -o jsonpath="{.status.loadBalancer.ingress[*].ip}")
    
  6. Visita l'indirizzo IP del browser per verificare che il deployment dell'app Online Boutique sia stato eseguito correttamente:

    echo http://${EXTERNAL_IP}
    

Applica i criteri per proteggere il mesh

Nelle sezioni seguenti utilizzi Controller criteri per applicare i criteri del pacchetto di criteri Anthos Service Mesh creando vincoli.

Applica inserimento proxy proxy

In questa sezione applichi i criteri per garantire che tutti i carichi di lavoro nel mesh siano abilitati per l'inserimento automatico collaterale.

  1. Per applicare l'inserimento proxy proxy, applica i vincoli.

    Il comando seguente utilizza sed per aggiornare il file acm-config.yaml affinché Config Sync esegua il deployment delle risorse associate.

    sed -i "s,root-sync/deployments,root-sync/enforce-sidecar-injection,g" $WORK_DIR/acm-config.yaml
    gcloud beta container fleet config-management apply \
        --membership ${CLUSTER} \
        --config $WORK_DIR/acm-config.yaml
    

    Il comando precedente applica le seguenti risorse:

  2. Visualizza lo stato di Config Sync per RootSync:

    gcloud alpha anthos config sync repo describe \
        --sync-name root-sync \
        --sync-namespace config-management-system
    

    L'output è simile al seguente:

    getting 1 RepoSync and RootSync from projects/project_id/locations/global/memberships/asm-acm-tutorial
    [
      {
        "clusters": [
          "projects/project_id/locations/global/memberships/asm-acm-tutorial"
        ],
        "commit": "7d15d49af13c44aa531a4565b2277ddcf8b81884",
        "errors": [],
        "source": "https://github.com/GoogleCloudPlatform/anthos-config-management-samples//asm-acm-tutorial/root-sync/enforce-sidecar-injection@main",
        "status": "SYNCED"
      }
    ]
    

    Se vedi status: RECONCILING anziché status: SYNCED, attendi alcuni minuti ed esegui di nuovo gcloud alpha anthos config sync repo describe.

  3. Verifica che le Constraints siano create:

    kubectl get constraints
    

    La valutazione di questi vincoli da parte di Policy Controller può richiedere alcuni minuti. Se non vedi valori nella colonna TOTAL-VIOLATIONS, attendi ed esegui di nuovo kubectl get constraints.

    L'output è simile al seguente:

    NAME                                                                                       ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    podsidecarinjectionannotation.constraints.gatekeeper.sh/pod-sidecar-injection-annotation   deny                 0
    
    NAME                                                                            ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srequiredlabels.constraints.gatekeeper.sh/namespace-sidecar-injection-label   deny                 0
    

    Poiché abbiamo configurato correttamente Namespaces e Pods, c'è 0 TOTAL-VIOLATIONS per questi Constraints.

  4. Per visualizzare questi Constraints al lavoro, prova a creare un Namespace nel cluster senza un elemento labelannotation:

    kubectl create namespace test
    

    L'output è simile al seguente errore:

    Error from server (Forbidden): admission webhook "validation.gatekeeper.sh" denied the request: [namespace-sidecar-injection-label] you must provide labels: {"istio-injection"}
    

Applica la crittografia del traffico

In questa sezione applichi i criteri per garantire che tutto il traffico nel mesh sia criptato.

  1. Per applicare la crittografia del traffico, applica i vincoli.

    Il comando seguente utilizza sed per aggiornare il file acm-config.yaml affinché Config Sync esegua il deployment delle risorse associate.

    sed -i "s,root-sync/enforce-sidecar-injection,root-sync/enforce-strict-mtls,g" $WORK_DIR/acm-config.yaml
    gcloud beta container fleet config-management apply \
        --membership ${CLUSTER} \
        --config $WORK_DIR/acm-config.yaml
    

    Il comando precedente applica le seguenti risorse:

  2. Visualizza lo stato di Config Sync per RootSync:

    gcloud alpha anthos config sync repo describe \
        --sync-name root-sync \
        --sync-namespace config-management-system
    

    L'output è simile al seguente:

    getting 1 RepoSync and RootSync from projects/project_id/locations/global/memberships/asm-acm-tutorial
    [
      {
        "clusters": [
          "projects/project_id/locations/global/memberships/asm-acm-tutorial"
        ],
        "commit": "7d15d49af13c44aa531a4565b2277ddcf8b81884",
        "errors": [],
        "source": "https://github.com/GoogleCloudPlatform/anthos-config-management-samples//asm-acm-tutorial/root-sync/enforce-strict-mtls@main",
        "status": "SYNCED"
      }
    ]
    

    Se vedi status: RECONCILING anziché status: SYNCED, attendi alcuni minuti ed esegui di nuovo gcloud alpha anthos config sync repo describe.

  3. Esegui il comando seguente per ottenere maggiori informazioni sulla violazione PeerAuthentication:

    kubectl get asmpeerauthnmeshstrictmtls.constraints.gatekeeper.sh/mesh-level-strict-mtls -ojsonpath='{.status.violations}'  | jq
    

    L'output è simile al seguente:

    [
      {
        "enforcementAction": "deny",
        "kind": "AsmPeerAuthnMeshStrictMtls",
        "message": "Root namespace <istio-system> does not have a strict mTLS PeerAuthentication",
        "name": "mesh-level-strict-mtls"
      }
    ]
    
  4. Risolvi il problema eseguendo il deployment di PeerAuthentication in istio-system. Per impedire che tutti i servizi nel mesh accettino il traffico di testo normale, imposta un criterio PeerAuthentication a livello di mesh con la modalità mTLS impostata su STRICT. Quando esegui il deployment del criterio, il piano di controllo esegue automaticamente il provisioning dei certificati TLS in modo che i carichi di lavoro possano eseguire l'autenticazione tra loro.

    Il comando seguente utilizza sed per aggiornare il file acm-config.yaml affinché Config Sync esegua il deployment delle risorse associate.

    sed -i "s,root-sync/enforce-strict-mtls,root-sync/fix-strict-mtls,g" $WORK_DIR/acm-config.yaml
    gcloud beta container hub config-management apply \
        --membership ${CLUSTER} \
        --config $WORK_DIR/acm-config.yaml
    

    Il comando precedente applica il seguente STRICTmTLS PeerAuthentication nello spazio dei nomi istio-system. Questa impostazione applica mTLS STRICT all'intero mesh:

    apiVersion: security.istio.io/v1beta1
    kind: PeerAuthentication
    metadata:
      name: default
    spec:
      mtls:
        mode: STRICT
  5. Visualizza lo stato di Config Sync per RootSync:

    gcloud alpha anthos config sync repo describe \
        --sync-name root-sync \
        --sync-namespace config-management-system
    

    L'output è simile al seguente:

    getting 1 RepoSync and RootSync from projects/project_id/locations/global/memberships/asm-acm-tutorial
    [
      {
        "clusters": [
          "projects/project_id/locations/global/memberships/asm-acm-tutorial"
        ],
        "commit": "7d15d49af13c44aa531a4565b2277ddcf8b81884",
        "errors": [],
        "source": "https://github.com/GoogleCloudPlatform/anthos-config-management-samples//asm-acm-tutorial/root-sync/fix-strict-mtls@main",
        "status": "SYNCED"
      }
    ]
    

    Se vedi status: RECONCILING anziché status: SYNCED, attendi alcuni minuti ed esegui di nuovo gcloud alpha anthos config sync repo describe.

  6. Verifica che le Constraints siano create:

    kubectl get constraints
    

    Tieni presente che l'operazione può richiedere alcuni minuti prima che il controller dei criteri valuti questi Constraints. Attendi ed esegui di nuovo questo comando kubectl get constraints finché non ricevi i valori nella colonna TOTAL-VIOLATIONS per ogni riga.

    L'output è simile al seguente:

    NAME                                                                            ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srequiredlabels.constraints.gatekeeper.sh/namespace-sidecar-injection-label   deny                 0
    NAME                                                                          ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    asmpeerauthnmeshstrictmtls.constraints.gatekeeper.sh/mesh-level-strict-mtls   deny                 0
    NAME                                                                               ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    destinationruletlsenabled.constraints.gatekeeper.sh/destination-rule-tls-enabled   deny                 0
    NAME                                                                              ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    asmpeerauthnstrictmtls.constraints.gatekeeper.sh/peerauthentication-strict-mtls   deny                 0
    NAME                                                                             ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    asmsidecarinjection.constraints.gatekeeper.sh/pod-sidecar-injection-annotation   deny                 0
    

Applica controllo dell'accesso granulare

In questa sezione applichi i criteri per garantire che tutti i carichi di lavoro nel mesh abbiano un controllo dell'accesso granulare.

  1. Per applicare un controllo dell'accesso granulare, applica i vincoli.

    Il comando seguente utilizza sed per aggiornare il file acm-config.yaml affinché Config Sync esegua il deployment delle risorse associate.

    sed -i "s,root-sync/fix-strict-mtls,root-sync/enforce-authorization-policies,g" $WORK_DIR/acm-config.yaml
    gcloud beta container fleet config-management apply \
        --membership ${CLUSTER} \
        --config $WORK_DIR/acm-config.yaml
    

    Il comando precedente applica le seguenti risorse:

  2. Visualizza lo stato di Config Sync per RootSync:

    gcloud alpha anthos config sync repo describe \
        --sync-name root-sync \
        --sync-namespace config-management-system
    

    L'output è simile al seguente:

    getting 1 RepoSync and RootSync from projects/project_id/locations/global/memberships/asm-acm-tutorial
    [
      {
        "clusters": [
          "projects/project_id/locations/global/memberships/asm-acm-tutorial"
        ],
        "commit": "7d15d49af13c44aa531a4565b2277ddcf8b81884",
        "errors": [],
        "source": "https://github.com/GoogleCloudPlatform/anthos-config-management-samples//asm-acm-tutorial/root-sync/enforce-authorization-policies@main",
        "status": "SYNCED"
      }
    ]
    

    Se vedi status: RECONCILING anziché status: SYNCED, attendi alcuni minuti ed esegui di nuovo gcloud alpha anthos config sync repo describe.

  3. Esegui questo comando per ottenere ulteriori informazioni sulla violazione associata:

    kubectl get asmauthzpolicydefaultdeny.constraints.gatekeeper.sh/default-deny-authorization-policies -ojsonpath='{.status.violations}'  | jq
    

    L'output è simile al seguente:

    [
      {
        "enforcementAction": "deny",
        "kind": "AsmAuthzPolicyDefaultDeny",
        "message": "Root namespace <istio-system> does not have a default deny AuthorizationPolicy",
        "name": "default-deny-authorization-policies"
      }
    ]
    
  4. Risolvi il problema eseguendo il deployment di AuthorizationPolicy nello spazio dei nomi istio-system.

    Il comando seguente utilizza sed per aggiornare il file acm-config.yaml affinché Config Sync esegua il deployment delle risorse associate.

    sed -i "s,root-sync/enforce-authorization-policies,root-sync/fix-default-deny-authorization-policy,g" $WORK_DIR/acm-config.yaml
    gcloud beta container hub config-management apply \
        --membership ${CLUSTER} \
        --config $WORK_DIR/acm-config.yaml
    

    Il comando precedente applica il seguente rifiutare AuthorizationPolicy nello spazio dei nomi istio-system:

    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
      name: deny-all
    spec:
      {}
  5. Visualizza lo stato di Config Sync per RootSync:

    gcloud alpha anthos config sync repo describe \
        --sync-name root-sync \
        --sync-namespace config-management-system
    

    L'output è simile al seguente:

    getting 1 RepoSync and RootSync from projects/project_id/locations/global/memberships/asm-acm-tutorial
    [
      {
        "clusters": [
          "projects/project_id/locations/global/memberships/asm-acm-tutorial"
        ],
        "commit": "7d15d49af13c44aa531a4565b2277ddcf8b81884",
        "errors": [],
        "source": "https://github.com/GoogleCloudPlatform/anthos-config-management-samples//asm-acm-tutorial/root-sync/fix-default-deny-authorization-policy@main",
        "status": "SYNCED"
      }
    ]
    

    Se vedi status: RECONCILING anziché status: SYNCED, attendi alcuni minuti ed esegui di nuovo gcloud alpha anthos config sync repo describe.

  6. Verifica che le Constraints siano create:

    kubectl get constraints
    

    Tieni presente che l'operazione può richiedere alcuni minuti prima che il controller dei criteri valuti questi Constraints. Attendi ed esegui di nuovo questo comando kubectl get constraints finché non ricevi i valori nella colonna TOTAL-VIOLATIONS per ogni riga.

    L'output è simile al seguente:

    NAME                                                                             ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    asmsidecarinjection.constraints.gatekeeper.sh/pod-sidecar-injection-annotation   deny                 0
    NAME                                                                            ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srequiredlabels.constraints.gatekeeper.sh/namespace-sidecar-injection-label   deny                 0
    NAME                                                                                      ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    asmauthzpolicydefaultdeny.constraints.gatekeeper.sh/default-deny-authorization-policies   deny                 0
    NAME                                                                          ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    asmpeerauthnmeshstrictmtls.constraints.gatekeeper.sh/mesh-level-strict-mtls   deny                 0
    NAME                                                                               ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    destinationruletlsenabled.constraints.gatekeeper.sh/destination-rule-tls-enabled   deny                 0
    NAME                                                                              ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    asmpeerauthnstrictmtls.constraints.gatekeeper.sh/peerauthentication-strict-mtls   deny                 0
    NAME                                                                                              ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    asmauthzpolicyenforcesourceprincipals.constraints.gatekeeper.sh/authz-source-principals-not-all   deny                 0
    
  7. Visita l'app Online Boutique dal tuo browser:

    echo http://${EXTERNAL_IP}
    

    Dovresti ricevere l'errore: RBAC: access denied, che conferma che la negazione predefinita AuthorizationPolicy si applica all'intero mesh.

  8. Risolvi questo problema eseguendo il deployment di AuthorizationPolicies più granulari negli spazi dei nomi asm-ingress e onlineboutique.

    Il comando seguente utilizza sed per aggiornare il file acm-config.yaml affinché Config Sync esegua il deployment delle risorse associate.

    sed -i "s,root-sync/fix-default-deny-authorization-policy,root-sync/deploy-authorization-policies,g" $WORK_DIR/acm-config.yaml
    gcloud beta container hub config-management apply \
        --membership ${CLUSTER} \
        --config $WORK_DIR/acm-config.yaml
    

    Il comando precedente applica le seguenti risorse:

  9. Visualizza lo stato di Config Sync per RootSync:

    gcloud alpha anthos config sync repo describe \
        --sync-name root-sync \
        --sync-namespace config-management-system
    

    L'output è simile al seguente:

    getting 1 RepoSync and RootSync from projects/project_id/locations/global/memberships/asm-acm-tutorial
    [
      {
        "clusters": [
          "projects/project_id/locations/global/memberships/asm-acm-tutorial"
        ],
        "commit": "7d15d49af13c44aa531a4565b2277ddcf8b81884",
        "errors": [],
        "source": "https://github.com/GoogleCloudPlatform/anthos-config-management-samples//asm-acm-tutorial/root-sync/fix-default-deny-authorization-policy@main",
        "status": "SYNCED"
      }
    ]
    

    Se vedi status: RECONCILING anziché status: SYNCED, attendi alcuni minuti ed esegui di nuovo gcloud alpha anthos config sync repo describe.

  10. Visualizza lo stato di Config Sync per RepoSync:

    gcloud alpha anthos config sync repo describe \
        --sync-name repo-sync \
        --sync-namespace onlineboutique
    

    L'output è simile al seguente:

    getting 1 RepoSync and RootSync from projects/project_id/locations/global/memberships/asm-acm-tutorial
    [
      {
        "clusters": [
          "projects/project_id/locations/global/memberships/asm-acm-tutorial"
        ],
        "commit": "7d15d49af13c44aa531a4565b2277ddcf8b81884",
        "errors": [],
        "source": "https://github.com/GoogleCloudPlatform/anthos-config-management-samples//asm-acm-tutorial/online-boutique/authorization-policies@main",
        "status": "SYNCED"
      }
    ]
    

    Se vedi status: RECONCILING anziché status: SYNCED, attendi alcuni minuti ed esegui di nuovo gcloud alpha anthos config sync repo describe.

  11. Visita di nuovo l'app Online Boutique dal browser:

    echo http://${EXTERNAL_IP}
    

    Dopo qualche minuto, il sito web dovrebbe funzionare di nuovo come previsto.

Visualizzare lo stato delle funzionalità di sicurezza di Anthos

Puoi visualizzare lo stato delle funzionalità di sicurezza di Anthos, inclusi i criteri di autenticazione e autorizzazione, in Google Cloud Console.

  1. In Google Cloud Console, vai alla pagina Anthos Security.

    Vai ad Sicurezza per Anthos

    Il Riepilogo criteri mostra lo stato della sicurezza delle applicazioni, inclusi il controllo dell'accesso del servizio (AuthorizationPolicies) e mTLS.

  2. Fai clic su Controllo criteri per visualizzare gli stati dei criteri del carico di lavoro per il cluster e entrambi gli spazi dei nomi (asm-ingress e onlineboutique).

    Le schede Controllo accesso servizi e Stato mTLS forniscono una panoramica di alto livello.

    Panoramica di alto livello del controllo dell&#39;accesso ai servizi e dello stato mTLS

    L'elenco Carichi di lavoro mostra il controllo di accesso ai servizi e lo stato mTLS di ciascun carico di lavoro.

    Elenco dettagliato di ogni carico di lavoro e relativo controllo di accesso ai servizi e stato mTLS

Ora hai protetto il cluster e il mesh con Policy Controller e Config Sync.

Esegui la pulizia

Per evitare che al tuo Account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

Elimina il progetto

  1. In Cloud Console, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto da eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.

Elimina singole risorse

Per eliminare le singole risorse:

  1. Annulla la registrazione del cluster dal parco risorse:

    gcloud container fleet memberships unregister ${CLUSTER} \
        --project=${PROJECT_ID} \
        --gke-cluster=${CLUSTER_ZONE}/${CLUSTER}
    

    L'output è simile al seguente:

    kubeconfig entry generated for asm-acm-tutorial.
    Waiting for membership to be deleted...done.
    Deleting membership CR in the cluster...done.
    Deleting namespace [gke-connect] in the cluster...done.
    
  2. Elimina il cluster:

    gcloud container clusters delete ${CLUSTER} \
        --zone ${CLUSTER_ZONE}
    

    Premi y quando richiesto. Il completamento del comando può richiedere più di cinque minuti.

    L'output è simile al seguente:

    Deleting cluster asm-acm-tutorial...done.
    Deleted [https://container.googleapis.com/v1/projects/PROJECT_ID/zones/us-east4-a/clusters/asm-acm-tutorial].
    
  3. Elimina i file che hai creato:

    rm -r $WORK_DIR
    

Passaggi successivi