Versione 1.15

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

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Questo tutorial 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à garantire la sicurezza del mesh e delle app.

Puoi prevenire gli errori di configurazione e convalidare automaticamente i tuoi criteri Anthos Service Mesh utilizzando Anthos Config Management's Controller controller e Config Sync. Policy Controller consente l'applicazione di criteri completamente programmabili per i cluster. Policy Controller include inoltre una libreria predefinita di modelli di vincolo che puoi utilizzare con il pacchetto di sicurezza Anthos Service Mesh per verificare la conformità delle vulnerabilità e delle best practice di sicurezza del mesh. Config Sync riconcilia continuamente lo stato dei cluster con un set centrale di file di configurazione dichiarativi di Kubernetes. L'utilizzo 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 dell'interazione tra Anthos Service Mesh, Policy Controller e Config Sync in questo tutorial per gestire e proteggere un gateway in entrata e le app di esempio Boutique online 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 registra il cluster in un flotta.
  • Installare Policy Controller, Config Sync e Anthos Service Mesh su un cluster.
  • Configura Config Sync per sincronizzare più repository
  • Applica le best practice per il deployment di configurazioni, app e risorse Istio con Config Sync.
  • Esegui il deployment di configurazioni di cluster, le app di esempio Online Boutique e un gateway in entrata con Config Sync.
  • Sfrutta il set di criteri Anthos Service Mesh di Policy Controller per applicare le seguenti best practice per la sicurezza:
    • Assicurati che tutti i carichi di lavoro nel mesh abbiano l'iniezione automatica 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 l'ambiente in modo da poter installare Anthos Service Mesh, Policy Controller e Config Sync:

  1. In Google Cloud Console, attiva Cloud Shell.

    Attiva Cloud Shell

  2. Esegui l'upgrade all'ultima versione di Google Cloud CLI:

    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. Abilita le API che ti servono per questo tutorial:

    gcloud services enable \
        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 registri in un flotta. I parchi risorse sono un concetto di Google Cloud per l'organizzazione logica dei cluster e delle altre risorse, che consentono di utilizzare e gestire le funzionalità multi-cluster e di applicare criteri coerenti tra i sistemi.

Il cluster creato 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, completa i seguenti passaggi:

  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 i repository

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

Per semplificare questo tutorial, utilizza i comandi sed per aggiornare acm-config.yaml. Con il file acm-config.yaml, Config Sync esegue il deployment dei manifest necessari per ogni passaggio di questo tutorial. L'aggiornamento di un singolo file ti aiuta a concentrarti sui concetti e sul flusso che protegge i cluster, il mesh e le applicazioni senza dover manipolare ripetutamente i file ed eseguire comandi git ripetutamente.

