Kubernetes Pivoting to Clouds
GCP
Ikiwa unendesha k8s cluster ndani ya GCP, huenda ukataka kwamba programu fulani inayofanya kazi ndani ya cluster iwe na ufikiaji wa GCP. Kuna njia 2 za kawaida za kufanya hivyo:
Mounting GCP-SA keys as secret
Njia ya kawaida ya kutoa ufikiaji kwa programu ya kubernetes kwa GCP ni:
Kuunda Akaunti ya Huduma ya GCP
Kuunganisha ruhusa zinazohitajika
Kupakua ufunguo wa json wa SA iliyoundwa
Kuunganisha kama siri ndani ya pod
Kuweka mabadiliko ya mazingira ya GOOGLE_APPLICATION_CREDENTIALS yanayoelekeza kwenye njia ambapo json iko.
Kwa hivyo, kama mshambuliaji, ikiwa unavunja kontena ndani ya pod, unapaswa kuangalia env variable na json files zenye akreditivu za GCP.
Relating GSA json to KSA secret
Njia ya kutoa ufikiaji kwa GSA kwa kluster ya GKE ni kwa kuziunganisha kwa njia hii:
Kuunda akaunti ya huduma ya Kubernetes katika namespace sawa na kluster yako ya GKE kwa kutumia amri ifuatayo:
Unda Siri ya Kubernetes inayoshikilia akreditivu za akaunti ya huduma ya GCP unayotaka kutoa ufikiaji kwa klasta ya GKE. Unaweza kufanya hivyo kwa kutumia zana ya amri ya
gcloud
, kama inavyoonyeshwa katika mfano ufuatao:
Fungisha Siri ya Kubernetes kwa akaunti ya huduma ya Kubernetes kwa kutumia amri ifuatayo:
Katika hatua ya pili ilipangwa siri za GSA kama siri ya KSA. Kisha, ikiwa unaweza kusoma siri hiyo kutoka ndani ya GKE klasta, unaweza kuinua hadi akaunti hiyo ya huduma ya GCP.
Utambulisho wa Kazi wa GKE
Kwa Utambulisho wa Kazi, tunaweza kuunda akaunti ya huduma ya Kubernetes ili kutenda kama akaunti ya huduma ya Google. Pods zinazotembea na akaunti ya huduma ya Kubernetes zitauthentikishwa moja kwa moja kama akaunti ya huduma ya Google wanapofikia API za Google Cloud.
Mfululizo wa hatua za kwanza za kuwezesha tabia hii ni kuwezesha Utambulisho wa Kazi katika GCP (hatua) na kuunda GCP SA unayotaka k8s kuiga.
Washa Utambulisho wa Kazi kwenye klasta mpya
Unda/Sasisha nodepool mpya (Vikundi vya Autopilot havihitaji hii)
Unda Akaunti ya Huduma ya GCP ili kuiga kutoka K8s yenye ruhusa za GCP:
Unganisha na klasta na unda akaunti ya huduma ya kutumia
Funga GSA na KSA
Kimbia pod na KSA na angalia ufikiaji kwa GSA:
Angalia amri ifuatayo ili kuthibitisha ikiwa inahitajika:
Kama mshambuliaji ndani ya K8s unapaswa kutafuta SAs zenye iam.gke.io/gcp-service-account
annotation kwani hiyo inaonyesha kwamba SA inaweza kufikia kitu katika GCP. Chaguo lingine lingekuwa kujaribu kutumia kila KSA katika klasta na kuangalia kama ina ufikiaji.
Kutoka GCP daima ni ya kuvutia kuorodhesha viunganishi na kujua ni ufikiaji gani unatoa kwa SAs ndani ya Kubernetes.
Hii ni script ya urahisi kuzunguka juu ya maelezo yote ya pods ikiangalia hiyo annotation:
AWS
Kiam & Kube2IAM (IAM role for Pods)
Njia (ya zamani) ya kutoa IAM Roles kwa Pods ni kutumia Kiam au Kube2IAM server. Kimsingi unahitaji kuendesha daemonset katika klasta yako yenye aina ya IAM role yenye mamlaka. Hii daemonset itakuwa ile itakayotoa ufikiaji wa IAM roles kwa pods zinazohitaji.
Kwanza kabisa unahitaji kusanidi ni roles zipi zinaweza kufikiwa ndani ya namespace, na unafanya hivyo kwa kutumia annotation ndani ya kitu cha namespace:
Mara tu namespace imewekwa na majukumu ya IAM ambayo Pods zinaweza kuwa nayo unaweza kuonyesha jukumu unalotaka kwenye kila ufafanuzi wa pod kwa kitu kama:
Kama mshambuliaji, ikiwa utapata hizi anotations katika pods au namespaces au seva ya kiam/kube2iam inayoendesha (katika kube-system labda) unaweza kujifanya kuwa kila roli ambayo tayari inatumiwa na pods na zaidi (ikiwa una ufikiaji wa akaunti ya AWS orodhesha majukumu).
Unda Pod na IAM Role
IAM role inayopaswa kuonyeshwa lazima iwe katika akaunti hiyo hiyo ya AWS kama ile ya kiam/kube2iam na hiyo role lazima iweze kuipata.
IAM Role for K8s Service Accounts via OIDC
Hii ni njia inayopendekezwa na AWS.
Kwanza kabisa unahitaji kuunda mtoa huduma wa OIDC kwa klasta.
Kisha unaunda jukumu la IAM lenye ruhusa ambazo SA itahitaji.
Unda uhusiano wa kuaminiana kati ya jukumu la IAM na SA jina (au majina ya majimbo yanayotoa ufikiaji kwa jukumu kwa SAs wote wa jimbo). Uhusiano wa kuaminiana utaangalia hasa jina la mtoa huduma wa OIDC, jina la jimbo na jina la SA.
Hatimaye, unda SA yenye maelezo yanayoashiria ARN ya jukumu, na pods zinazotembea na SA hiyo zitakuwa na ufikiaji wa token ya jukumu. Token ime andikwa ndani ya faili na njia imeainishwa katika
AWS_WEB_IDENTITY_TOKEN_FILE
(default:/var/run/secrets/eks.amazonaws.com/serviceaccount/token
)
Ili kupata aws kwa kutumia token kutoka /var/run/secrets/eks.amazonaws.com/serviceaccount/token
endesha:
Kama mshambuliaji, ikiwa unaweza kuhesabu klasta ya K8s, angalia akaunti za huduma zenye anoteshini hiyo ili kuinua hadi AWS. Ili kufanya hivyo, tu exec/create pod ukitumia moja ya akaunti za huduma zenye mamlaka na kuiba tokeni.
Zaidi ya hayo, ikiwa uko ndani ya pod, angalia kwa mabadiliko ya mazingira kama AWS_ROLE_ARN na AWS_WEB_IDENTITY_TOKEN.
Wakati mwingine Sera ya Uaminifu ya jukumu inaweza kuwa imewekwa vibaya na badala ya kutoa ufikiaji wa AssumeRole kwa akaunti ya huduma inayotarajiwa, inatoa kwa akaunti zote za huduma. Hivyo, ikiwa unaweza kuandika anoteshini kwenye akaunti ya huduma unayodhibiti, unaweza kufikia jukumu hilo.
Angalia ukurasa ufuatao kwa maelezo zaidi:
Pata Pods na SAs zenye Majukumu ya IAM katika Klasta
Hii ni skripti ya urahisi kuzunguka pods zote na maelezo ya sas ikiangalia anoteshini hiyo:
Node IAM Role
Sehemu iliyopita ilikuwa kuhusu jinsi ya kuiba IAM Roles na pods, lakini kumbuka kwamba Node ya K8s cluster itakuwa kifaa ndani ya wingu. Hii inamaanisha kwamba Node ina uwezekano mkubwa wa kuwa na IAM role mpya ambayo unaweza kuiba (kumbuka kwamba kwa kawaida nodes zote za K8s cluster zitakuwa na IAM role sawa, hivyo huenda isiwe na maana kujaribu kuangalia kwenye kila node).
Hata hivyo, kuna hitaji muhimu la kufikia metadata endpoint kutoka kwa node, unahitaji kuwa kwenye node (ssh session?) au angalau kuwa na mtandao sawa:
Steal IAM Role Token
Kabla tulijadili jinsi ya kuunganisha IAM Roles kwa Pods au hata jinsi ya kutoroka hadi Node ili kuiba IAM Role ambayo mfano umeunganishwa nayo.
Unaweza kutumia skripti ifuatayo ku iba akreditifani zako mpya za IAM role:
References
Last updated