Dalam tutorial ini, Anda akan mempelajari apa yang dimaksud dengan otorisasi, dan cara mengaktifkannya dengan Cloud Service Mesh pada aplikasi contoh untuk mempelajari cara mengaktifkan kebijakan otorisasi ke microservice Anda.
Anda akan membuat akses AuthorizationPolicy
ke DENY
ke microservice, lalu membuat akses khusus AuthorizationPolicy
ke ALLOW
ke microservice.
Apa yang dimaksud dengan otorisasi?
Autentikasi memverifikasi identitas -- apakah layanan ini memang benar? Otorisasi memverifikasi izin - apakah layanan ini diizinkan untuk melakukan itu?
Identitas adalah hal mendasar bagi ide ini. Dengan Cloud Service Mesh, AuthorizationPolicies
memungkinkan komunikasi workload ke workload di mesh Anda untuk dikontrol untuk meningkatkan keamanan dan akses.
Dalam arsitektur microservice, dengan panggilan dilakukan melalui batas jaringan, aturan firewall berbasis IP tradisional sering kali tidak memadai untuk mengamankan akses antar-workload. Dengan Cloud Service Mesh, Anda dapat menetapkan aturan otorisasi ke:
- Kontrol akses ke workload dalam mesh Anda, baik workload-ke-workload atau akhir-pengguna-ke-beban kerja
- Tentukan kebijakan secara luas atau terperinci sesuai kebutuhan Anda. Untuk melihat penjelasan mendalam tentang mengonfigurasi kebijakan dan praktik terbaik, lihat Otorisasi dengan Cloud Service Mesh.
Biaya
Tutorial ini menggunakan komponen Google Cloud yang dapat ditagih berikut:
Setelah menyelesaikan tutorial ini, Anda dapat menghindari biaya berkelanjutan dengan menghapus resource yang dibuat. Untuk informasi selengkapnya, lihat Pembersihan.
Sebelum memulai
Pastikan penagihan diaktifkan untuk project Anda.
Menyediakan Cloud Service Mesh terkelola pada cluster GKE. Ada berbagai metode penyiapan yang didukung:
Meng-clone repo:
git clone https://github.com/GoogleCloudPlatform/anthos-service-mesh-samples cd anthos-service-mesh-samples
Men-deploy gateway masuk
Tetapkan konteks saat ini untuk
kubectl
ke cluster:gcloud container clusters get-credentials CLUSTER_NAME \ --project=PROJECT_ID \ --zone=CLUSTER_LOCATION
Buat namespace untuk gateway masuk Anda:
kubectl create namespace asm-ingress
Mengaktifkan namespace untuk injeksi. Langkah-langkahnya bergantung pada jenis Cloud Service Mesh Anda (baik yang terkelola maupun dalam cluster):
Terkelola
Terapkan label revisi
asm-managed
ke namespace:kubectl label namespace asm-ingress \ istio-injection- istio.io/rev=asm-managed --overwrite
Label ini sesuai dengan saluran rilis Cloud Service Mesh yang dikelola saat ini untuk versi Cloud Service Mesh.
Dalam cluster
Gunakan perintah berikut untuk menemukan label revisi di
istiod
:kubectl get deploy -n istio-system -l app=istiod -o \ jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'
Terapkan label revisi ke namespace. Dalam perintah berikut,
REVISION
adalah nilai label revisiistiod
yang Anda catat di langkah sebelumnya.kubectl label namespace asm-ingress \ istio-injection- istio.io/rev=REVISION --overwrite
Deploy gateway contoh di repositori
anthos-service-mesh-samples
:kubectl apply -n asm-ingress \ -f docs/shared/asm-ingress-gateway
Output yang diharapkan:
serviceaccount/asm-ingressgateway configured service/asm-ingressgateway configured deployment.apps/asm-ingressgateway configured gateway.networking.istio.io/asm-ingressgateway configured
Men-deploy aplikasi contoh Online Boutique
Jika belum, tetapkan konteks saat ini untuk
kubectl
ke cluster:gcloud container clusters get-credentials CLUSTER_NAME \ --project=PROJECT_ID \ --zone=CLUSTER_LOCATION
Buat namespace untuk aplikasi contoh:
kubectl create namespace onlineboutique
Beri label namespace
onlineboutique
untuk memasukkan proxy Envoy secara otomatis. Ikuti langkah-langkah untuk mengaktifkan injeksi file bantuan otomatis.Deploy aplikasi contoh,
VirtualService
untuk frontend, dan akun layanan untuk workload. Untuk tutorial ini, Anda akan men-deploy Online Boutique, sebuah aplikasi demo microservice.kubectl apply \ -n onlineboutique \ -f docs/shared/online-boutique/virtual-service.yaml kubectl apply \ -n onlineboutique \ -f docs/shared/online-boutique/service-accounts
Lihat layanan Anda
Lihat pod di namespace
onlineboutique
:kubectl get pods -n onlineboutique
Output yang diharapkan:
NAME READY STATUS RESTARTS AGE adservice-85598d856b-m84m6 2/2 Running 0 2m7s cartservice-c77f6b866-m67vd 2/2 Running 0 2m8s checkoutservice-654c47f4b6-hqtqr 2/2 Running 0 2m10s currencyservice-59bc889674-jhk8z 2/2 Running 0 2m8s emailservice-5b9fff7cb8-8nqwz 2/2 Running 0 2m10s frontend-77b88cc7cb-mr4rp 2/2 Running 0 2m9s loadgenerator-6958f5bc8b-55q7w 2/2 Running 0 2m8s paymentservice-68dd9755bb-2jmb7 2/2 Running 0 2m9s productcatalogservice-84f95c95ff-c5kl6 2/2 Running 0 114s recommendationservice-64dc9dfbc8-xfs2t 2/2 Running 0 2m9s redis-cart-5b569cd47-cc2qd 2/2 Running 0 2m7s shippingservice-5488d5b6cb-lfhtt 2/2 Running 0 2m7s
Semua pod untuk aplikasi Anda harus aktif dan berjalan, dengan
2/2
dalam kolomREADY
. Hal ini menunjukkan bahwa pod memiliki proxy file bantuan Envoy yang berhasil dimasukkan. Jika2/2
tidak muncul setelah beberapa menit, kunjungi Panduan pemecahan masalah.Dapatkan IP eksternal, lalu tetapkan ke variabel:
kubectl get services -n asm-ingress export FRONTEND_IP=$(kubectl --namespace asm-ingress \ get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}' \ )
Anda akan melihat output yang mirip dengan berikut ini:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE asm-ingressgateway LoadBalancer 10.19.247.233 35.239.7.64 80:31380/TCP,443:31390/TCP,31400:31400/TCP 27m
Buka alamat
EXTERNAL-IP
di browser web Anda. Anda akan melihat toko Online Boutique di browser Anda.
MenolakSemua Otorisasi untuk beban kerja
Bagian ini menambahkan AuthorizationPolicy
untuk menolak semua traffic masuk ke layanan mata uang.
AuthorizationPolicies
bekerja dengan mengubah AuthorizationPolicies
menjadi konfigurasi yang dapat dibaca Envoy, dan menerapkan konfigurasi ke proxy file bantuan Anda. Hal ini memungkinkan proxy Envoy untuk mengizinkan atau menolak permintaan masuk ke layanan.
Terapkan
AuthorizationPolicy
kecurrencyservice
. Perhatikan kecocokan pada labelcurrencyservice
dalam file YAML.kubectl apply -f docs/authorization/currency-deny-all.yaml -n onlineboutique
Coba akses
EXTERNAL-IP
gateway Anda untuk melihat Online Boutique di browser web. Anda akan melihat error otorisasi (500 Internal Service Error) daricurrency service
.
Mengamati log proxy file bantuan
Untuk melihat apa yang terjadi di proxy file bantuan, Anda dapat meninjau log di pod.
Dapatkan nama pod
currencyservice
Anda:CURRENCY_POD=$(kubectl get pod -n onlineboutique |grep currency|awk '{print $1}')
Menyetel proxy Envoy agar mengizinkan log tingkat rekaman aktivitas. Secara default, panggilan otorisasi yang diblokir tidak dicatat:
kubectl exec -it $CURRENCY_POD -n onlineboutique -c istio-proxy -- curl -X POST "http://localhost:15000/logging?level=trace"
Output yang diharapkan:
active loggers: admin: trace alternate_protocols_cache: trace ... tracing: trace upstream: trace udp: trace wasm: trace
Gunakan
curl
untuk mengirim traffic keEXTERNAL_IP
Anda untuk membuat log:for i in {0..10}; do curl -s -I $FRONTEND_IP ; done
Lihat log terkait role-based access control (RBAC) di istio-proxy Anda:
kubectl logs -n onlineboutique $CURRENCY_POD -c istio-proxy | grep -m5 rbac
Output yang diharapkan:
2022-07-08T14:19:20.442920Z debug envoy rbac checking request: requestedServerName: outbound_.7000_._.currencyservice.onlineboutique.svc.cluster.local, sourceIP: 10.8.8.5:34080, directRemoteIP: 10.8.8.5:34080, remoteIP: 10.8.8.5:34080,localAddress: 10.8.0.6:7000, ssl: uriSanPeerCertificate: spiffe://christineskim-tf-asm.svc.id.goog/ns/onlineboutique/sa/default, dnsSanPeerCertificate: , subjectPeerCertificate: OU=istio_v1_cloud_workload,O=Google LLC,L=Mountain View,ST=California,C=US, headers: ':method', 'POST' 2022-07-08T14:19:20.442944Z debug envoy rbac enforced denied, matched policy none 2022-07-08T14:19:20.442965Z debug envoy http [C73987][S13078781800499437460] Sending local reply with details rbac_access_denied_matched_policy[none] ```
Anda akan melihat pesan enforced denied
di log, yang menunjukkan bahwa currencyservice
ditetapkan untuk memblokir permintaan masuk.
Izinkan Akses Terbatas
Sebagai ganti kebijakan DENYALL
, Anda dapat menetapkan akses ke izin yang diizinkan untuk workload tertentu. Hal ini akan relevan dalam arsitektur microservice tempat Anda ingin memastikan bahwa hanya layanan yang diotorisasi yang dapat berkomunikasi satu sama lain.
Di bagian ini, Anda akan mengaktifkan layanan frontend
dan checkout
kemampuan untuk berkomunikasi dengan layanan currency
.
- Dalam file di bawah, pastikan
source.principal
(klien) tertentu diizinkan untuk mengaksescurrencyservice
:
Terapkan kebijakan:
kubectl apply -f docs/authorization/currency-allow-frontend-checkout.yaml -n onlineboutique
- Kunjungi
EXTERNAL-IP
di browser web Anda, kini Anda dapat mengakses Butik Online.
Pembersihan
Agar tidak dikenakan 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-nya.
Agar tidak menimbulkan biaya berkelanjutan pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, Anda dapat menghapus project atau menghapus masing-masing resource.
Menghapus project
Di Cloud Shell, hapus project:
gcloud projects delete PROJECT_ID
Menghapus resource
Jika Anda ingin mempertahankan cluster dan menghapus contoh Online Boutique:
Hapus namespace aplikasi:
kubectl delete namespace onlineboutique
Output yang diharapkan:
namespace "onlineboutique" deleted
Hapus namespace Gateway Ingress:
kubectl delete namespace asm-ingress
Output yang diharapkan:
amespace "asm-ingress" deleted
Jika tidak ingin dikenai biaya tambahan, hapus cluster:
gcloud container clusters delete CLUSTER_NAME \ --project=PROJECT_ID \ --zone=CLUSTER_LOCATION
Langkah selanjutnya
- Untuk panduan umum tentang cara mengonfigurasi kebijakan
PeerAuthentication
, lihat Mengonfigurasi keamanan transport. - Tingkatkan kualitas postur keamanan aplikasi dan cluster Anda dengan tutorial tentang cara Memperkuat keamanan aplikasi dengan Cloud Service Mesh, Config Sync, dan Pengontrol Kebijakan.
- Pelajari dasbor keamanan mesh Anda dengan Memantau keamanan mesh.
- Pelajari kebijakan otorisasi secara mendalam dengan Mengonfigurasi fitur lanjutan kebijakan otorisasi.
- Pelajari praktik terbaik keamanan Cloud Service Mesh.