Per utilizzare la funzionalità di Config Sync per sincronizzare più repository, utilizza le seguenti risorse:

  • root-sync, come repository RootSync, contiene tutte le configurazioni nel cluster, tra cui RepoSyncs, Constraints, ClusterRole, RoleBindings e le risorse incluse in alcuni spazi dei nomi di sistema come istio-system.
  • ingress-gateway, come primo RepoSync, contiene tutte le risorse necessarie per eseguire il deployment di un gateway in entrata e proteggerlo progressivamente in questo tutorial.
  • online-boutique, secondo RepoSync, contiene tutte le risorse necessarie per eseguire il deployment delle app Boutique online e proteggerle progressivamente durante questo tutorial.

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 e configurare il cluster in modo da eseguire la sincronizzazione dalle configurazioni dell'impostazione predefinita RootSync:

  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. Attiva la gestione automatica di Anthos Service Mesh per consentire a Google di applicare la configurazione consigliata di Anthos Service Mesh gestito:

    gcloud container fleet mesh update \
        --management 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 specfields.

  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 a sincronizzare con il cluster tutte le configurazioni dei RootSync predefiniti. Il file config installa e configura i seguenti componenti chiave:

  6. Per garantire 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, descrivine lo stato:

    gcloud container fleet mesh describe
    

    L'output è simile al seguente:

    createTime: '2022-09-13T23:12:56.477042921Z'
    membershipSpecs:
      projects/PROJECT_NUMBER/locations/global/memberships/asm-acm-tutorial:
        mesh:
          management: MANAGEMENT_AUTOMATIC
    membershipStates:
      projects/PROJECT_NUMBER/locations/global/memberships/asm-acm-tutorial:
        servicemesh:
          controlPlaneManagement:
            details:
            - code: REVISION_READY
              details: 'Ready: asm-managed'
            state: ACTIVE
          dataPlaneManagement:
            details:
            - code: OK
              details: Service is running.
            state: ACTIVE
        state:
          code: OK
          description: |-
            Revision(s) ready for use: asm-managed.
            All Canonical Services have been reconciled successfully.
          updateTime: '2022-09-14T00:19:10.571552206Z'
    name: projects/PROJECT_ID/locations/global/features/servicemesh
    resourceState:
      state: ACTIVE
    spec: {}
    state:
      state: {}
    updateTime: '2022-09-14T00:19:14.135113118Z'
    

    Se vedi state.code: ERROR anziché state.code: OK, attendi qualche minuto ed esegui di nuovo gcloud container fleet mesh describe. Prima di continuare con il tutorial, assicurati che il campo servicemesh.controlPlaneManagement.details.code abbia il valore REVISION_READY.

Deployment di un gateway in entrata e di un'applicazione di esempio

In questa sezione, esegui 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 seguente comando utilizza sed per aggiornare il manifest acm-config.yaml per ottenere il deployment di Config Sync 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 potrebbe richiedere alcuni minuti.

  2. Visualizza lo stato di Config Sync per RootSync e per i due RepoSyncs:

    gcloud alpha anthos config sync repo describe
    

    L'output è simile al seguente:

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

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

    Per visualizzare le informazioni di un solo repository puoi utilizzare i flag --sync-name e --sync-namespace. Per visualizzare le risorse gestite in dettaglio, aggiungi il flag --managed-resources. Per ulteriori informazioni, consulta Visualizzare lo stato di Config Sync in più cluster.

  3. 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
    
  4. 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}")
    
  5. Visita l'indirizzo IP del browser per verificare che il deployment dell'app Online Boutique sia riuscito:

    echo http://${EXTERNAL_IP}
    

Applica i criteri per proteggere il mesh

