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:
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.
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
-
Nella pagina del selettore dei progetti in Google Cloud Console, seleziona o crea un progetto Google Cloud.
-
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:
- Apri una sessione di Cloud Shell. Per aprire questa sessione, nell'angolo in alto a destra della pagina, fai clic su terminalAttiva 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.
Esegui l'upgrade all'ultima versione dell'interfaccia a riga di comando di Google Cloud:
gcloud components update
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
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.
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:
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
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 configurareRepoSync
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 perNamespace
ePod
.enforce-strict-mtls
: risorse per il deployment dei criteri per applicareSTRICT
mTLS per l'intera rete mesh e per qualsiasiPeerAuthentication
.enforce-authorization-policies
: risorse per il deployment dei criteri che consentono di applicare il criterio predefinitodeny
AuthorizationPolicy
per l'intera rete mesh, oltre che per l'applicazione di entità di origine granulari per qualsiasiAuthorizationPolicies
.
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 delSTRICT
mTLS predefinitoPeerAuthentication
nello spazio dei nomiistio-system
.fix-default-deny-authorization-policy
: risorse per il deployment del valore predefinito dideny
AuthorizationPolicy
nello spazio dei nomiistio-system
.deploy-authorization-policies
: risorse per il deployment delle risorseAuthorizationPolicy
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
:
Attiva Anthos Config Management nel tuo parco risorse:
gcloud beta container fleet config-management enable
Attiva Anthos Service Mesh nel tuo parco risorse.
gcloud container fleet mesh enable
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}
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).
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: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:
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
oNOT_INSTALLED
nelle righeStatus
oPolicy_Controller
, attendi qualche minuto ed esegui di nuovogcloud beta container fleet config-management status
.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 nuovogcloud container fleet mesh describe
. Prima di procedere con il tutorial, devi assicurarti che il camposervicemesh.controlPlaneManagement.details[].code
abbia il valoreREVISION_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.
Esegui il deployment dell'applicazione di esempio Online Boutique e del gateway in entrata.
Il comando seguente utilizza
sed
per aggiornare il manifestacm-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.
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 nuovogcloud 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.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 nuovogcloud alpha anthos config sync repo describe
.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
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}")
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.
Per applicare l'inserimento proxy proxy, applica i vincoli.
Il comando seguente utilizza
sed
per aggiornare il fileacm-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:
Un elemento
Constraint
K8sRequiredLabels
che richiedeNamespace
nel mesh per contenere la specifica etichetta di inserimento proxy proxy di Anthos Service Mesh:Un elemento
AsmSidecarInjection
Constraint
che impedisce a qualsiasi pod nel mesh di bypassare l'inserimento sidecar proxy Istio:
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 nuovogcloud alpha anthos config sync repo describe
.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 nuovokubectl 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
ePods
, c'è0
TOTAL-VIOLATIONS
per questiConstraints
.Per visualizzare questi
Constraints
al lavoro, prova a creare unNamespace
nel cluster senza un elementolabel
né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.
Per applicare la crittografia del traffico, applica i vincoli.
Il comando seguente utilizza
sed
per aggiornare il fileacm-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:
Un elemento
AsmPeerAuthnMeshStrictMtls
Constraint
che applica il tag mTLSPeerAuthentication
a livello di mesh nello spazio dei nomiistio-system
:Un vincolo di riferimento
Config
nello spazio dei nomigatekeeper-system
. Questo vincolo di riferimento consente aAsmPeerAuthnMeshStrictMtls
Constraint
di fare riferimento a un altro oggetto nella sua definizione (ad esempio, cercando qualsiasiPeerAuthentication
inistio-system
Namespace
):Un
DestinationRuleTLSEnabled
Constraint
che vieta la disabilitazione di TLS per tutti gli host e sottoinsiemi di host in IstioDestinationRules
:Un
Constraint
AsmPeerAuthnStrictMtls
che richiede che tutti gli elementiPeerAuthentications
non possano sovrascrivereSTRICT
TLS:
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 nuovogcloud alpha anthos config sync repo describe
.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" } ]
Risolvi il problema eseguendo il deployment di
PeerAuthentication
inistio-system
. Per impedire che tutti i servizi nel mesh accettino il traffico di testo normale, imposta un criterioPeerAuthentication
a livello di mesh con la modalità mTLS impostata suSTRICT
. 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 fileacm-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
STRICT
mTLSPeerAuthentication
nello spazio dei nomiistio-system
. Questa impostazione applica mTLSSTRICT
all'intero mesh: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 nuovogcloud alpha anthos config sync repo describe
.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 comandokubectl get constraints
finché non ricevi i valori nella colonnaTOTAL-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.
Per applicare un controllo dell'accesso granulare, applica i vincoli.
Il comando seguente utilizza
sed
per aggiornare il fileacm-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:
Un elemento
Constraint
AsmAuthzPolicyDefaultDeny
che applica la negazione predefinita a livello di meshAuthorizationPolicy
nello spazio dei nomiistio-system
:Un elemento
AsmAuthzPolicyEnforceSourcePrincipals
Constraint
che applica che qualsiasi elementoAuthorizationPolicies
definisca le entità di origine granulari (diverse da "*"). Solo il gateway Ingress nello spazio dei nomiasm-ingress
è un'eccezione a questa regola per ricevere il traffico dagli utenti finali e reindirizzare il traffico all'appfrontend
di Online Boutique.
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 nuovogcloud alpha anthos config sync repo describe
.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" } ]
Risolvi il problema eseguendo il deployment di
AuthorizationPolicy
nello spazio dei nomiistio-system
.Il comando seguente utilizza
sed
per aggiornare il fileacm-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 nomiistio-system
: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 nuovogcloud alpha anthos config sync repo describe
.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 comandokubectl get constraints
finché non ricevi i valori nella colonnaTOTAL-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
Visita l'app Online Boutique dal tuo browser:
echo http://${EXTERNAL_IP}
Dovresti ricevere l'errore:
RBAC: access denied
, che conferma che la negazione predefinitaAuthorizationPolicy
si applica all'intero mesh.Risolvi questo problema eseguendo il deployment di
AuthorizationPolicies
più granulari negli spazi dei nomiasm-ingress
eonlineboutique
.Il comando seguente utilizza
sed
per aggiornare il fileacm-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:
Un
AuthorizationPolicy
nello spazio dei nomiasm-ingress
:AuthorizationPolicy
per app nello spazio dei nomionlineboutique
. Ecco l'esempio dell'appcartservice
:Spazio dei nomi
ServiceAccount
per app inasm-ingress
eonlineboutique
, per avere un'identità univoca per ogni app valutata comeprincipal
inAuthorizationPolicies
. Ecco un esempio dell'appcartservice
:
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 nuovogcloud alpha anthos config sync repo describe
.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 nuovogcloud alpha anthos config sync repo describe
.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.
In Google Cloud Console, vai alla pagina Anthos Security.
Il Riepilogo criteri mostra lo stato della sicurezza delle applicazioni, inclusi il controllo dell'accesso del servizio (
AuthorizationPolicies
) e mTLS.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
eonlineboutique
).Le schede Controllo accesso servizi e Stato mTLS forniscono una panoramica di alto livello.
L'elenco Carichi di lavoro mostra il controllo di accesso ai servizi e lo stato mTLS di ciascun carico di lavoro.
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
- In Cloud Console, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto da eliminare, quindi fai clic su Elimina.
- 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:
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.
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].
Elimina i file che hai creato:
rm -r $WORK_DIR
Passaggi successivi
- Scopri le best practice per la sicurezza di Anthos Service Mesh.
- Scopri di più sul bundle criteri di Anthos Service Mesh.
- Esplora la libreria dei modelli di vincolo di Policy Controller.
- Esplora architetture di riferimento, diagrammi, tutorial e best practice su Google Cloud. Dai un'occhiata al nostro Cloud Architecture Center.