Questo tutorial mostra come migliorare la strategia di sicurezza del cluster e dell'app. Supponi di essere un amministratore di piattaforma la cui organizzazione gestisce le app per il negozio online con Cloud Service Mesh, un suite di strumenti per il monitoraggio e la gestione di un mesh di servizi affidabile. Tu garantire che la rete mesh e le app siano sicure.
Puoi prevenire gli errori di configurazione e convalidare automaticamente il tuo mesh di servizi Cloud i criteri utilizzando Policy Controller e Config Sync. Policy Controller consente l'applicazione di criteri completamente programmabili per nei cluster. Policy Controller include anche una libreria predefinita di modelli di vincoli che puoi utilizzare con Pacchetto di sicurezza Cloud Service Mesh per verificare la conformità delle vulnerabilità e le best practice della sicurezza mesh. Config Sync riconcilia continuamente lo stato dei cluster con un set centrale di file di configurazione dichiarativi di Kubernetes. Utilizzo Policy Controller e Config Sync consentono di eseguire applicare i vincoli configurazioni dei criteri di Cloud Service Mesh.
Il seguente diagramma mostra una panoramica di come Cloud Service Mesh, Policy Controller e Config Sync collaborano in questo tutorial per gestire e proteggi un gateway in entrata e le app di esempio Online Boutique che utilizzi in questo tutorial:
Obiettivi
- Crea un cluster Google Kubernetes Engine (GKE) e registralo in un flotta.
- Installa Policy Controller, Config Sync e Cloud Service Mesh su un cluster.
- Configura Config Sync su sincronizzare più repository
- Applica le best practice per eseguire il deployment di configurazioni, app e risorse Istio con Config Sync.
- Esegui il deployment delle configurazioni di cluster, delle app di esempio Online Boutique e di un traffico in entrata con Config Sync.
- Sfrutta la
Pacchetto di criteri di Cloud 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'inserimento automatico collaterale.
- Cripta tutto il traffico nella rete mesh.
- Garantire che tutti i carichi di lavoro nel mesh dispongano di un controllo dell'accesso granulare.
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
- GKE.
- GKE Enterprise. The billing for GKE Enterprise includes billing for the Cloud Service Mesh, Config Sync, and Policy Controller.
Per generare una stima dei costi basata sull'utilizzo previsto,
utilizza il Calcolatore prezzi.
Una volta completate le attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la pagina Pulizia.
Prima di iniziare
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
prepara l'ambiente
In questa sezione, preparerai l'ambiente in modo da poter installare Cloud Service Mesh, Policy Controller e Config Sync:
-
In the Google Cloud console, activate Cloud Shell.
Esegui l'upgrade alla versione più recente di Google Cloud CLI:
gcloud components update
Per archiviare i file che crei in questo tutorial, crea una directory:
mkdir ~/asm-acm-tutorial-dir
Per semplificare il resto del tutorial, crea il seguente ambiente variabili:
PROJECT_ID=PROJECT_ID gcloud config set project $PROJECT_ID CLUSTER=asm-acm-tutorial CLUSTER_ZONE=us-east4-a MEMBERSHIP=asm-acm-tutorial PROJECT_NUMBER=$(gcloud projects describe ${PROJECT_ID} --format='get(projectNumber)')
Sostituisci
PROJECT_ID
con l'ID progetto che che vuoi usare per questo tutorial.Se ti viene chiesto di autorizzare Cloud Shell, fai clic su Autorizza per per completare l'operazione.
Abilita le API necessarie per questo tutorial:
gcloud
gcloud services enable \ mesh.googleapis.com \ anthos.googleapis.com
Config Connector
Questo tutorial include Config Connector Google Cloud. Puoi utilizzare queste risorse per completare le stesse attività completa nella scheda
gcloud
. Per utilizzare queste risorse, installa Config Connector e applicare le risorse nel modo più adatto al tuo ambiente.Utilizza il seguente
Services
manifest:apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1 kind: Service metadata: annotations: cnrm.cloud.google.com/deletion-policy: "abandon" cnrm.cloud.google.com/disable-dependent-services: "false" name: mesh.googleapis.com spec: resourceID: mesh.googleapis.com projectRef: external: PROJECT_ID --- apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1 kind: Service metadata: annotations: cnrm.cloud.google.com/deletion-policy: "abandon" cnrm.cloud.google.com/disable-dependent-services: "false" name: anthos.googleapis.com spec: resourceID: anthos.googleapis.com projectRef: external: PROJECT_ID
Questa operazione può richiedere più di un minuto.
configura un cluster GKE
In questa sezione devi creare un cluster GKE e quindi registrare in un parco. I parchi risorse sono Concetto di Google Cloud per l'organizzazione logica di cluster e altre risorse. consentendoti di utilizzare e gestire funzionalità multi-cluster e di applicare criteri nei tuoi sistemi.
Il cluster che crei in questa sezione è quello che installi Cloud Service Mesh, Policy Controller e Config Sync attivi. È anche il cluster in cui esegui il deployment delle app di esempio Online Boutique.
Per configurare il cluster, completa i seguenti passaggi:
Crea un cluster GKE:
gcloud
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}
Config Connector
Utilizza il seguente
ContainerCluster
eContainerNodePool
e manifest:apiVersion: container.cnrm.cloud.google.com/v1beta1 kind: ContainerNodePool metadata: annotations: cnrm.cloud.google.com/project-id: PROJECT_ID name: asm-acm-tutorial spec: clusterRef: name: asm-acm-tutorial location: us-east4-a nodeConfig: machineType: e2-standard-4 nodeCount: 4 --- apiVersion: container.cnrm.cloud.google.com/v1beta1 kind: ContainerCluster metadata: annotations: cnrm.cloud.google.com/project-id: PROJECT_ID cnrm.cloud.google.com/remove-default-node-pool: "true" labels: mesh_id: proj-PROJECT_NUMBER name: asm-acm-tutorial spec: location: us-east4-a initialNodeCount: 1 workloadIdentityConfig: workloadPool: PROJECT_ID.svc.id.goog
Sostituisci
PROJECT_NUMBER
con il valore dell'ambientePROJECT_NUMBER
recuperata in precedenza.Questa operazione può richiedere più di cinque minuti.
Per garantire la corretta creazione del cluster GKE, descrivine la stato:
gcloud container clusters list \ --zone ${CLUSTER_ZONE} \ --project ${PROJECT_ID}
L'output è simile al seguente:
NAME LOCATION MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS asm-acm-tutorial us-east4-a 1.23.12-gke.100 35.186.179.30 e2-standard-4 1.23.12-gke.100 3 RUNNING
Connettiti al cluster GKE:
gcloud container clusters get-credentials ${CLUSTER} \ --zone ${CLUSTER_ZONE} \ --project ${PROJECT_ID}
Registra il tuo cluster in un parco risorse:
gcloud
gcloud container fleet memberships register ${MEMBERSHIP} \ --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.
Config Connector
Utilizza il seguente
GKEHubMembership
manifest:apiVersion: gkehub.cnrm.cloud.google.com/v1beta1 kind: GKEHubMembership metadata: annotations: cnrm.cloud.google.com/project-id: PROJECT_ID name: asm-acm-tutorial spec: location: global authority: issuer: https://container.googleapis.com/v1/projects/PROJECT_ID/locations/us-east4-a/clusters/asm-acm-tutorial endpoint: gkeCluster: resourceRef: name: asm-acm-tutorial
Per garantire la corretta registrazione del cluster GKE, descrivere il suo stato:
gcloud container fleet memberships list
L'output è simile al seguente:
NAME EXTERNAL_ID LOCATION asm-acm-tutorial 0e12258c-8831-4d81-b5c0-5e7099a468cc global
Esplora i repository
Nella seguente sezione sull'installazione, applichi una
file manifest acm-config.yaml
. Questo manifest configura
per sincronizzare il cluster
Cartella asm-acm-tutorial
del repository di esempio. Questa cartella contiene tutte
i file di configurazione necessari per completare il resto del tutorial.
Per semplificare questo tutorial, utilizzerai i comandi sed
per aggiornare
acm-config.yaml
. Con il file acm-config.yaml
,
Config Sync esegue il deployment dei manifest richiesti per ogni passaggio di questo tutorial.
L’aggiornamento di un singolo file consente di concentrarsi sui concetti e sul flusso di sicurezza
i tuoi cluster, mesh e applicazioni senza manipolare ripetutamente i file
ed eseguendo ripetutamente comandi git
.
Per utilizzare la capacità di Config Sync di sincronizzare più repository, utilizzi le seguenti risorse:
root-sync
, comeRootSync
contenente tutte le configurazioni del cluster, tra cuiRepoSyncs
,Constraints
,ClusterRole
,RoleBindings
e risorse incluse in un sistema comeistio-system
.ingress-gateway
, come primoRepoSync
, contiene tutte le risorse necessarie per eseguire il deployment in entrata e proteggerlo progressivamente durante questo tutorial.online-boutique
, come secondoRepoSync
, contiene tutte le risorse necessarie per eseguire il deployment Boutique online e proteggile progressivamente con questo tutorial.
Installa Policy Controller, Config Sync e Cloud Service Mesh gestito
Ora che hai creato e registrato il cluster, puoi installare
Config Sync, Policy Controller e Cloud Service Mesh sul cluster e
configura il cluster per la sincronizzazione dalle configurazioni del tipo predefinito RootSync
:
Attiva l'operatore
ConfigManagement
, che gestisce Config Sync e Policy Controller:gcloud
gcloud beta container fleet config-management enable
Config Connector
Utilizza il seguente
GKEHubFeature
manifest:apiVersion: gkehub.cnrm.cloud.google.com/v1beta1 kind: GKEHubFeature metadata: name: configmanagement spec: projectRef: external: PROJECT_ID location: global resourceID: configmanagement
Abilita Cloud Service Mesh nel parco risorse.
gcloud
gcloud container fleet mesh enable
Config Connector
Utilizza il seguente
GKEHubFeature
manifest:apiVersion: gkehub.cnrm.cloud.google.com/v1beta1 kind: GKEHubFeature metadata: name: servicemesh spec: projectRef: external: PROJECT_ID location: global resourceID: servicemesh
Attiva la gestione automatica di Cloud Service Mesh per consentire a Google applicare la configurazione consigliata per Cloud Service Mesh gestito:
gcloud
gcloud container fleet mesh update \ --management automatic \ --memberships ${MEMBERSHIP}
Config Connector
Utilizza il seguente
GKEHubFeatureMembership
manifest:apiVersion: gkehub.cnrm.cloud.google.com/v1beta1 kind: GKEHubFeatureMembership metadata: name: servicemesh-membership spec: projectRef: external: PROJECT_ID location: global membershipRef: name: asm-acm-tutorial featureRef: name: servicemesh mesh: management: MANAGEMENT_AUTOMATIC
Abilita Config Sync e Policy Controller:
gcloud
Salva il seguente manifest come
acm-config.yaml
nella directory~/asm-acm-tutorial-dir
:applySpecVersion: 1 spec: configSync: enabled: true policyDir: asm-acm-tutorial/root-sync/init secretType: none sourceFormat: unstructured syncRepo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples syncBranch: main policyController: enabled: true referentialRulesEnabled: true templateLibraryInstalled: true
Per saperne di più sui campi di configurazione di Google Cloud CLI, consulta gcloud apply spec fields.
Applica il file:
gcloud beta container fleet config-management apply \ --membership ${MEMBERSHIP} \ --config ~/asm-acm-tutorial-dir/acm-config.yaml
Config Connector
Utilizza il seguente
GKEHubFeatureMembership
manifest:apiVersion: gkehub.cnrm.cloud.google.com/v1beta1 kind: GKEHubFeatureMembership metadata: name: configmanagement-membership spec: projectRef: external: PROJECT_ID location: global membershipRef: name: asm-acm-tutorial featureRef: name: configmanagement configmanagement: configSync: sourceFormat: unstructured git: policyDir: asm-acm-tutorial/root-sync/init secretType: none syncBranch: main syncRepo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples policyController: enabled: true referentialRulesEnabled: true templateLibraryInstalled: true
Policy Controller e Config Sync sono installati sul cluster. Poi, Config Sync inizia a sincronizzare tutte le configurazioni dell'impostazione predefinita
RootSync
con nel tuo cluster. Queste configurazioni installano e configurano la chiave seguente componenti:Gli oggetti
RepoSync
che configurano le app Boutique online e i gateway in entrata sono sincronizzati:Poiché il I riconciliatori
RepoSync
richiedono autorizzazioni aggiuntive per creare risorse Istio, un oggettoClusterRole
e due oggettiRoleBinding
per concedere queste autorizzazioni vengono applicati anche al tuo cluster:
Per garantire la corretta installazione di Policy Controller e Config Sync, controlla lo stato:
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
inStatus
oPolicy_Controller
di righe, attendere qualche minuto ed eseguiregcloud beta container fleet config-management status
di nuovo.Per garantire la corretta installazione di Cloud 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 eseguigcloud container fleet mesh describe
di nuovo. Prima di proseguire con il tutorial, devi assicurarti che il camposervicemesh.controlPlaneManagement.details.code
ha il valoreREVISION_READY
.
Esegui il deployment di un gateway in entrata e di un'applicazione di esempio
In questa sezione eseguirai il deployment Applicazione di esempio Online Boutique e 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 seguente comando utilizza
sed
per aggiornare il manifestacm-config.yaml
in ottenere Config Sync che esegue il deployment delle risorse necessarie per il deployment del traffico in entrata gateway e app di esempio.sed -i "s,root-sync/init,root-sync/deployments,g" ~/asm-acm-tutorial-dir/acm-config.yaml gcloud beta container fleet config-management apply \ --membership ${MEMBERSHIP} \ --config ~/asm-acm-tutorial-dir/acm-config.yaml
Tieni presente che questo passaggio può richiedere alcuni minuti.
Visualizza lo stato di Config Sync per
RootSync
e per i dueRepoSyncs
:gcloud alpha anthos config sync repo describe
L'output è simile a questo:
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 eseguigcloud alpha anthos config sync repo describe
di nuovo.Per visualizzare solo le informazioni di un repository, puoi utilizzare
--sync-name
e--sync-namespace
flag. Per visualizzare i dettagli delle risorse gestite, aggiungi il flag--managed-resources
. Per ulteriori informazioni, vedi Visualizza lo stato di Config Sync in più cluster.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 dal tuo browser per verificare che l'app Online Boutique deployment eseguito correttamente:
echo http://${EXTERNAL_IP}
Applica criteri per proteggere la rete mesh
Nelle sezioni seguenti, usi Policy Controller per applicare i criteri Pacchetto di criteri di Cloud Service Mesh creando vincoli.
Applica l'inserimento dei proxy sidecar
In questa sezione applicherai i criteri per garantire che tutti i carichi di lavoro nel mesh siano iniezione automatica del file collaterale in un bucket in cui è abilitato il controllo delle versioni.
Per applicare l'inserimento di proxy sidecar, applica i vincoli.
Il comando seguente utilizza
sed
per aggiornare il manifestacm-config.yaml
in modo che Config Sync esegua il deployment delle risorse associate.sed -i "s,root-sync/deployments,root-sync/enforce-sidecar-injection,g" ~/asm-acm-tutorial-dir/acm-config.yaml gcloud beta container fleet config-management apply \ --membership ${MEMBERSHIP} \ --config ~/asm-acm-tutorial-dir/acm-config.yaml
Il comando precedente esegue il deployment delle seguenti risorse:
Un
Constraint
K8sRequiredLabels
che richiede una qualsiasiNamespace
nella mesh per contenere lo specifico Etichetta di inserimento proxy sidecar di Cloud Service Mesh:Un
AsmSidecarInjection
Constraint
che impedisce a qualsiasiPod
nel mesh di bypassare Istio iniezione di file collaterali proxy:
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 a questo:
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 eseguigcloud alpha anthos config sync repo describe
di nuovo.Verifica che i
Constraints
siano stati creati:kubectl get constraints
Policy Controller può richiedere alcuni minuti per valutarli i vincoli. Se non vedi valori nella colonna
TOTAL-VIOLATIONS
, attendi ed esegui di nuovokubectl get constraints
.L'output è simile a questo:
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
, puoi trovare0
TOTAL-VIOLATIONS
perConstraints
.Per vedere questi
Constraints
in azione, prova a creare unNamespace
nel tuo cluster né unlabel
né unannotation
: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"}
Applicare la crittografia del traffico
In questa sezione applicherai 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 manifestacm-config.yaml
in modo che Config Sync esegua il deployment delle risorse associate.sed -i "s,root-sync/enforce-sidecar-injection,root-sync/enforce-strict-mtls,g" ~/asm-acm-tutorial-dir/acm-config.yaml gcloud beta container fleet config-management apply \ --membership ${MEMBERSHIP} \ --config ~/asm-acm-tutorial-dir/acm-config.yaml
Il comando precedente esegue il deployment delle seguenti risorse:
Un
AsmPeerAuthnMeshStrictMtls
Constraint
che applica il protocollo mTLS a livello di meshPeerAuthentication
nei Spazio dei nomiistio-system
:Un vincolo referenziale
Config
nello spazio dei nomigatekeeper-system
. Questo vincolo referenziale consente all'elementoAsmPeerAuthnMeshStrictMtls
Constraint
di fare riferimento a un altro oggetto nella sua definizione (ad esempio, cercando qualsiasiPeerAuthentication
inistio-system
Namespace
):Un
Constraint
DestinationRuleTLSEnabled
che impedisce la disattivazione di TLS per tutti gli host e i sottoinsiemi di host in IstioDestinationRules
:Un elemento
AsmPeerAuthnStrictMtls
Constraint
che impone che tutti iPeerAuthentications
non possono sovrascrivereSTRICT
mTLS:
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 a questo:
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 eseguigcloud alpha anthos config sync repo describe
di nuovo.Esegui questo comando per ottenere ulteriori informazioni Violazione per
PeerAuthentication
:kubectl get asmpeerauthnmeshstrictmtls.constraints.gatekeeper.sh/mesh-level-strict-mtls -ojsonpath='{.status.violations}' | jq
L'output è simile a questo:
[ { "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" } ]
Risolvi il problema eseguendo il deployment di un'
PeerAuthentication
inistio-system
. Per impedire che tutti i tuoi servizi nella rete mesh affinché non accetti traffico di testo non crittografato, imposta un criterioPeerAuthentication
a livello di mesh con 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 autenticarsi tra loro.Il comando seguente utilizza
sed
per aggiornare il manifestacm-config.yaml
in modo che Config Sync esegua il deployment delle risorse associate.sed -i "s,root-sync/enforce-strict-mtls,root-sync/fix-strict-mtls,g" ~/asm-acm-tutorial-dir/acm-config.yaml gcloud beta container fleet config-management apply \ --membership ${MEMBERSHIP} \ --config ~/asm-acm-tutorial-dir/acm-config.yaml
Il comando precedente esegue il deployment del seguente
STRICT
mTLSPeerAuthentication
inistio-system
nello spazio dei nomi. In questo modo, mTLSSTRICT
viene applicato 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 a questo:
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 eseguigcloud alpha anthos config sync repo describe
di nuovo.Verifica che i
Constraints
siano stati creati:kubectl get constraints
Tieni presente che questa operazione può richiedere alcuni minuti prima che Policy Controller valuti questi
Constraints
. Attendi ed esegui di nuovo questo comandokubectl get constraints
finché non ottieni valori nella colonnaTOTAL-VIOLATIONS
per ogni riga.L'output è simile a questo:
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
Applicazione di un controllo dell'accesso granulare
In questa sezione applicherai i criteri per garantire che tutti i carichi di lavoro nel mesh dispongono di un controllo dell'accesso granulare.
Applica i vincoli per applicare un controllo dell'accesso granulare.
Il comando seguente utilizza
sed
per aggiornare il manifestacm-config.yaml
in modo che Config Sync esegua il deployment delle risorse associate.sed -i "s,root-sync/fix-strict-mtls,root-sync/enforce-authorization-policies,g" ~/asm-acm-tutorial-dir/acm-config.yaml gcloud beta container fleet config-management apply \ --membership ${MEMBERSHIP} \ --config ~/asm-acm-tutorial-dir/acm-config.yaml
Il comando precedente esegue il deployment delle seguenti risorse:
Un
Constraint
AsmAuthzPolicyDefaultDeny
che applica in modo forzato Rifiuto predefinito diAuthorizationPolicy
a livello di mesh nello spazio dei nomiistio-system
:AsmAuthzPolicyEnforceSourcePrincipals
Constraint
che impone che qualsiasiAuthorizationPolicies
stia definendo entità di origine granulari (diverse da "*"). Solo il gateway in entrata nello spazio dei nomiasm-ingress
è un'eccezione a questa regola per ricevere il traffico dagli utenti finali e reindirizzarlo all'appfrontend
di Boutique online.
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 a questo:
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 eseguigcloud alpha anthos config sync repo describe
di nuovo.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 a questo:
[ { "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" } ]
Risolvi il problema eseguendo il deployment di
AuthorizationPolicy
inistio-system
nello spazio dei nomi.Il comando seguente utilizza
sed
per aggiornare il manifestacm-config.yaml
in modo che Config Sync esegua il deployment delle risorse associate.sed -i "s,root-sync/enforce-authorization-policies,root-sync/fix-default-deny-authorization-policy,g" ~/asm-acm-tutorial-dir/acm-config.yaml gcloud beta container fleet config-management apply \ --membership ${MEMBERSHIP} \ --config ~/asm-acm-tutorial-dir/acm-config.yaml
Il comando precedente esegue il deployment del seguente elemento
AuthorizationPolicy
di negazione inistio-system
spazio dei nomi: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 a questo:
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 eseguigcloud alpha anthos config sync repo describe
di nuovo.Verifica che i
Constraints
siano stati creati:kubectl get constraints
Tieni presente che questa operazione può richiedere alcuni minuti prima che Policy Controller valuti questi
Constraints
. Attendi ed esegui di nuovo questo comandokubectl get constraints
finché non ottieni valori nella colonnaTOTAL-VIOLATIONS
per ogni riga.L'output è simile a questo:
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 Il valore predefinito di negazioneAuthorizationPolicy
viene applicato all'intera rete mesh.Risolvi questo problema eseguendo il deployment di
AuthorizationPolicies
in modo più granulare in gli spazi dei nomiasm-ingress
eonlineboutique
.Il comando seguente utilizza
sed
per aggiornare il manifestacm-config.yaml
in modo che Config Sync esegua il deployment delle risorse associate.sed -i "s,root-sync/fix-default-deny-authorization-policy,root-sync/deploy-authorization-policies,g" ~/asm-acm-tutorial-dir/acm-config.yaml gcloud beta container fleet config-management apply \ --membership ${MEMBERSHIP} \ --config ~/asm-acm-tutorial-dir/acm-config.yaml
Il comando precedente esegue il deployment delle seguenti risorse:
Un
AuthorizationPolicy
nelasm-ingress
spazio dei nomi:Un
AuthorizationPolicy
per app nel periodoonlineboutique
dello spazio dei nomi, ecco l'esempio per l'appcartservice
:ServiceAccount
per app inasm-ingress
eonlineboutique
spazi dei nomi per avere un'identità univoca per app valutata comeprincipal
neiAuthorizationPolicies
. Ecco l'esempio per l'appcartservice
:
Visualizza lo stato di Config Sync per
RootSync
e per i dueRepoSyncs
:gcloud alpha anthos config sync repo describe
L'output è simile a questo:
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 eseguigcloud alpha anthos config sync repo describe
di nuovo.Per visualizzare solo le informazioni di un repository, puoi utilizzare
--sync-name
e--sync-namespace
flag. Per vedere nel dettaglio le risorse gestite, puoi aggiungere il flag--managed-resources
. Per ulteriori informazioni, vedi Visualizza lo stato di Config Sync in più cluster.Visita nuovamente l'app Online Boutique dal browser:
echo http://${EXTERNAL_IP}
Se attendi qualche minuto, il sito web dovrebbe di nuovo funzionare come previsto.
Visualizza lo stato delle funzionalità di sicurezza di GKE Enterprise
Puoi visualizzare lo stato delle funzionalità di sicurezza di GKE Enterprise, inclusa l'autenticazione e i criteri di autorizzazione, nella console Google Cloud.
Nella console Google Cloud, vai alla pagina Sicurezza di GKE Enterprise.
Vai alla pagina Sicurezza di GKE Enterprise
Il Riepilogo criteri mostra lo stato della sicurezza dell'applicazione. tra cui Controllo dell'accesso ai servizi (
AuthorizationPolicies
) e mTLS.Fai clic su Policy Audit per visualizzare gli stati dei criteri dei carichi di lavoro per il cluster entrambi gli spazi dei nomi (
asm-ingress
eonlineboutique
).Le schede Controllo dell'accesso al servizio e Stato mTLS forniscono una panoramica generale.
L'elenco Carichi di lavoro mostra il controllo dell'accesso al servizio e lo stato mTLS di per ogni carico di lavoro.
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 Google Cloud:
gcloud projects delete PROJECT_ID
Elimina singole risorse
Per eliminare le singole risorse:
Annulla la registrazione del cluster dal parco risorse:
gcloud
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.
Config Connector
kubectl delete -f ~/asm-acm-tutorial-dir/fleet-membership.yaml
Elimina il cluster:
gcloud
gcloud container clusters delete ${CLUSTER} \ --zone ${CLUSTER_ZONE}
Premi
y
quando richiesto. Questo comando può richiedere più di cinque minuti completato.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].
Config Connector
kubectl delete -f ~/asm-acm-tutorial-dir/container-cluster.yaml
Elimina i file che hai creato:
rm -r ~/asm-acm-tutorial-dir
Passaggi successivi
- Scopri le best practice per la sicurezza di Cloud Service Mesh.
- Scopri di più su il pacchetto di criteri di Cloud Service Mesh.
- Esplora Policy Controller libreria di modelli di vincolo.
- Esplora le architetture di riferimento, i diagrammi e le best practice su Google Cloud. Dai un'occhiata al nostro Centro architetture cloud.