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 Anthos 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 secara otomatis memvalidasi kebijakan Anthos Service Mesh menggunakan Pengontrol Kebijakan dan Config Sync. Pengontrol Kebijakan memungkinkan penerapan kebijakan yang dapat diprogram sepenuhnya untuk cluster Anda. Pengontrol Kebijakan juga dilengkapi dengan library default template batasan yang dapat Anda gunakan dengan paket keamanan Anthos Service Mesh untuk mengaudit kepatuhan kerentanan dan praktik terbaik keamanan mesh Anda. Config Sync terus-menerus merekonsiliasi status cluster dengan satu set pusat file konfigurasi deklaratif Kubernetes. Menggunakan Pengontrol Kebijakan dan Config Sync secara bersamaan memungkinkan Anda untuk terus menerapkan batasan pada konfigurasi kebijakan Anthos Service Mesh.
Diagram berikut menunjukkan ringkasan cara Anthos Service Mesh, Pengontrol Kebijakan, dan Config Sync bekerja sama dalam tutorial ini untuk mengelola dan melindungi gateway masuk dan aplikasi contoh Online Boutique yang Anda gunakan dalam tutorial ini:
Tujuan
- Buat cluster Google Kubernetes Engine (GKE) dan daftarkan cluster tersebut ke fleet.
- Instal Pengontrol Kebijakan, Config Sync, dan Anthos Service Mesh di cluster.
- Mengonfigurasi Config Sync untuk menyinkronkan beberapa repositori
- Terapkan praktik terbaik untuk men-deploy konfigurasi, aplikasi, dan resource Istio dengan Config Sync.
- Men-deploy konfigurasi cluster, aplikasi contoh Butik Online, dan gateway masuk dengan Config Sync.
- Manfaatkan
paket kebijakan Anthos Service Mesh
dari Pengontrol Kebijakan untuk menerapkan praktik terbaik keamanan berikut:
- Pastikan semua workload di mesh memiliki injeksi file bantuan otomatis.
- Mengenkripsi semua traffic di mesh.
- Menjamin bahwa semua beban kerja di mesh memiliki kontrol akses terperinci.
Biaya
Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:
- GKE.
- GKE Enterprise. Penagihan untuk GKE Enterprise mencakup penagihan untuk Anthos Service Mesh, Config Sync, dan Pengontrol Kebijakan.
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.
Sebelum memulai
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
Menyiapkan lingkungan Anda
Di bagian ini, Anda akan menyiapkan lingkungan agar dapat menginstal Anthos Service Mesh, Pengontrol Kebijakan, dan Config Sync:
-
Di konsol Google Cloud, aktifkan Cloud Shell.
Upgrade Google Cloud CLI ke versi terbaru:
gcloud components update
Untuk menyimpan file yang Anda buat dalam tutorial ini, buat direktori:
mkdir ~/asm-acm-tutorial-dir
Untuk menyederhanakan sisa tutorial, 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_ID
dengan project ID yang ingin Anda gunakan untuk tutorial ini.Jika Anda diminta untuk mengizinkan Cloud Shell, klik Authorize untuk menyelesaikan operasi.
Aktifkan API yang Anda perlukan untuk tutorial ini:
gcloud
gcloud services enable \ mesh.googleapis.com \ anthos.googleapis.com
Config Connector
Tutorial ini mencakup resource Config Connector. Anda dapat menggunakan resource ini untuk menyelesaikan tugas yang sama dengan yang diselesaikan di tab
gcloud
. Untuk memanfaatkan resource ini, instal Config Connector dan terapkan resource dengan cara yang paling sesuai untuk lingkungan Anda.Gunakan manifes
Services
berikut: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
Operasi ini bisa butuh waktu lebih dari satu menit hingga selesai.
Menyiapkan cluster GKE
Di bagian ini, Anda akan membuat cluster GKE lalu mendaftarkannya ke fleet. Fleet adalah konsep Google Cloud untuk mengatur cluster dan resource lainnya secara logis, sehingga Anda dapat 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 Anthos Service Mesh, Pengontrol Kebijakan, dan Config Sync. Selain itu, Cloud Bigtable juga merupakan cluster tempat Anda men-deploy aplikasi contoh Online Boutique.
Untuk menyiapkan cluster, selesaikan langkah-langkah berikut:
Membuat 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
Gunakan manifes
ContainerCluster
danContainerNodePool
berikut: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
Ganti
PROJECT_NUMBER
dengan nilai variabel lingkunganPROJECT_NUMBER
yang diambil sebelumnya.Operasi ini bisa butuh waktu lebih dari lima menit sampai selesai.
Untuk memastikan keberhasilan pembuatan cluster GKE, jelaskan 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 RUNNING
Hubungkan 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-identity
Outputnya 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
GKEHubMembership
berikut: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
Untuk memastikan keberhasilan pendaftaran cluster GKE, jelaskan statusnya:
gcloud container fleet memberships list
Outputnya mirip dengan hal berikut ini:
NAME EXTERNAL_ID LOCATION asm-acm-tutorial 0e12258c-8831-4d81-b5c0-5e7099a468cc global
Pelajari repositori
Di bagian penginstalan berikut, Anda akan menerapkan
file acm-config.yaml
manifes. Manifes ini mengonfigurasi
cluster Anda untuk disinkronkan dari
folder asm-acm-tutorial
repositori contoh. Folder ini berisi semua
file konfigurasi yang Anda perlukan untuk menyelesaikan sisa tutorial.
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 dalam 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 untuk menyinkronkan beberapa repositori, Anda menggunakan resource berikut:
root-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
, sebagaiRepoSync
pertama, berisi semua resource yang diperlukan untuk men-deploy gateway masuk dan mengamankannya secara bertahap selama tutorial ini.online-boutique
, sebagaiRepoSync
kedua, berisi semua resource yang diperlukan untuk men-deploy aplikasi Butik Online dan mengamankannya secara bertahap melalui tutorial ini.
Menginstal Pengontrol Kebijakan, Config Sync, dan Anthos Service Mesh terkelola
Setelah membuat dan mendaftarkan cluster, Anda dapat menginstal Config Sync, Pengontrol Kebijakan, dan Anthos Service Mesh di cluster, serta mengonfigurasi cluster agar disinkronkan dari konfigurasi RootSync
default:
Aktifkan operator
ConfigManagement
, yang mengelola Config Sync dan Pengontrol Kebijakan:gcloud
gcloud beta container fleet config-management enable
Config Connector
Gunakan manifes
GKEHubFeature
berikut:apiVersion: gkehub.cnrm.cloud.google.com/v1beta1 kind: GKEHubFeature metadata: name: configmanagement spec: projectRef: external: PROJECT_ID location: global resourceID: configmanagement
Aktifkan Anthos Service Mesh di fleet Anda.
gcloud
gcloud container fleet mesh enable
Config Connector
Gunakan manifes
GKEHubFeature
berikut:apiVersion: gkehub.cnrm.cloud.google.com/v1beta1 kind: GKEHubFeature metadata: name: servicemesh spec: projectRef: external: PROJECT_ID location: global resourceID: servicemesh
Aktifkan pengelolaan otomatis Anthos Service Mesh untuk mengizinkan Google menerapkan konfigurasi Anthos Service Mesh terkelola yang direkomendasikan:
gcloud
gcloud container fleet mesh update \ --management automatic \ --memberships ${MEMBERSHIP}
Config Connector
Gunakan manifes
GKEHubFeatureMembership
berikut: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
Aktifkan Sinkronisasi Konfigurasi dan Pengontrol Kebijakan:
gcloud
Simpan manifes berikut sebagai
acm-config.yaml
di 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: true
Untuk mempelajari kolom konfigurasi Google Cloud CLI lebih lanjut, baca artikel gcloud apply spec fields.
Terapkan file tersebut:
gcloud beta container fleet config-management apply \ --membership ${MEMBERSHIP} \ --config ~/asm-acm-tutorial-dir/acm-config.yaml
Config Connector
Gunakan manifes
GKEHubFeatureMembership
berikut: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
Pengontrol Kebijakan dan Config Sync diinstal di cluster Anda. Selanjutnya, Sinkronisasi Konfigurasi akan mulai menyinkronkan semua konfigurasi
RootSync
default ke cluster Anda. Konfigurasi ini menginstal dan mengonfigurasi komponen utama berikut:Objek
RepoSync
yang mengonfigurasi aplikasi Butik Online dan gateway masuk akan disinkronkan:Karena rekonsiler
RepoSync
memerlukan izin tambahan untuk membuat resource Istio,ClusterRole
dan dua objekRoleBinding
untuk memberikan izin ini juga diterapkan ke cluster Anda:
Untuk memastikan penginstalan Pengontrol Kebijakan dan Sinkronisasi Konfigurasi berhasil, periksa status:
gcloud beta container fleet config-management status
Outputnya 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: INSTALLED Hierarchy_Controller: PENDING
Jika Anda melihat
PENDING
atauNOT_INSTALLED
dalam barisStatus
atauPolicy_Controller
, tunggu beberapa menit dan jalankangcloud beta container fleet config-management status
lagi.Untuk memastikan keberhasilan penginstalan Anthos Service Mesh, jelaskan statusnya:
gcloud container fleet mesh describe
Outputnya 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 describe
lagi. Sebelum melanjutkan tutorial, Anda harus memastikan bahwa kolomservicemesh.controlPlaneManagement.details.code
memiliki nilaiREVISION_READY
.
Men-deploy gateway masuk dan aplikasi contoh
Di bagian ini, Anda akan men-deploy aplikasi contoh Online Boutique dan gateway masuk untuk mengelola traffic masuk.
Deploy aplikasi contoh Online Boutique dan gateway ingress.
Perintah berikut menggunakan
sed
untuk memperbarui manifesacm-config.yaml
agar Config Sync men-deploy resource yang Anda perlukan untuk men-deploy gateway masuk 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.yaml
Perhatikan bahwa langkah ini dapat memakan waktu beberapa menit.
Lihat status Config Sync untuk
RootSync
dan keduaRepoSyncs
:gcloud alpha anthos config sync repo describe
Outputnya 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 describe
lagi.Untuk melihat informasi satu repositori saja, Anda dapat menggunakan flag
--sync-name
dan--sync-namespace
. Untuk melihat resource terkelola secara mendetail, tambahkan flag--managed-resources
. Untuk mengetahui informasi lebih lanjut, baca Melihat status Config Sync di beberapa cluster.Tunggu hingga alamat IP publik gateway masuk tersedia:
until kubectl -n asm-ingress get svc asm-ingressgateway -o jsonpath='{.status.loadBalancer}' | grep "ingress"; do : ; done
Dapatkan alamat IP publik gateway masuk:
EXTERNAL_IP=$(kubectl get svc asm-ingressgateway -n asm-ingress -o jsonpath="{.status.loadBalancer.ingress[*].ip}")
Buka alamat IP dari browser Anda untuk memverifikasi bahwa aplikasi Online Boutique telah berhasil di-deploy:
echo http://${EXTERNAL_IP}
Terapkan kebijakan untuk mengamankan mesh Anda
Di bagian berikut, Anda memanfaatkan Pengontrol Kebijakan untuk menerapkan kebijakan dari paket kebijakan Anthos Service Mesh dengan membuat batasan.
Terapkan injeksi proxy file bantuan
Di bagian ini, Anda akan menerapkan kebijakan untuk memastikan bahwa semua workload dalam mesh telah mengaktifkan injeksi file bantuan otomatis.
Untuk menerapkan injeksi proxy file bantuan, terapkan batasan.
Perintah berikut menggunakan
sed
untuk memperbarui manifesacm-config.yaml
agar mendapatkan Config Sync yang 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.yaml
Perintah sebelumnya men-deploy resource berikut:
K8sRequiredLabels
Constraint
yang memerlukanNamespace
dalam mesh berisi label injeksi proxy file bantuan Anthos Service Mesh tertentu:AsmSidecarInjection
Constraint
yang melarangPod
apa pun di mesh mengabaikan injeksi file bantuan proxy Istio:
Lihat status Config Sync untuk
RootSync
:gcloud alpha anthos config sync repo describe \ --sync-name root-sync \ --sync-namespace config-management-system
Outputnya 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 describe
lagi.Pastikan
Constraints
dibuat:kubectl get constraints
Perlu waktu beberapa menit bagi Pengontrol Kebijakan untuk mengevaluasi batasan ini. Jika Anda tidak melihat nilai di kolom
TOTAL-VIOLATIONS
, tunggu dan jalankankubectl get constraints
lagi.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 0
Karena kita menyiapkan
Namespaces
danPods
dengan benar, maka ada0
TOTAL-VIOLATIONS
untukConstraints
ini.Untuk melihat
Constraints
ini berfungsi, coba buatNamespace
di cluster Anda tanpalabel
atauannotation
:kubectl create namespace test
Outputnya serupa 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"}
Terapkan enkripsi traffic
Di bagian ini, Anda akan menerapkan kebijakan untuk memastikan bahwa semua traffic dalam mesh dienkripsi.
Untuk menerapkan enkripsi traffic, terapkan batasan.
Perintah berikut menggunakan
sed
untuk memperbarui manifesacm-config.yaml
agar mendapatkan Config Sync yang 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.yaml
Perintah sebelumnya men-deploy resource berikut:
AsmPeerAuthnMeshStrictMtls
Constraint
yang menerapkanPeerAuthentication
mTLS tingkat mesh dalam namespaceistio-system
:Batasan referensi
Config
dalam namespacegatekeeper-system
. Batasan referensial ini memungkinkanAsmPeerAuthnMeshStrictMtls
Constraint
mereferensikan objek lain dalam definisinya (misalnya, menelusuriPeerAuthentication
apa pun diistio-system
Namespace
):DestinationRuleTLSEnabled
Constraint
yang melarang penonaktifan TLS untuk semua host dan subset host di IstioDestinationRules
:AsmPeerAuthnStrictMtls
Constraint
yang menerapkan bahwa semuaPeerAuthentications
tidak dapat menimpaSTRICT
mTLS:
Lihat status Config Sync untuk
RootSync
:gcloud alpha anthos config sync repo describe \ --sync-name root-sync \ --sync-namespace config-management-system
Outputnya 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 describe
lagi.Jalankan perintah berikut untuk mendapatkan informasi selengkapnya tentang pelanggaran
PeerAuthentication
:kubectl get asmpeerauthnmeshstrictmtls.constraints.gatekeeper.sh/mesh-level-strict-mtls -ojsonpath='{.status.violations}' | jq
Outputnya 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
PeerAuthentication
diistio-system
. Agar semua layanan Anda di mesh tidak menerima traffic teks biasa, tetapkan kebijakanPeerAuthentication
seluruh mesh dengan mode mTLS ditetapkan keSTRICT
. Saat Anda men-deploy kebijakan, bidang kontrol akan otomatis menyediakan sertifikat TLS sehingga beban kerja dapat saling melakukan autentikasi.Perintah berikut menggunakan
sed
untuk memperbarui manifesacm-config.yaml
agar mendapatkan Config Sync yang 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.yaml
Perintah sebelumnya men-deploy
PeerAuthentication
mTLSSTRICT
berikut di namespaceistio-system
. Cara ini akan menerapkanSTRICT
mTLS ke seluruh mesh:Lihat status Config Sync untuk
RootSync
:gcloud alpha anthos config sync repo describe \ --sync-name root-sync \ --sync-namespace config-management-system
Outputnya 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 describe
lagi.Pastikan
Constraints
dibuat:kubectl get constraints
Perhatikan bahwa perlu waktu beberapa menit agar Pengontrol Kebijakan mengevaluasi
Constraints
ini. Tunggu dan jalankan lagi perintahkubectl get constraints
ini hingga Anda mendapatkan nilai di bawah kolomTOTAL-VIOLATIONS
untuk 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 0
Menerapkan kontrol akses terperinci
Di bagian ini, Anda akan menerapkan kebijakan untuk memastikan bahwa semua beban kerja di mesh memiliki kontrol akses terperinci.
Untuk menerapkan kontrol akses terperinci, terapkan batasan.
Perintah berikut menggunakan
sed
untuk memperbarui manifesacm-config.yaml
agar mendapatkan Config Sync yang 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.yaml
Perintah sebelumnya men-deploy resource berikut:
AsmAuthzPolicyDefaultDeny
Constraint
yang menerapkan penolakan default tingkat meshAuthorizationPolicy
dalam namespaceistio-system
:AsmAuthzPolicyEnforceSourcePrincipals
Constraint
yang memberlakukan bahwa setiapAuthorizationPolicies
menentukan akun utama sumber yang terperinci (selain "*"). Hanya gateway masuk dalam namespaceasm-ingress
yang merupakan pengecualian terhadap aturan ini agar dapat menerima traffic dari pengguna akhir dan mengalihkan traffic ke aplikasifrontend
Butik Online.
Lihat status Config Sync untuk
RootSync
:gcloud alpha anthos config sync repo describe \ --sync-name root-sync \ --sync-namespace config-management-system
Outputnya 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 describe
lagi.Jalankan perintah berikut untuk mendapatkan informasi selengkapnya tentang pelanggaran terkait:
kubectl get asmauthzpolicydefaultdeny.constraints.gatekeeper.sh/default-deny-authorization-policies -ojsonpath='{.status.violations}' | jq
Outputnya 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
AuthorizationPolicy
di namespaceistio-system
.Perintah berikut menggunakan
sed
untuk memperbarui manifesacm-config.yaml
agar mendapatkan Config Sync yang 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.yaml
Perintah sebelumnya men-deploy
AuthorizationPolicy
tolak 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-system
Outputnya 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 describe
lagi.Pastikan
Constraints
dibuat:kubectl get constraints
Perhatikan bahwa perlu waktu beberapa menit agar Pengontrol Kebijakan mengevaluasi
Constraints
ini. Tunggu dan jalankan lagi perintahkubectl get constraints
ini hingga Anda mendapatkan nilai di bawah kolomTOTAL-VIOLATIONS
untuk 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 0
Kunjungi aplikasi Butik Online dari browser Anda:
echo http://${EXTERNAL_IP}
Anda akan menerima error:
RBAC: access denied
yang mengonfirmasi bahwaAuthorizationPolicy
tolak default diterapkan ke seluruh mesh.Perbaiki masalah ini dengan men-deploy
AuthorizationPolicies
yang lebih terperinci di namespaceasm-ingress
danonlineboutique
.Perintah berikut menggunakan
sed
untuk memperbarui manifesacm-config.yaml
agar mendapatkan Config Sync yang 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.yaml
Perintah sebelumnya men-deploy resource berikut:
AuthorizationPolicy
di namespaceasm-ingress
:AuthorizationPolicy
per aplikasi di namespaceonlineboutique
, berikut adalah contoh untuk aplikasicartservice
:ServiceAccount
per aplikasi di namespaceasm-ingress
danonlineboutique
agar memiliki identitas unik per aplikasi yang dievaluasi sebagaiprincipal
diAuthorizationPolicies
. Berikut adalah contoh untuk aplikasicartservice
:
Lihat status Config Sync untuk
RootSync
dan keduaRepoSyncs
:gcloud alpha anthos config sync repo describe
Outputnya 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 describe
lagi.Untuk melihat informasi satu repositori saja, Anda dapat menggunakan flag
--sync-name
dan--sync-namespace
. Dan untuk melihat resource terkelola secara mendetail, Anda dapat menambahkan flag--managed-resources
. Untuk mengetahui informasi lebih lanjut, baca Melihat status Config Sync di beberapa cluster.Kunjungi kembali aplikasi Butik Online dari browser Anda:
echo http://${EXTERNAL_IP}
Jika Anda menunggu beberapa menit, sekarang Anda akan melihat situs berfungsi lagi seperti yang diharapkan.
Lihat status fitur keamanan GKE Enterprise
Anda dapat melihat status fitur keamanan GKE Enterprise, termasuk kebijakan autentikasi dan otorisasi di Konsol Google Cloud.
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-ingress
danonlineboutique
).Kartu Kontrol akses layanan dan status mTLS memberikan ringkasan umum.
Daftar Workload menampilkan Kontrol akses layanan dan status mTLS untuk setiap beban kerja.
Sekarang Anda telah mengamankan cluster dan mesh Anda dengan Pengontrol Kebijakan dan Config Sync.
Pembersihan
Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.
Menghapus project
Menghapus project Google Cloud:
gcloud projects delete PROJECT_ID
Menghapus resource satu per satu
Untuk menghapus resource satu per satu:
Batalkan pendaftaran cluster Anda dari fleet:
gcloud
gcloud container fleet memberships unregister ${CLUSTER} \ --project=${PROJECT_ID} \ --gke-cluster=${CLUSTER_ZONE}/${CLUSTER}
Outputnya mirip dengan hal berikut ini:
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
Hapus cluster Anda:
gcloud
gcloud container clusters delete ${CLUSTER} \ --zone ${CLUSTER_ZONE}
Tekan
y
saat diminta. Waktu penyelesaian perintah ini bisa lebih dari lima menit.Outputnya mirip dengan hal berikut ini:
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
Hapus file yang Anda buat:
rm -r ~/asm-acm-tutorial-dir
Langkah selanjutnya
- Temukan praktik terbaik keamanan Anthos Service Mesh.
- Pelajari paket kebijakan Anthos Service Mesh lebih lanjut.
- Pelajari library template batasan Pengontrol Kebijakan.
- Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.