Mengamankan akses ke resource dengan IAM
Pengguna dan akun layanan Kubernetes memerlukan izin untuk mengelola resource Config Connector. Dengan Config Connector, bidang kontrol project Anda dapat dikelola oleh identitas yang menggunakan Role-Based Access Control (RBAC) Kubernetes. Anda juga dapat merujuk ke Kebijakan Identity and Access Management (IAM).
Resource yang dapat mereferensikan IAMPolicy dan IAMPolicyMember tercantum dalam Referensi resource. Resource ini memiliki properti "Dapat Direferensikan oleh IAMPolicy/IAMPolicyMember".
Topik ini menjelaskan cara mengamankan akses ke resource Google Cloud menggunakan Identity and Access Management.
Sebelum memulai
Instal Config Connector di cluster Anda.
Mengamankan akses bidang kontrol dengan RBAC
Dalam contoh ini, Anda akan membuat akun layanan dan memberinya izin untuk mengelola PubSubTopic. Akun layanan ini tidak dapat mengelola jenis resource Config Connector lainnya.
Buat file bernama
pubsub-topic-service-account.yamldengan konten berikut:apiVersion: v1 kind: ServiceAccount metadata: name: pubsub-topic-service-account namespace: defaultTerapkan ini untuk membuat akun layanan
pubsub-topic-service-account:kubectl apply -f pubsub-topic-service-account.yaml --namespace CC_NAMESPACE
Ganti
CC_NAMESPACEdengan namespace tempat Config Connector mengelola resource.Konfirmasi bahwa
pubsub-topic-service-accounttidak dapat membuat resourcePubSubTopicdengan memverifikasi bahwa output perintah berikut berisino:kubectl auth can-i get pubsubtopics --as=system:serviceaccount:default:pubsub-topic-service-account
Selanjutnya, buat
ClusterRoleyang memungkinkan pembuatan topik Pub/Sub.ClusterRole hanya dapat mengelola resource yang memiliki nilai yang ditentukan dalam
rules.apiGroupsdanrules.resources. Untuk menemukan nilaiapiGroupsdanresources, lihat referensi untuk resource Anda.Buat file bernama
pubsub-topic-editor-role.yamldengan konten berikut:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: creationTimestamp: null name: pubsub-topic-editor rules: - apiGroups: - pubsub.cnrm.cloud.google.com resources: - pubsubtopics verbs: - get - list - watch - create - update - patch - deleteTerapkan
pubsub-topic-editor.yamluntuk membuatClusterRole:kubectl apply -f pubsub-topic-editor-role.yaml --namespace CC_NAMESPACE
Ganti
CC_NAMESPACEdengan namespace tempat Config Connector mengelola resource.Selanjutnya, buat RoleBinding antara ClusterRole dan akun layanan Anda. Buat file bernama
pubsub-topic-editor-rolebinding.yamldengan konten berikut:apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: pubsub-topic-editor-rolebinding. subjects: - kind: ServiceAccount name: pubsub-topic-service-account roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: pubsub-topic-editorTerapkan
pubsub-topic-editor-rolebinding.yamlke cluster Anda.kubectl apply -f pubsub-topic-editor-rolebinding.yaml --namespace CC_NAMESPACE
Ganti
CC_NAMESPACEdengan namespace tempat Config Connector mengelola resource.Pastikan
pubsub-topic-service-accountdiizinkan untuk membuat resourcePubSubTopicdengan mengonfirmasi bahwa output perintah berikut adalahyes:kubectl auth can-i get pubsubtopics \ --as=system:serviceaccount:default:pubsub-topic-service-account
Pembersihan
Gunakan kubectl delete untuk menghapus Akun Layanan, Peran IAM, dan Rolebinding.
kubectl delete -f pubsub-topic-editor-rolebinding.yaml --namespace CC_NAMESPACE
kubectl delete -f pubsub-topic-editor-role.yaml --namespace CC_NAMESPACE
kubectl delete -f pubsub-topic-service-account.yaml --namespace CC_NAMESPACE
Ganti CC_NAMESPACE dengan namespace tempat Config Connector mengelola resource.
Mengamankan bidang data dengan Kebijakan IAM
Dalam contoh ini, Anda menggunakan izin yang diberikan sebelumnya untuk membuat
PubSubTopic dan membatasi akses ke resource tersebut dengan resource IAMPolicyMember.
Buat file bernama
pubsub-topic-sample.yamldengan konten berikut:apiVersion: pubsub.cnrm.cloud.google.com/v1beta1 kind: PubSubTopic metadata: name: pubsubtopic-sampleTerapkan
pubsub-topic-sample.yamldengankubectl:kubectl apply -f pubsub-topic-sample.yaml --namespace CC_NAMESPACE
Ganti
CC_NAMESPACEdengan namespace tempat Config Connector mengelola resource.Buat file bernama
iampolicymember.yamldengan konten berikut, gantiEMAIL_ADDRESSdengan alamat email akun Google Cloud Anda:apiVersion: iam.cnrm.cloud.google.com/v1beta1 kind: IAMPolicyMember metadata: name: iampolicymember-sample spec: resourceRef: apiVersion: pubsub.cnrm.cloud.google.com/v1beta1 kind: PubSubTopic name: pubsubtopic-sample role: roles/pubsub.admin member: "user:EMAIL_ADDRESS"Terapkan
iampolicymember.yaml.kubectl apply -f iampolicymember.yaml --namespace CC_NAMESPACE
Ganti
CC_NAMESPACEdengan namespace tempat Config Connector mengelola resource.Konfirmasi bahwa kebijakan telah diterapkan ke Google Cloud dengan menjalankan perintah ini dan mencari alamat email Anda di output, dengan mengganti
PROJECT_IDdengan project ID Anda:gcloud beta pubsub topics get-iam-policy projects/PROJECT_ID/topics/pubsubtopic-sample
Akses ke topik Pub/Sub Anda kini dilindungi dengan IAMPolicyMember.
Pembersihan
Gunakan kubectl delete untuk menghapus topik Pub/Sub dan IAMPolicyMember dari Project Google Cloud Anda.
kubectl delete -f iampolicymember.yaml --namespace CC_NAMESPACE
kubectl delete -f pubsub-topic-sample.yaml --namespace CC_NAMESPACE
Praktik terbaik keamanan untuk isolasi multi-tenant
Untuk membantu mencegah eskalasi akses yang tidak sah dan menerapkan isolasi tenant, ikuti praktik terbaik berikut:
Terapkan mode namespace: hindari mode cluster di lingkungan multi-tenant. Dalam mode cluster, semua namespace menggunakan satu akun layanan IAM yang sama. Setiap pengguna yang dapat membuat resource Config Connector di namespace mana pun dapat bertindak dengan izin IAM penuh dari akun layanan tersebut.
Membatasi RBAC untuk resource IAM: batasi izin pembuatan dan modifikasi untuk resource
IAMPolicy,IAMPartialPolicy, danIAMPolicyMembermenggunakan kontrol akses berbasis peran (RBAC) Kubernetes. Jika developer memiliki akses tulis yang luas ke resource ini, mereka dapat mengubah binding IAM Google Cloud .Cakupan binding IAM untuk Workload Identity Federation for GKE: konfigurasikan binding ini secara ketat untuk ServiceAccount Kubernetes yang ditetapkan di namespace tertentu. Dalam mode dengan namespace, ikat setiap akun layanan IAM hanya ke ServiceAccount Kubernetes Config Connector untuk namespace-nya:
gcloud iam service-accounts add-iam-policy-binding \ GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --member="serviceAccount:PROJECT_ID.svc.id.goog[cnrm-system/cnrm-controller-manager-CC_NAMESPACE]" \ --role="roles/iam.workloadIdentityUser"Ganti kode berikut:
GSA_NAME: nama akun layanan IAM yang digunakan Config Connector untuk namespace.PROJECT_ID: ID project yang berisi cluster Anda dan akun layanan IAM.CC_NAMESPACE: namespace tempat Config Connector mengelola resource.
Jangan memberikan peran
roles/iam.workloadIdentityUserke set akun utama, seperti semua Pod di namespacecnrm-system. Dalam mode namespace, pengontrol Config Connector untuk semua namespace berjalan dicnrm-system, sehingga jenis binding ini memungkinkan pengontrol setiap namespace meniru identitas akun layanan IAM.
Langkah berikutnya
Gunakan Secret untuk meneruskan informasi dengan aman ke resource Google Cloud .