Tutorial ini menunjukkan cara meningkatkan postur keamanan cluster dan aplikasi Anda. Bayangkan Anda adalah administrator platform yang organisasinya mengelola aplikasi untuk toko online mereka dengan Cloud Service Mesh, serangkaian alat yang membantu Anda memantau dan mengelola mesh layanan yang andal. Anda bertanggung jawab untuk memastikan bahwa mesh dan aplikasi Anda aman.
Anda dapat mencegah kesalahan konfigurasi dan memvalidasi kebijakan Cloud Service Mesh secara otomatis menggunakan Pengontrol Kebijakan dan Config Sync. Pengontrol Kebijakan memungkinkan penerapan kebijakan yang sepenuhnya dapat diprogram untuk cluster Anda. Policy Controller juga dilengkapi dengan library default template batasan yang dapat Anda gunakan dengan paket keamanan Cloud Service Mesh untuk mengaudit kepatuhan terhadap praktik terbaik dan kerentanan keamanan mesh Anda. Config Sync terus merekonsiliasi status cluster dengan sekumpulan file konfigurasi deklaratif Kubernetes pusat. Dengan menggunakan Pengontrol Kebijakan dan Config Sync secara bersamaan, Anda dapat terus menerapkan batasan pada konfigurasi kebijakan Cloud Service Mesh.
Diagram berikut menunjukkan ringkasan cara Cloud Service Mesh, Policy Controller, dan Config Sync bekerja sama dalam tutorial ini untuk mengelola dan melindungi gateway traffic masuk dan aplikasi contoh Online Boutique yang Anda gunakan dalam tutorial ini:
Menyiapkan lingkungan Anda
Di bagian ini, Anda akan menyiapkan lingkungan agar dapat menginstal Cloud Service Mesh, Policy Controller, dan Config Sync:
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Upgrade Google Cloud CLI ke versi terbaru:
gcloud components updateUntuk menyimpan file yang Anda buat dalam tutorial ini, buat direktori:
mkdir ~/asm-acm-tutorial-dirUntuk menyederhanakan tutorial selanjutnya, buat variabel lingkungan berikut:
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)')Ganti
PROJECT_IDdengan project ID yang ingin Anda gunakan untuk tutorial ini.Jika Anda diminta untuk memberikan otorisasi pada Cloud Shell, klik Authorize untuk menyelesaikan operasi.
Aktifkan API yang Anda perlukan untuk tutorial ini:
gcloud
gcloud services enable \ mesh.googleapis.com \ anthos.googleapis.comConfig Connector
Tutorial ini mencakup resource Config Connector. Anda dapat menggunakan resource ini untuk menyelesaikan tugas yang sama dengan yang diselesaikan di tab
gcloud. Untuk menggunakan resource ini, instal Config Connector dan terapkan resource dengan cara yang paling sesuai untuk lingkungan Anda.Gunakan manifes
Servicesberikut: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_IDOperasi ini dapat memerlukan waktu lebih dari satu menit untuk selesai.
Buat cluster GKE:
gcloud
gcloud container clusters create ${CLUSTER} \ --zone ${CLUSTER_ZONE} \ --machine-type=e2-standard-4 \ --num-nodes 4 \ --workload-pool ${PROJECT_ID}. \ --labels mesh_id=proj-${PROJECT_NUMBER}Config Connector
Gunakan manifes
ContainerClusterdanContainerNodePoolberikut: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.Ganti
PROJECT_NUMBERdengan nilai variabel lingkunganPROJECT_NUMBERyang diambil sebelumnya.Operasi ini dapat memerlukan waktu lebih dari lima menit untuk selesai.
Untuk memastikan keberhasilan pembuatan cluster GKE, deskripsikan statusnya:
gcloud container clusters list \ --zone ${CLUSTER_ZONE} \ --project ${PROJECT_ID}Outputnya mirip dengan hal berikut ini:
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 RUNNINGHubungkan ke cluster GKE
gcloud container clusters get-credentials ${CLUSTER} \ --zone ${CLUSTER_ZONE} \ --project ${PROJECT_ID}Daftarkan cluster Anda ke fleet:
gcloud
gcloud container fleet memberships register ${MEMBERSHIP} \ --project ${PROJECT_ID} \ --gke-cluster ${CLUSTER_ZONE}/${CLUSTER} \ --enable-workload-identityOutputnya mirip dengan hal berikut ini:
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
Gunakan manifes
GKEHubMembershipberikut: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-tutorialUntuk memastikan keberhasilan pendaftaran cluster GKE, deskripsikan statusnya:
gcloud container fleet memberships listOutputnya mirip dengan hal berikut ini:
NAME EXTERNAL_ID LOCATION asm-acm-tutorial 0e12258c-8831-4d81-b5c0-5e7099a468cc globalroot-sync, sebagai repositoriRootSync, berisi semua konfigurasi di seluruh cluster Anda, termasukRepoSyncs,Constraints,ClusterRole,RoleBindings, dan resource yang disertakan dalam beberapa namespace sistem sepertiistio-system.ingress-gateway, sebagaiRepoSyncpertama, berisi semua resource yang diperlukan untuk men-deploy gateway ingress dan mengamankannya secara progresif di sepanjang tutorial ini.online-boutique, sebagaiRepoSynckedua, berisi semua resource yang diperlukan untuk men-deploy aplikasi Online Boutique dan mengamankannya secara progresif selama tutorial ini.Aktifkan operator
ConfigManagement, yang mengelola Config Sync dan Pengontrol Kebijakan:gcloud
gcloud beta container fleet config-management enableConfig Connector
Gunakan manifes
GKEHubFeatureberikut:apiVersion: gkehub.cnrm.cloud.google.com/v1beta1 kind: GKEHubFeature metadata: name: configmanagement spec: projectRef: external: PROJECT_ID location: global resourceID: configmanagementAktifkan Cloud Service Mesh di fleet Anda.
gcloud
gcloud container fleet mesh enableConfig Connector
Gunakan manifes
GKEHubFeatureberikut:apiVersion: gkehub.cnrm.cloud.google.com/v1beta1 kind: GKEHubFeature metadata: name: servicemesh spec: projectRef: external: PROJECT_ID location: global resourceID: servicemeshAktifkan pengelolaan otomatis Cloud Service Mesh agar Google dapat menerapkan konfigurasi yang direkomendasikan untuk Cloud Service Mesh terkelola:
gcloud
gcloud container fleet mesh update \ --management automatic \ --memberships ${MEMBERSHIP}Config Connector
Gunakan manifes
GKEHubFeatureMembershipberikut: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_AUTOMATICAktifkan Config Sync dan Pengontrol Kebijakan:
gcloud
Simpan manifes berikut sebagai
acm-config.yamldi direktori~/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: trueUntuk mempelajari lebih lanjut kolom konfigurasi Google Cloud CLI, lihat kolom spesifikasi penerapan gcloud.
Terapkan file:
gcloud beta container fleet config-management apply \ --membership ${MEMBERSHIP} \ --config ~/asm-acm-tutorial-dir/acm-config.yamlConfig Connector
Gunakan manifes
GKEHubFeatureMembershipberikut: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: truePolicy Controller dan Config Sync diinstal di cluster Anda. Selanjutnya, Config Sync mulai menyinkronkan semua konfigurasi
RootSyncdefault ke cluster Anda. Konfigurasi ini menginstal dan mengonfigurasi komponen utama berikut:Objek
RepoSyncyang mengonfigurasi aplikasi Butik Online dan gateway ingress disinkronkan:Karena rekonsiliator
RepoSyncmemerlukan izin tambahan untuk membuat resource Istio,ClusterRoledan dua objekRoleBindinguntuk memberikan izin ini juga diterapkan ke cluster Anda:
Untuk memastikan penginstalan Policy Controller dan Config Sync berhasil, periksa statusnya:
gcloud beta container fleet config-management statusOutputnya mirip dengan hal berikut ini:
Name: asm-acm-tutorial Status: SYNCED Last_Synced_Token: 4b3384d Sync_Branch: main Last_Synced_Time: 2022-05-04T21:32:58Z Policy_Controller: INSTALLEDJika Anda melihat
PENDINGatauNOT_INSTALLEDdi barisStatusatauPolicy_Controller, tunggu beberapa menit dan jalankangcloud beta container fleet config-management statuslagi.Untuk memastikan keberhasilan penginstalan Cloud Service Mesh, jelaskan statusnya:
gcloud container fleet mesh describeOutputnya mirip dengan hal berikut ini:
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'Jika Anda melihat
state.code: ERROR, bukanstate.code: OK, tunggu beberapa menit dan jalankangcloud container fleet mesh describelagi. Sebelum melanjutkan tutorial, Anda harus memastikan bahwa kolomservicemesh.controlPlaneManagement.details.codememiliki nilaiREVISION_READY.Deploy contoh aplikasi Butik Online dan gateway ingress.
Perintah berikut menggunakan
seduntuk memperbarui manifesacm-config.yamlagar Config Sync men-deploy resource yang Anda butuhkan untuk men-deploy gateway ingress dan aplikasi contoh.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.yamlPerhatikan bahwa langkah ini dapat memerlukan waktu beberapa menit hingga selesai.
Lihat status Config Sync untuk
RootSyncdan duaRepoSyncs:gcloud alpha anthos config sync repo describeOutputnya mirip dengan:
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" } ]Jika Anda melihat
status: RECONCILING, bukanstatus: SYNCED, tunggu beberapa menit dan jalankangcloud alpha anthos config sync repo describelagi.Untuk hanya melihat informasi satu repositori, Anda dapat menggunakan flag
--sync-namedan--sync-namespace. Untuk melihat resource terkelola secara mendetail, tambahkan tanda--managed-resources. Untuk mengetahui informasi selengkapnya, lihat Melihat status Config Sync di beberapa cluster.Tunggu hingga alamat IP publik gateway ingress disediakan:
until kubectl -n asm-ingress get svc asm-ingressgateway -o jsonpath='{.status.loadBalancer}' | grep "ingress"; do : ; doneDapatkan alamat IP publik gateway ingress:
EXTERNAL_IP=$(kubectl get svc asm-ingressgateway -n asm-ingress -o jsonpath="{.status.loadBalancer.ingress[*].ip}")Kunjungi alamat IP dari browser Anda untuk memverifikasi bahwa aplikasi Online Boutique telah berhasil di-deploy:
echo http://${EXTERNAL_IP}Untuk menerapkan injeksi proxy sidecar, terapkan batasan.
Perintah berikut menggunakan
seduntuk memperbarui manifesacm-config.yamlagar Config Sync men-deploy resource terkait.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.yamlPerintah sebelumnya men-deploy resource berikut:
ConstraintK8sRequiredLabelsyang mengharuskan setiapNamespacedalam mesh berisi label injeksi proxy sidecar Cloud Service Mesh tertentu:AsmSidecarInjectionConstraintyang melarangPodapa pun dalam mesh melewati injeksi sidecar proxy Istio:
Lihat status Config Sync untuk
RootSync:gcloud alpha anthos config sync repo describe \ --sync-name root-sync \ --sync-namespace config-management-systemOutputnya mirip dengan:
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" } ]Jika Anda melihat
status: RECONCILING, bukanstatus: SYNCED, tunggu beberapa menit dan jalankangcloud alpha anthos config sync repo describelagi.Pastikan
Constraintsdibuat:kubectl get constraintsMungkin perlu waktu beberapa menit bagi Policy Controller untuk mengevaluasi batasan ini. Jika Anda tidak melihat nilai di kolom
TOTAL-VIOLATIONS, tunggu dan jalankankubectl get constraintslagi.Outputnya mirip dengan:
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 0Karena kita telah menyiapkan
NamespacesdanPodsdengan benar, ada0TOTAL-VIOLATIONSuntukConstraintsini.Untuk melihat cara kerja
Constraintsini, coba buatNamespacedi cluster Anda tanpalabelmaupunannotation:kubectl create namespace testOutputnya mirip dengan error berikut:
Error from server (Forbidden): admission webhook "validation.gatekeeper.sh" denied the request: [namespace-sidecar-injection-label] you must provide labels: {"istio-injection"}Untuk menerapkan enkripsi traffic, terapkan batasan.
Perintah berikut menggunakan
seduntuk memperbarui manifesacm-config.yamlagar Config Sync men-deploy resource terkait.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.yamlPerintah sebelumnya men-deploy resource berikut:
AsmPeerAuthnMeshStrictMtlsConstraintyang menerapkan mTLS tingkat meshPeerAuthenticationdi namespaceistio-system:Batasan referensial
Configdi namespacegatekeeper-system. Batasan referensial ini memungkinkanAsmPeerAuthnMeshStrictMtlsConstraintmereferensikan objek lain dalam definisinya (misalnya, menelusuriPeerAuthenticationapa pun diistio-systemNamespace):ConstraintDestinationRuleTLSEnabledyang melarang penonaktifan TLS untuk semua host dan subset host di IstioDestinationRules:AsmPeerAuthnStrictMtlsConstraintyang memastikan bahwa semuaPeerAuthenticationstidak dapat menggantikan mTLSSTRICT:
Lihat status Config Sync untuk
RootSync:gcloud alpha anthos config sync repo describe \ --sync-name root-sync \ --sync-namespace config-management-systemOutputnya mirip dengan:
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" } ]Jika Anda melihat
status: RECONCILING, bukanstatus: SYNCED, tunggu beberapa menit dan jalankangcloud alpha anthos config sync repo describelagi.Jalankan perintah berikut untuk mendapatkan informasi selengkapnya tentang pelanggaran
PeerAuthentication:kubectl get asmpeerauthnmeshstrictmtls.constraints.gatekeeper.sh/mesh-level-strict-mtls -ojsonpath='{.status.violations}' | jqOutputnya mirip dengan:
[ { "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" } ]Perbaiki masalah dengan men-deploy
PeerAuthenticationdiistio-system. Untuk mencegah semua layanan Anda di mesh menerima traffic teks biasa, tetapkan kebijakanPeerAuthenticationdi seluruh mesh dengan mode mTLS ditetapkan keSTRICT. Saat Anda men-deploy kebijakan, bidang kontrol akan otomatis menyediakan sertifikat TLS sehingga workload dapat saling mengautentikasi.Perintah berikut menggunakan
seduntuk memperbarui manifesacm-config.yamlagar Config Sync men-deploy resource terkait.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.yamlPerintah sebelumnya men-deploy
STRICTmTLSPeerAuthenticationberikut di namespaceistio-system. Tindakan ini menerapkan mTLSSTRICTke seluruh mesh:Lihat status Config Sync untuk
RootSync:gcloud alpha anthos config sync repo describe \ --sync-name root-sync \ --sync-namespace config-management-systemOutputnya mirip dengan:
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" } ]Jika Anda melihat
status: RECONCILING, bukanstatus: SYNCED, tunggu beberapa menit dan jalankangcloud alpha anthos config sync repo describelagi.Pastikan
Constraintsdibuat:kubectl get constraintsPerhatikan bahwa proses ini dapat memerlukan waktu beberapa menit agar Policy Controller dapat mengevaluasi
Constraintsini. Tunggu dan jalankan kembali perintahkubectl get constraintsini hingga Anda mendapatkan nilai di bawah kolomTOTAL-VIOLATIONSuntuk setiap baris.Outputnya mirip dengan:
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 0Untuk menerapkan kontrol akses terperinci, terapkan batasan.
Perintah berikut menggunakan
seduntuk memperbarui manifesacm-config.yamlagar Config Sync men-deploy resource terkait.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.yamlPerintah sebelumnya men-deploy resource berikut:
ConstraintAsmAuthzPolicyDefaultDenyyang menerapkan penolakan default tingkat meshAuthorizationPolicydi namespaceistio-system:AsmAuthzPolicyEnforceSourcePrincipalsConstraintyang memastikan bahwa setiapAuthorizationPoliciesmenentukan prinsipal sumber terperinci (selain "*"). Hanya gateway masuk di namespaceasm-ingressyang menjadi pengecualian untuk aturan ini agar dapat menerima traffic dari pengguna akhir dan mengalihkan traffic ke aplikasifrontendOnline Boutique.
Lihat status Config Sync untuk
RootSync:gcloud alpha anthos config sync repo describe \ --sync-name root-sync \ --sync-namespace config-management-systemOutputnya mirip dengan:
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" } ]Jika Anda melihat
status: RECONCILING, bukanstatus: SYNCED, tunggu beberapa menit dan jalankangcloud alpha anthos config sync repo describelagi.Jalankan perintah berikut untuk mendapatkan informasi selengkapnya tentang pelanggaran terkait:
kubectl get asmauthzpolicydefaultdeny.constraints.gatekeeper.sh/default-deny-authorization-policies -ojsonpath='{.status.violations}' | jqOutputnya mirip dengan:
[ { "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" } ]Perbaiki masalah dengan men-deploy
AuthorizationPolicydi namespaceistio-system.Perintah berikut menggunakan
seduntuk memperbarui manifesacm-config.yamlagar Config Sync men-deploy resource terkait.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.yamlPerintah sebelumnya men-deploy
AuthorizationPolicytolak semua berikut di namespaceistio-system:Lihat status Config Sync untuk
RootSync:gcloud alpha anthos config sync repo describe \ --sync-name root-sync \ --sync-namespace config-management-systemOutputnya mirip dengan:
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" } ]Jika Anda melihat
status: RECONCILING, bukanstatus: SYNCED, tunggu beberapa menit dan jalankangcloud alpha anthos config sync repo describelagi.Pastikan
Constraintsdibuat:kubectl get constraintsPerhatikan bahwa proses ini dapat memerlukan waktu beberapa menit agar Policy Controller dapat mengevaluasi
Constraintsini. Tunggu dan jalankan kembali perintahkubectl get constraintsini hingga Anda mendapatkan nilai di bawah kolomTOTAL-VIOLATIONSuntuk setiap baris.Outputnya mirip dengan:
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 0Buka aplikasi Butik Online dari browser Anda:
echo http://${EXTERNAL_IP}Anda akan menerima error:
RBAC: access deniedyang mengonfirmasi bahwa penolakan defaultAuthorizationPolicyditerapkan ke seluruh mesh.Perbaiki masalah ini dengan men-deploy
AuthorizationPoliciesyang lebih terperinci di namespaceasm-ingressdanonlineboutique.Perintah berikut menggunakan
seduntuk memperbarui manifesacm-config.yamlagar Config Sync men-deploy resource terkait.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.yamlPerintah sebelumnya men-deploy resource berikut:
AuthorizationPolicydi namespaceasm-ingress:AuthorizationPolicyper aplikasi di namespaceonlineboutique, berikut contoh untuk aplikasicartservice:ServiceAccountper aplikasi di namespaceasm-ingressdanonlineboutiqueagar memiliki identitas unik per aplikasi yang dievaluasi sebagaiprincipaldiAuthorizationPolicies. Berikut adalah contoh untuk aplikasicartservice:
Lihat status Config Sync untuk
RootSyncdan duaRepoSyncs:gcloud alpha anthos config sync repo describeOutputnya mirip dengan:
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" } ]Jika Anda melihat
status: RECONCILING, bukanstatus: SYNCED, tunggu beberapa menit dan jalankangcloud alpha anthos config sync repo describelagi.Untuk hanya melihat informasi satu repositori, Anda dapat menggunakan flag
--sync-namedan--sync-namespace. Untuk melihat resource terkelola secara mendetail, Anda dapat menambahkan tanda--managed-resources. Untuk mengetahui informasi selengkapnya, lihat Melihat status Config Sync di beberapa cluster.Kunjungi aplikasi Butik Online lagi dari browser Anda:
echo http://${EXTERNAL_IP}Jika Anda menunggu beberapa menit, Anda akan melihat situs berfungsi kembali seperti yang diharapkan.
Di konsol Google Cloud , buka halaman GKE Enterprise Security.
Ringkasan Kebijakan menampilkan status keamanan aplikasi, termasuk Kontrol akses layanan (
AuthorizationPolicies) dan mTLS.Klik Audit Kebijakan untuk melihat status kebijakan beban kerja untuk cluster dan kedua namespace (
asm-ingressdanonlineboutique).Kartu Kontrol akses layanan dan Status mTLS memberikan ringkasan tingkat tinggi.

