The ABC of Security in Kubernetes: Authentication, Authorization, Auditing
Na ho ela na ho haingana, amin'ny fampandehanana ny rafitra rehetra dia mipoitra ny olana momba ny fiarovana: fiantohana ny fanamarinana, fanasarahana ny zo, fanaraha-maso ary asa hafa. Efa noforonina ho an'ny Kubernetes vahaolana maro, izay ahafahanao manatratra ny fanarahan-dalΓ na na dia ao anatin'ny tontolo sarotra aza... Ny fitaovana mitovy amin'izany dia natokana ho an'ny lafiny fototra amin'ny fiarovana izay ampiharina ao anatin'ny rafitra naorina ao amin'ny K8. Voalohany indrindra, ilaina ho an'ireo izay manomboka mifankazatra amin'ny Kubernetes - ho fanombohana amin'ny fandalinana ireo olana mifandraika amin'ny fiarovana.
fanamarinana
Misy karazany roa ny mpampiasa ao amin'ny Kubernetes:
Ny fahasamihafana lehibe eo amin'ireo karazana ireo dia ny hoe ho an'ny kaonty serivisy misy zavatra manokana ao amin'ny Kubernetes API (antsoina hoe - ServiceAccounts), izay mifamatotra amin'ny toeran'ny anarana sy ny angon-drakitra fanomezan-dΓ lana voatahiry ao amin'ny cluster amin'ny zavatra amin'ny karazana Secrets. Ireo mpampiasa (Kaonty Serivisy) ireo dia natao indrindra hitantana ny zo fidirana amin'ny Kubernetes API amin'ireo dingana mandeha ao amin'ny cluster Kubernetes.
Ny mpampiasa tsotra dia tsy manana fidirana ao amin'ny Kubernetes API: tsy maintsy tantanan'ny rafitra ivelany izy ireo. Izy ireo dia natao ho an'ny olona na dingana miaina ivelan'ny cluster.
Ny fangatahana API tsirairay dia mifandray amin'ny kaonty serivisy, mpampiasa, na heverina ho tsy fantatra anarana.
Ny angon-drakitra fanamarinana mpampiasa dia misy:
Username - solon'anarana (zava-dehibe!);
UID - tady famantarana ny mpampiasa azo vakin'ny milina izay βmirindra kokoa sy miavaka kokoa noho ny solonanaranaβ;
Ny Kubernetes dia afaka mampiasa mekanika fanamarinana marobe: mari-pankasitrahana X509, token'ny mpitondra, proxy manamarina, Fanamarinana fototra HTTP. Amin'ny fampiasana ireo mekanika ireo dia azonao atao ny mampihatra tetika fanomezan-dΓ lana marobe: avy amin'ny rakitra static misy tenimiafina mankany amin'ny OpenID OAuth2.
Ankoatra izany, azo atao ny mampiasa tetika fanomezan-dΓ lana maromaro miaraka. Amin'ny alΓ lan'ny default, ny cluster dia mampiasa:
kaonty kaonty serivisy - ho an'ny kaonty serivisy;
X509 - ho an'ny mpampiasa.
Ny fanontaniana momba ny fitantanana ny ServiceAccounts dia tsy tafiditra ao anatin'ity lahatsoratra ity, fa ho an'ireo izay te hahafantatra bebe kokoa momba ity olana ity dia manoro hevitra aho hanomboka amin'ny pejy antontan-taratasy ofisialy. Hojerentsika akaiky ny olana momba ny fomba fiasan'ny fanamarinana X509.
Taratasy ho an'ny mpampiasa (X.509)
Ny fomba fiasa mahazatra amin'ny fanamarinana dia ahitana:
sa ahoana tsysafidy soso-kevitra - tsy mila mamaritra ny taratasy fanamarinana fototra ianao (dia tsy hanamarina ny fahamarinan'ny api-server an'ny cluster ny kubectl):
Mba hanamora ny famindrana ny config eo amin'ny kaonty sy ny mpizara dia ilaina ny manova ny soatoavin'ireto fanalahidy manaraka ireto:
certificate-authority
client-certificate
client-key
Mba hanaovana izany, azonao atao ny manidy ny rakitra voatondro ao amin'izy ireo amin'ny alΓ lan'ny base64 ary manoratra azy ireo ao amin'ny config, manampy ny suffix amin'ny anaran'ny fanalahidy. -data, i.e. rehefa nahazo certificate-authority-data ary ny toy izany.
Certificat misy kubeadm
Miaraka amin'ny famoahana Kubernetes 1.15 Lasa mora kokoa ny miasa miaraka amin'ny fanamarinana noho ny dikan-teny alpha amin'ny fanohanana azy kubeadm utility. Ohatra, toy izao no mety ho endriky ny famoronana rakitra fikirakirana miaraka amin'ny fanalahidin'ny mpampiasa:
kubeadm alpha kubeconfig user --client-name=mynewuser --apiserver-advertise-address 192.168.100.200
NB: Takina adiresy doka dia hita ao amin'ny config api-server, izay hita ao amin'ny default /etc/kubernetes/manifests/kube-apiserver.yaml.
Ny config vokatr'izany dia hivoaka amin'ny stdout. Mila tehirizina ao ~/.kube/config kaonty mpampiasa na amin'ny rakitra voatondro ao amin'ny fari-piainan'ny tontolo iainana KUBECONFIG.
Dig Deeper
Ho an'ireo izay te-hahatakatra ireo olana voalaza mazava kokoa:
Ny kaonty nahazo alalana default dia tsy manana zo hiasa amin'ny cluster. Mba hanomezana alalana dia mametraka rafitra fanomezan-dΓ lana i Kubernetes.
Talohan'ny version 1.6, nampiasa karazana fanomezan-dΓ lana antsoina hoe Kubernetes ABACA (Fifehezana fidirana mifototra amin'ny toetra). Ny antsipiriany momba izany dia azo jerena ao amin'ny antontan-taratasy ofisialy. Ity fomba fiasa ity dia heverina ho lova, saingy mbola azonao ampiasaina miaraka amin'ireo karazana fanamarinana hafa.
Ny fomba ankehitriny (ary mora kokoa) amin'ny fizarana zo fidirana amin'ny cluster dia antsoina RBAC (Fanaraha-maso fidirana ifotoran'ny andraikitra). Nambara fa stable hatramin'ny dikan-teny Kubernetes 1.8. Ny RBAC dia mametraka modely momba ny zo izay voarara ny zavatra rehetra tsy avela mazava. Mba hahafahan'ny RBAC, mila manomboka Kubernetes api-server ianao miaraka amin'ny parameter --authorization-mode=RBAC. Ny mari-pamantarana dia napetraka ao amin'ny manifest miaraka amin'ny fanamafisam-peo api-server, izay eo amin'ny lalana no misy azy /etc/kubernetes/manifests/kube-apiserver.yaml, ao amin'ny fizarana command. Na izany aza, ny RBAC dia efa alefa amin'ny alΓ lan'ny default, ka azo inoana fa tsy tokony hanahy momba izany ianao: azonao atao ny manamarina izany amin'ny sandany. authorization-mode (ao amin'ny efa voalaza kube-apiserver.yaml). Raha ny marina, anisan'ny dikan'izany dia mety misy karazana fanomezan-dΓ lana hafa (node, webhook, always allow), fa hamela ny fandinihany azy ireo ivelan'ny faritry ny fitaovana.
Raha ny marina, efa namoaka izahay lahatsoratra miaraka amin'ny famaritana mazava tsara ny fitsipika sy ny endri-javatra amin'ny fiaraha-miasa amin'ny RBAC, noho izany dia hametra ny tenako amin'ny lisitra fohy momba ny fototra sy ny ohatra aho.
Ireto sampana API manaraka ireto dia ampiasaina hifehezana ny fidirana ao amin'ny Kubernetes amin'ny alΓ lan'ny RBAC:
Role ΠΈ ClusterRole - anjara asa mamaritra ny zo fidirana:
Role mamela anao hamaritra zo ao anatin'ny namespace;
ClusterRole - ao anatin'ny kluster, ao anatin'izany ny zavatra manokana cluster toy ny nodes, url tsy loharanon-karena (izany hoe tsy mifandray amin'ny loharanon-karena Kubernetes - ohatra, /version, /logs, /api*);
RoleBinding ΠΈ ClusterRoleBinding - ampiasaina amin'ny famatorana Role ΠΈ ClusterRole amin'ny mpampiasa, vondrona mpampiasa na ServiceAccount.
Ny sampan-draharahan'ny Role sy RoleBinding dia voafetra amin'ny toeran'ny anarana, izany hoe. dia tsy maintsy ao anatin'ny namespace mitovy. Na izany aza, ny RoleBinding dia afaka manondro ClusterRole, izay ahafahanao mamorona andiana fahazoan-dΓ lana ankapobeny sy mifehy ny fidirana amin'ny fampiasana azy ireo.
Ny andraikitra dia mamaritra ny zo amin'ny fampiasana andian-dalΓ na misy:
harena (loharanon-karena: pod, namespace, deployment sy ny sisa.);
matoanteny (teny: set, update ary ny toy izany).
anarana loharano (resourceNames) - raha toa ka mila manome fidirana amin'ny loharano manokana ianao, fa tsy amin'ny loharano rehetra amin'ity karazana ity.
Ny famakafakana amin'ny antsipiriany bebe kokoa momba ny fanomezan-dΓ lana ao amin'ny Kubernetes dia azo jerena ao amin'ny pejy antontan-taratasy ofisialy. Ho solon'izay (na ny marimarina kokoa, ho fanampin'ity) dia hanome ohatra izay mampiseho ny asany aho.
Ohatra amin'ny sampana RBAC
tsotra Role, izay ahafahanao mahazo lisitra sy satan'ny pods ary manara-maso azy ireo ao amin'ny namespace target-namespace:
Amin'ny ankapobeny, ny maritrano Kubernetes dia azo aseho toy izao manaraka izao:
Ny singa fototra Kubernetes tompon'andraikitra amin'ny fanodinana ny fangatahana dia api-server. Mandalo azy ny asa rehetra ao amin'ny cluster. Azonao atao ny mamaky bebe kokoa momba ireo mekanika anatiny ireo ao amin'ny lahatsoratra "Inona no mitranga ao amin'ny Kubernetes rehefa mihazakazaka kubectl run ianao?".
Ny fanaraha-maso ny rafitra dia endri-javatra mahaliana ao amin'ny Kubernetes, izay kilemaina amin'ny alΓ lan'ny default. Izany dia ahafahanao mampiditra ny antso rehetra amin'ny Kubernetes API. Araka ny mety ho eritreretinao, ny hetsika rehetra mifandraika amin'ny fanaraha-maso sy ny fanovana ny toetry ny cluster dia atao amin'ny alΓ lan'ity API ity. Ny famaritana tsara ny fahaizany dia azo (tahaka ny mahazatra) hita ao antontan-taratasy ofisialy K8s. Manaraka izany dia hiezaka ny hanolotra ilay lohahevitra aminβny fiteny tsotra kokoa aho.
Ary noho izany, mba ahafahana manao audit, mila mampita masontsivana telo takiana amin'ny kaontenera ao amin'ny api-server isika, izay voafaritra amin'ny antsipiriany etsy ambany:
audit-log-format - endrika log audit. Ny default dia json, fa misy ihany koa ny endrika lahatsoratra lova (legacy).
Politika fanaraha-maso
Ankehitriny momba ny rakitra voalaza mamaritra ny politikan'ny logging. Ny foto-kevitra voalohany amin'ny politikan'ny audit dia level, haavon'ny logging. Toy izao izy ireo:
Mandeha ihany koa ny fangatahana rehetra dingana maromaro:
RequestReceived - ny dingana izay raisin'ny processeur ny fangatahana ary tsy mbola nampitaina lavitra teo amin'ny rojom-pamokarana;
ResponseStarted - ny lohatenin'ny valiny dia alefa, fa alohan'ny handefasana ny vatan'ny valiny. Natao ho an'ny fanontaniana maharitra (ohatra, watch);
ResponseComplete - Nalefa ny vatana namaly, tsy hisy fampahalalana hafa halefa;
Panic - Miforona ny hetsika rehefa misy toe-javatra tsy ara-dalΓ na hita.
Mba handingana ny dingana rehetra azonao ampiasaina omitStages.
Ao amin'ny rakitra politika, afaka mamaritra fizarana maromaro miaraka amin'ny haavon'ny firaketana samihafa isika. Ny fitsipika mifanandrify voalohany hita ao amin'ny famaritana politika dia hampiharina.
Ny daemon kubelet dia manara-maso ny fiovana amin'ny fisehoana miaraka amin'ny fanamafisam-pizarana api-server ary, raha misy hita, dia mamerina ny fitoeran-javatra miaraka amin'ny api-server. Saingy misy antsipiriany manan-danja: ny fanovana ao amin'ny rakitra politika dia tsy hiraharaha azy. Aorian'ny fanovana ny rakitra politika dia mila averinao amin'ny tanana ny api-server. Satria ny api-server dia natomboka ho static pod, ekipa kubectl delete tsy hahatonga azy hanomboka indray. Tsy maintsy manao izany amin'ny tanana ianao docker stop ao amin'ny kube-masters, izay niova ny politikan'ny fanaraha-maso:
Rehefa mamela ny fanaraha-maso dia zava-dehibe ny mitadidy izany mitombo ny entana amin'ny kube-apiserver. Indrindra indrindra, mitombo ny fanjifana fahatsiarovana amin'ny fitahirizana ny contexte fangatahana. Aorian'ny fandefasana ny lohatenin'ny valinteny dia manomboka ny fandraketana. Miankina amin'ny fandrindrana ny politikan'ny fanaraha-maso ihany koa ny entana.
Ohatra amin'ny politika
Andeha hojerentsika ny firafitry ny rakitra politika amin'ny fampiasana ohatra.
Ity misy rakitra tsotra policyhampiditra ny zava-drehetra amin'ny ambaratonga Metadata:
Ao amin'ny politika dia azonao atao ny mamaritra ny lisitry ny mpampiasa (Users ΠΈ ServiceAccounts) ary vondrona mpampiasa. Ohatra, ity no fomba tsy hiraharahantsika ny mpampiasa rafitra, fa alaivo ny zavatra hafa rehetra amin'ny ambaratonga Request:
Mba hamaliana haingana ny hetsika fanaraha-maso dia azo atao mamaritra ny webhook. Ity olana ity dia voarakitra ao antontan-taratasy ofisialy, avelako ivelan'ny faritry ity lahatsoratra ity.
vokatra
Ny lahatsoratra dia manome topimaso momba ny rafitra fiarovana fototra ao amin'ny kluster Kubernetes, izay ahafahanao mamorona kaonty mpampiasa manokana, manasaraka ny zon'izy ireo, ary mirakitra ny fihetsik'izy ireo. Manantena aho fa hahasoa ireo izay miatrika olana toy izany amin'ny teoria na amin'ny fampiharana. Manoro hevitra ihany koa aho hamaky ny lisitry ny fitaovana hafa momba ny lohahevitra momba ny fiarovana ao amin'ny Kubernetes, izay omena ao amin'ny "P.S." - angamba amin'izy ireo dia hahita ny antsipiriany ilaina amin'ny olana mifandraika aminao.