Nelle sezioni seguenti utilizzi il controller dei 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 abbiano l'inserimento automatico sidecar abilitato.

  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 esegue il deployment delle 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 qualche minuto ed esegui di nuovo gcloud alpha anthos config sync repo describe.

  3. Verifica che i seguenti Constraints siano stati creati:

    kubectl get constraints
    

    La valutazione di questi vincoli da parte di Policy Controller potrebbe 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 i Namespaces e le Pods, c'è 0 TOTAL-VIOLATIONS per queste Constraints.

  4. Per visualizzare questi Constraints al lavoro, prova a creare un Namespace nel cluster senza un label né un annotation:

    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 esegue il deployment delle 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 qualche minuto ed esegui di nuovo gcloud alpha anthos config sync repo describe.

  3. Esegui questo comando per ottenere ulteriori 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",
        "group": "constraints.gatekeeper.sh",
        "kind": "AsmPeerAuthnMeshStrictMtls",
        "message": "Root namespace <istio-system> does not have a strict mTLS PeerAuthentication",
        "name": "mesh-level-strict-mtls",
        "version": "v1beta1"
      }
    ]
    
  4. Risolvi il problema eseguendo il deployment di un PeerAuthentication in istio-system. Per impedire a tutti i tuoi servizi nel mesh di accettare traffico in 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 autenticarsi 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 fleet config-management apply \
        --membership ${CLUSTER} \
        --config $WORK_DIR/acm-config.yaml
    

    Il comando precedente esegue il deployment di STRICT mTLS PeerAuthentication seguente 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 qualche minuto ed esegui di nuovo gcloud alpha anthos config sync repo describe.

  6. Verifica che i seguenti Constraints siano stati creati:

    kubectl get constraints
    

    Tieni presente che potrebbero essere necessari alcuni minuti per far sì che il controller dei criteri valuti questi Constraints. Attendi ed esegui di nuovo questo comando kubectl get constraints finché non visualizzi i valori nella colonna TOTAL-VIOLATIONS per ciascuna 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 dispongano di un controllo granulare dell'accesso.

  1. Per applicare il 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 esegue il deployment delle 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 qualche minuto 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",
        "group": "constraints.gatekeeper.sh",
        "kind": "AsmAuthzPolicyDefaultDeny",
        "message": "Root namespace <istio-system> does not have a default deny AuthorizationPolicy",
        "name": "default-deny-authorization-policies",
        "version": "v1beta1"
      }
    ]
    
  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 fleet config-management apply \
        --membership ${CLUSTER} \
        --config $WORK_DIR/acm-config.yaml
    

    Il comando precedente esegue il deployment del seguente valore AuthorizationPolicy di negazione 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 qualche minuto ed esegui di nuovo gcloud alpha anthos config sync repo describe.

  6. Verifica che i seguenti Constraints siano stati creati:

    kubectl get constraints
    

    Tieni presente che potrebbero essere necessari alcuni minuti per far sì che il controller dei criteri valuti questi Constraints. Attendi ed esegui di nuovo questo comando kubectl get constraints finché non visualizzi i valori nella colonna TOTAL-VIOLATIONS per ciascuna 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 browser:

    echo http://${EXTERNAL_IP}
    

    Dovresti ricevere l'errore: RBAC: access denied, che conferma che il valore predefinito di negazione AuthorizationPolicy viene applicato all'intero mesh.

  8. Risolvi questo problema eseguendo il deployment di un AuthorizationPolicies più granulare 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 fleet config-management apply \
        --membership ${CLUSTER} \
        --config $WORK_DIR/acm-config.yaml
    

    Il comando precedente esegue il deployment delle seguenti risorse:

  9. Visualizza lo stato di Config Sync per RootSync e per i due RepoSyncs:

    gcloud alpha anthos config sync repo describe
    

    L'output è simile al seguente:

    getting 3 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/deploy-authorization-policies@main",
        "status": "SYNCED"
      },
      {
        "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/ingress-gateway/authorization-policies@main",
        "status": "SYNCED"
      },
      {
        "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 qualche minuto ed esegui di nuovo gcloud alpha anthos config sync repo describe.

    Per visualizzare le informazioni di un solo repository puoi utilizzare i flag --sync-name e --sync-namespace. Per visualizzare in dettaglio le risorse gestite, puoi aggiungere il flag --managed-resources. Per ulteriori informazioni, consulta Visualizzare lo stato di Config Sync in più cluster.

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

    echo http://${EXTERNAL_IP}
    

    Se attendi qualche minuto, ora dovresti vedere di nuovo il sito web che funziona 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, nella console Google Cloud.

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

    Vai ad Sicurezza di Anthos

    Nel Riepilogo criteri è visualizzato lo stato della sicurezza dell'applicazione, inclusi il controllo dell'accesso al servizio (AuthorizationPolicies) e il protocollo 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 dell'accesso ai servizi e Stato TLS forniscono una panoramica di alto livello.

    Panoramica di alto livello del controllo dell'accesso ai servizi e dello stato mTLS

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

    Elenco dettagliato di ciascun carico di lavoro e il relativo controllo dell'accesso ai servizi e lo stato mTLS

Ora hai protetto il tuo cluster e il tuo 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

    Elimina un progetto Cloud:

    gcloud projects delete PROJECT_ID

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 di questo 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 creati:

    rm -r $WORK_DIR
    

Passaggi successivi