Daftar Workloads menampilkan Kontrol akses layanan dan status mTLS setiap workload.

Menyiapkan cluster GKE
Di bagian ini, Anda akan membuat cluster GKE, lalu mendaftarkannya ke fleet. Fleet adalah Google Cloud konsep untuk mengatur cluster dan resource lainnya secara logis, sehingga memungkinkan Anda menggunakan dan mengelola kemampuan multi-cluster serta menerapkan kebijakan yang konsisten di seluruh sistem Anda.
Cluster yang Anda buat di bagian ini adalah cluster tempat Anda menginstal Cloud Service Mesh, Policy Controller, dan Config Sync. Cluster ini juga merupakan tempat Anda men-deploy aplikasi contoh Butik Online.
Untuk menyiapkan cluster, selesaikan langkah-langkah berikut:
Menjelajahi repositori
Di bagian penginstalan berikut, Anda akan menerapkan file
manifest acm-config.yaml. Manifes ini mengonfigurasi
cluster Anda untuk menyinkronkan dari
folder asm-acm-tutorial
repositori contoh. Folder ini berisi semua
file konfigurasi yang Anda butuhkan untuk menyelesaikan tutorial ini.
Untuk menyederhanakan tutorial ini, Anda menggunakan perintah sed untuk memperbarui
acm-config.yaml. Dengan file acm-config.yaml,
Config Sync men-deploy manifes yang diperlukan untuk setiap langkah tutorial ini.
Memperbarui satu file membantu Anda berfokus pada konsep dan alur pengamanan cluster, mesh, dan aplikasi tanpa berulang kali memanipulasi file dan menjalankan perintah git berulang kali.
Untuk memanfaatkan kemampuan Config Sync dalam menyinkronkan beberapa repositori, Anda menggunakan resource berikut:
Menginstal Policy Controller, Config Sync, dan Cloud Service Mesh terkelola
Setelah membuat dan mendaftarkan cluster, Anda dapat menginstal
Config Sync, Policy Controller, dan Cloud Service Mesh di cluster Anda serta
mengonfigurasi cluster Anda untuk menyinkronkan dari konfigurasi RootSync default:
Men-deploy gateway traffic masuk dan aplikasi contoh
Di bagian ini, Anda akan men-deploy contoh aplikasi Butik Online dan gateway ingress untuk mengelola traffic ingress.
Menerapkan kebijakan untuk mengamankan mesh Anda
Di bagian berikut, Anda akan memanfaatkan Policy Controller untuk menerapkan kebijakan dari paket kebijakan Cloud Service Mesh dengan membuat batasan.
Menerapkan injeksi proxy file bantuan
Di bagian ini, Anda akan menerapkan kebijakan untuk memastikan bahwa semua workload di mesh telah mengaktifkan penyisipan sidecar otomatis.
Menerapkan enkripsi traffic
Di bagian ini, Anda akan menerapkan kebijakan untuk memastikan bahwa semua traffic di mesh dienkripsi.
Menerapkan kontrol akses terperinci
Di bagian ini, Anda akan menerapkan kebijakan untuk memastikan bahwa semua workload di mesh memiliki kontrol akses terperinci.
Melihat status fitur keamanan GKE Enterprise
Anda dapat melihat status fitur keamanan GKE Enterprise, termasuk kebijakan autentikasi dan otorisasi, di konsol Google Cloud .
Anda kini telah mengamankan cluster dan mesh dengan Pengontrol Kebijakan dan Config Sync.