рдХреНрд▓рд╛рдЙрдб рдкрд╣рдЪрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ Kubernetes рдкреЙрдб: EKS IRSA рдмрдирд╛рдо GKE Workload Identity Federation
рдХреИрд╕реЗ рдПрдХ Kubernetes ServiceAccount AWS рдФрд░ Google Cloud рдкрд░ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреНрд▓рд╛рдЙрдб рдкрд╣рдЪрд╛рди рдмрди рдЬрд╛рддрд╛ рд╣реИ - EKS IRSA рдФрд░ GKE Workload Identity Federation рдХреЗ рдкреАрдЫреЗ рдХреА OIDC рдлреЗрдбрд░реЗрд╢рди рдЯреНрд░рд╕реНрдЯ рдЪреЗрди, рдПрдХ-рд╕реЗ-рдПрдХ рдореИрдк рдХреА рдЧрдИ, рдЙрди рдЬрдЯрд┐рд▓рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЬреЛ рдЖрдкрдХреА рдорд╛рдВрд╕рдкреЗрд╢реА рд╕реНрдореГрддрд┐ рдХреЛ рддреЛрдбрд╝ рджреЗрддреА рд╣реИрдВред
AWS рдФрд░ Google Cloud рджреЛрдиреЛрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдПрдХ рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ: рдПрдХ рдкреЙрдб рдХреНрд▓рд╛рдЙрдб API рдХреЛ рд╕реНрд╡рдпрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ рдЯреЛрдХрди рдФрд░ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдВрдЧреНрд░рд╣реАрдд рд░рд╣рд╕реНрдп рдХреЗ, рдЕрдкрдиреЗ Kubernetes ServiceAccount рдХреЛ рдПрдХ рдлреЗрдбрд░реЗрдЯреЗрдб рдХреНрд▓рд╛рдЙрдб рдкрд╣рдЪрд╛рди рдореЗрдВ рдмрджрд▓рдХрд░ред AWS рдкрд░ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ IRSA (IAM Roles for Service Accounts) рд╣реИ; Google Cloud рдкрд░ рдпрд╣ Workload Identity Federation for GKE рд╣реИ (рдЬрд┐рд╕реЗ 2024 рдореЗрдВ "Workload Identity" рд╕реЗ рдирдпрд╛ рдирд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛)ред рдореВрд▓ рд░реВрдк рд╕реЗ, рджреЛрдиреЛрдВ рдПрдХ рд╣реА OIDC рдлреЗрдбрд░реЗрд╢рди рдЯреНрд░рд┐рдХ рд╣реИрдВ - рд▓реЗрдХрд┐рди GKE рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпрдкреНрд░рдгрд╛рд▓реА рдХреЛ рдЫрд┐рдкрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ, рдбреАрдмрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдкрдврд╝рддреЗ рд╣реИрдВ: рдХреНрд▓рд╕реНрдЯрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреЙрдб рдХреЗ ServiceAccount рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ рдЯреЛрдХрди рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХреНрд▓рд╛рдЙрдб рдЙрд╕ рдЯреЛрдХрди рдХреЛ рдПрдХ рдкрд╣рдЪрд╛рди рддрдХ рд╕реАрдорд┐рдд рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХрд░рддрд╛ рд╣реИред AWS рдкрд░ рдЖрдк рдкреНрд░рддрд┐ рдХреНрд▓рд╕реНрдЯрд░ рдПрдХ IAM OIDC рдкреНрд░рджрд╛рддрд╛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ IAM рднреВрдорд┐рдХрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ рдПрдХ рдЯреНрд░рд╕реНрдЯ рдкреЙрд▓рд┐рд╕реА рдХреЗ рд╕рд╛рде рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ; рдкреЙрдб рдХреЗ рдЕрдВрджрд░ рдХрд╛ SDK AssumeRoleWithWebIdentity рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред GKE рдкрд░ рдЖрдк рдХреБрдЫ рднреА рдкрдВрдЬреАрдХреГрдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ - рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рд╕реНрдерд╛рдпреА, Google-рдкреНрд░рдмрдВрдзрд┐рдд рд╡рд░реНрдХрд▓реЛрдб рдЖрдЗрдбреЗрдВрдЯрд┐рдЯреА рдкреВрд▓ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо PROJECT_ID.svc.id.goog рд╣реЛрддрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ ServiceAccount рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдореЗрдВ рдПрдХ рдкреНрд░рд┐рдВрд╕рд┐рдкрд▓ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдиреЛрдб-рд╕реНрдерд╛рдиреАрдп рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╕рд░реНрд╡рд░ рдЯреЛрдХрди рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдкрдХрд╛ рдРрдк Application Default Credentials рдХрд╛ рдЙрдкрдпреЛрдЧ рдРрд╕реЗ рдХрд░реЗ рдЬреИрд╕реЗ рд╡рд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп VM рдкрд░ рд╣реЛред рддреАрди рдЪреАрдЬреЗрдВ рдЗрддрдиреА рдЕрд▓рдЧ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░ рд╕рдХрддреА рд╣реИрдВ: GKE рдХреЛ рджреЛ рд╕рдХреНрд╖рдорддрд╛ рдЯреЙрдЧрд▓ (рдХреНрд▓рд╕реНрдЯрд░ рдФрд░ рдиреЛрдб рдкреВрд▓) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, GKE рдПрдХ Kubernetes ServiceAccount рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХреНрд▓рд╛рдЙрдб рдкрд╣рдЪрд╛рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдХреНрд▓рд╛рдЙрдб рдЕрдиреБрдорддрд┐рдпрд╛рдБ рджреЗ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ - рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ - рдЖрдкрдХреА рдХрдВрдЯреЗрдирд░ рдЗрдореЗрдЬ рдХреЛ рдЦреАрдВрдЪрдирд╛ рдЖрдкрдХреА рд╡рд░реНрдХрд▓реЛрдб рдкрд╣рдЪрд╛рди рд╕реЗ рдЕрд▓рдЧ рдкрд╣рдЪрд╛рди рд╣реИред
рджреЛрдиреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХреА рдЧрдИ рд╕рдорд╕реНрдпрд╛
рдлреЗрдбрд░реЗрд╢рди рд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдкреЙрдб рдХреЛ рдХреНрд▓рд╛рдЙрдб рдЕрдиреБрдорддрд┐рдпрд╛рдБ рджреЗрдиреЗ рдХрд╛ рдорддрд▓рдм рдЦрд░рд╛рдм рд╡рд┐рдХрд▓реНрдк рдереЗ: рдПрдХ рд╕реНрдерд┐рд░ рдХреБрдВрдЬреА рдХреЛ рдЗрдореЗрдЬ рдпрд╛ Secret рдореЗрдВ рдбрд╛рд▓рдирд╛ (рд▓реАрдХ, рд░реЛрдЯреЗрд╢рди рдХрд╛ рджрд░реНрдж), рдпрд╛ рдкреВрд░реЗ рдиреЛрдб рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рддрд╛рдХрд┐ рдЙрд╕ рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреЙрдб рдЗрд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗ (рдХреЛрдИ рдЕрд▓рдЧрд╛рд╡ рдирд╣реАрдВ, рдЕрддреНрдпрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ)ред AWS-рд╕рд╛рдЗрдб рдХреЗ рд╕реНрдЯреЙрдкрдЧреИрдк kube2iam рдФрд░ kiam рдЬреИрд╕реЗ рдиреЛрдб-IMDS рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдереЗ; GCP-рд╕рд╛рдЗрдб рд╡рд╛рд▓рд╛ рдкреЙрдб рдореЗрдВ рдПрдХ рдиреЛрдб рд╕рд░реНрд╡рд┐рд╕-рдЕрдХрд╛рдЙрдВрдЯ рдХреБрдВрдЬреА рдХреЛ рдорд╛рдЙрдВрдЯ рдХрд░рдирд╛ рдерд╛ред рд╡реЗ рд╕рднреА рдЬрдЯрд┐рд▓, рдЕрддреНрдпрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ рдФрд░ рд░реЗрд╕-рдкреНрд░реЛрди рдереЗред
рдлреЗрдбрд░реЗрд╢рди рдЗрд╕реЗ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдЯреНрд░рд╕реНрдЯ рд╕реЗ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рдХреНрд▓рд╕реНрдЯрд░ рдкреЙрдб рдХреЗ ServiceAccount рддрдХ рд╕реАрдорд┐рдд рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд, рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ OIDC рдЯреЛрдХрди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИред рдХреНрд▓рд╛рдЙрдб рдХреНрд▓рд╕реНрдЯрд░ рдХреА рдкреНрд░рдХрд╛рд╢рд┐рдд рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд╡рд┐рд░реБрджреНрдз рдЙрд╕ рдЯреЛрдХрди рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░, рдпрджрд┐ рдЯреЛрдХрди рдХреА рдкрд╣рдЪрд╛рди рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рдирд┐рдпрдо рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ, рддреЛ рдареАрдХ рдПрдХ рдХреНрд▓рд╛рдЙрдб рдкрд╣рдЪрд╛рди рдХреЗ рд▓рд┐рдП рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рд╡рд╛рдкрд╕ рджреЗрддрд╛ рд╣реИред рдХрд╣реАрдВ рднреА рдХреЛрдИ рд░рд╣рд╕реНрдп рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ; рдЯреЛрдХрди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдШреВрдорддрд╛ рд╣реИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЬреАрд╡рдирдХрд╛рд▓ рд▓рдЧрднрдЧ рдПрдХ рдШрдВрдЯрд╛) рдФрд░ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рдмрд╛рд╣рд░ рдмреЗрдХрд╛рд░ рд╣реИред
рд╕рд╛рдЭрд╛ рддрдВрддреНрд░: OIDC рдлреЗрдбрд░реЗрд╢рди
рдХрд┐рд╕реА рднреА рдХреНрд▓рд╛рдЙрдб рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдХрд▓реЛрдб-рдкрд╣рдЪрд╛рди рд╕реЗрдЯрдЕрдк, рдПрдХ рд╣реА рдЯреНрд░рд╕реНрдЯ рддреНрд░рд┐рдХреЛрдг рд╣реИ:
- рдХреНрд▓рд╕реНрдЯрд░ рдПрдХ OIDC рдЬрд╛рд░реАрдХрд░реНрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдбрд┐рд╕реНрдХрд╡рд░реА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдФрд░ рдПрдХ JWKS рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдирдХреЗ рд╕рд╛рде рдпрд╣ ServiceAccount рдЯреЛрдХрди рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рддрд╛ рд╣реИред рд╡рд╣ рдЬрд╛рд░реАрдХрд░реНрддрд╛ рдЯреНрд░рд╕реНрдЯ рдПрдВрдХрд░ рд╣реИред
- рдХреНрд▓рд╛рдЙрдб рдЙрд╕ рдЬрд╛рд░реАрдХрд░реНрддрд╛ рдкрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ ServiceAccount рдкрд╣рдЪрд╛рди рдХреЗ рд▓рд┐рдП рднрд░реЛрд╕рд╛ рдХрд░рддрд╛ рд╣реИред AWS рдкреНрд░рддрд┐ рднреВрдорд┐рдХрд╛ рдЯреНрд░рд╕реНрдЯ рд╡реНрдпрдХреНрдд рдХрд░рддрд╛ рд╣реИ; GCP рдЗрд╕реЗ рдкреНрд░рддрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдПрдХ рдмрд╛рд░, рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд╡реНрдпрдХреНрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ Google рдЗрд╕реЗ рдЖрдкрдХреЗ рд▓рд┐рдП рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИред
- рд╡рд░реНрдХрд▓реЛрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯреЗрдб рдЯреЛрдХрди рдХреЛ рдХреНрд▓рд╛рдЙрдб рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдПрдХрд▓ рдХреНрд▓рд╛рдЙрдб рдкрд╣рдЪрд╛рди рдХреЗ рд▓рд┐рдП рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
рдмрд╛рдХреА рд╕рдм рдирд╛рдордХрд░рдг рд╣реИ - рдФрд░ рдЪрд░рдг 2 рдХрд╛ рдХрд┐рддрдирд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЖрдкрдХреЛ рд╕реНрд╡рдпрдВ рдмрдирд╛рдирд╛ рд╣реИред рдпрд╣реАрдВ рдкрд░ рджреЛрдиреЛрдВ рдХреНрд▓рд╛рдЙрдб рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВред
рдПрдХ-рд╕реЗ-рдПрдХ рдореИрдк
- Kubernetes рдкрдХреНрд╖ред AWS рдкрд░ рдЖрдк ServiceAccount рдХреЛ
eks.amazonaws.com/role-arn: <role arn>рдХреЗ рд╕рд╛рде рдПрдиреЛрдЯреЗрдЯ рдХрд░рддреЗ рд╣реИрдВред GKE рдкрд░, рдЖрдзреБрдирд┐рдХ рдкреНрд░рддреНрдпрдХреНрд╖ рдореЙрдбрд▓ рдореЗрдВ, рдЖрдк ServiceAccount рдкрд░ рдХреБрдЫ рднреА рдПрдиреЛрдЯреЗрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ - рдЖрдк рдмрд╕ рдЗрд╕реЗ рдПрдХ IAM рдкреНрд░рд┐рдВрд╕рд┐рдкрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реИрдВред (рдкреБрд░рд╛рдирд╛ рдкреНрд░рддрд┐рд░реВрдкрдг рдореЙрдбрд▓ рдПрдХ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ; рдиреАрдЪреЗ рдФрд░ рджреЗрдЦреЗрдВред) - "OIDC рдкреНрд░рджрд╛рддрд╛ред" AWS рдкрд░ рдпрд╣ EKS рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛ OIDC рдЬрд╛рд░реАрдХрд░реНрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдк IAM рдореЗрдВ рдПрдХ OIDC рдкрд╣рдЪрд╛рди рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдмрд╛рд░ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ - рдкреНрд░рддрд┐ рдХреНрд▓рд╕реНрдЯрд░ред GKE рдкрд░ рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рд╡рд░реНрдХрд▓реЛрдб рдЖрдЗрдбреЗрдВрдЯрд┐рдЯреА рдкреВрд▓
PROJECT_ID.svc.id.googрд╣реИ, рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ Google рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдЖрдк рдЗрд╕реЗ рдХрднреА рдкрдВрдЬреАрдХреГрдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ ServiceAccount рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕рдХреЗ рдЕрдВрджрд░ рдПрдХ рдкреНрд░рд┐рдВрд╕рд┐рдкрд▓ рд╣реИред - рдкрд╣рдЪрд╛рдиред AWS: рдПрдХ IAM рднреВрдорд┐рдХрд╛ред GKE рдкреНрд░рддреНрдпрдХреНрд╖ рдореЙрдбрд▓: рдХреЛрдИ рд╕рдорд░реНрдкрд┐рдд рдкрд╣рдЪрд╛рди рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╣реАрдВ - Kubernetes ServiceAccount рд╕реНрд╡рдпрдВ рдкреНрд░рд┐рдВрд╕рд┐рдкрд▓ рд╣реИред GKE рдкреНрд░рддрд┐рд░реВрдкрдг рдореЙрдбрд▓: рдПрдХ Google рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ рдЬрд┐рд╕реЗ KSA рдкреНрд░рддрд┐рд░реВрдкрд┐рдд рдХрд░рддрд╛ рд╣реИред
- рдЯреНрд░рд╕реНрдЯ рдирд┐рдпрдоред AWS: IAM рднреВрдорд┐рдХрд╛ рдХреА рдЯреНрд░рд╕реНрдЯ рдкреЙрд▓рд┐рд╕реА
sub = system:serviceaccount:<ns>:<sa>рдФрд░aud = sts.amazonaws.comрдХреЛ рдкрд┐рди рдХрд░рддреА рд╣реИред GKE рдкреНрд░рддреНрдпрдХреНрд╖: рдХреЛрдИ рдЕрд▓рдЧ рдЯреНрд░рд╕реНрдЯ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдирд╣реАрдВ рд╣реИ - рдЖрдк рд╕реАрдзреЗ рдПрдХ рдкреНрд░рд┐рдВрд╕рд┐рдкрд▓ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рдПрдХ рднреВрдорд┐рдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдиреЗрдорд╕реНрдкреЗрд╕ рдФрд░ ServiceAccount рдХреЛ рдПрдиреНрдХреЛрдб рдХрд░рддрд╛ рд╣реИред GKE рдкреНрд░рддрд┐рд░реВрдкрдг: рдЖрдк Google рд╕реЗрд╡рд╛ рдЦрд╛рддреЗ рдкрд░ KSA рдХреЛroles/iam.workloadIdentityUserрднреВрдорд┐рдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред - рдЕрдиреБрдорддрд┐рдпрд╛рдБред AWS: рднреВрдорд┐рдХрд╛ рд╕реЗ рдЬреБрдбрд╝реА рдПрдХ IAM рдкреЙрд▓рд┐рд╕реАред GKE: рд▓рдХреНрд╖реНрдп рд╕рдВрд╕рд╛рдзрди (рдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ) рдкрд░ IAM рдЕрдиреБрдорддрд┐-рдкреЙрд▓рд┐рд╕реА рднреВрдорд┐рдХрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ -
roles/storage.objectViewer,roles/secretmanager.secretAccessor, рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдпрд╣ рдЧрд╣рд░рд╛ рд╡рд┐рднрд╛рдЬрди рд╣реИ: AWS рдкрд╣рдЪрд╛рди рд╕реЗ рдПрдХ рдкреЙрд▓рд┐рд╕реА рдЬреЛрдбрд╝рддрд╛ рд╣реИ; GCP рд╕рдВрд╕рд╛рдзрди рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рдПрдХ рднреВрдорд┐рдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред - рдПрдХреНрд╕рдЪреЗрдВрдЬред AWS: рдкреЙрдб рдХреЗ рдЕрдВрджрд░ рдХрд╛ SDK рдкреНрд░реЛрдЬреЗрдХреНрдЯреЗрдб рдЯреЛрдХрди рдХреЗ рд╕рд╛рде
sts:AssumeRoleWithWebIdentityрдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред GKE: рдиреЛрдб рдХрд╛ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╕рд░реНрд╡рд░ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХреЛ рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХрд╛ рдРрдк Application Default Credentials рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХреЛрдб рдХреЗ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рдкреЛрд╕реНрдЯ рдХрд╛ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕рд╛ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд▓рд╛рдЙрдб рдХреЛ рдПрдВрдб-рдЯреВ-рдПрдВрдб рдмрддрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рдЙрди рдЕрдВрддрд░реЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓реЛрдЧреЛрдВ рдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░рддреЗ рд╣реИрдВред
рд╡реЙрдХ-рдереНрд░реВ: AWS EKS IRSA, рдПрдВрдб-рдЯреВ-рдПрдВрдб
рдЯреБрдХрдбрд╝реЗ, рдЬрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рдЯреНрд░рд╕реНрдЯ рдкреНрд░рд╡рд╛рд╣рд┐рдд рд╣реЛрддрд╛ рд╣реИ:
1. рдХреНрд▓рд╕реНрдЯрд░ OIDC рдЬрд╛рд░реАрдХрд░реНрддрд╛, https://oidc.eks.<region>.amazonaws.com/id/<hash> рдЬреИрд╕реЗ URL рдкрд░ред рдЖрдк рдЗрд╕реЗ IAM рдореЗрдВ рдПрдХ OIDC рдкрд╣рдЪрд╛рди рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдмрд╛рд░ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ IAM рдЙрди рдЯреЛрдХрди рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░реЗрдЧрд╛ рдЬрд┐рди рдкрд░ рдпрд╣ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рддрд╛ рд╣реИред
2. IAM рднреВрдорд┐рдХрд╛ рдФрд░ рдЙрд╕рдХреА рдЯреНрд░рд╕реНрдЯ рдкреЙрд▓рд┐рд╕реАред рдЯреНрд░рд╕реНрдЯ рдкреЙрд▓рд┐рд╕реА рднреВрдорд┐рдХрд╛ рдХреЛ рдПрдХ ServiceAccount рдФрд░ рдХрд┐рд╕реА рдФрд░ рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЧреНрд░рд╣рдг рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рддреА рд╣реИ:
{
"Effect": "Allow",
"Principal": { "Federated": "arn:aws:iam::<account>:oidc-provider/oidc.eks.<region>.amazonaws.com/id/<hash>" },
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"oidc.eks.<region>.amazonaws.com/id/<hash>:sub": "system:serviceaccount:apps:checkout",
"oidc.eks.<region>.amazonaws.com/id/<hash>:aud": "sts.amazonaws.com"
}
}
}
рджреЛрдиреЛрдВ :sub рдФрд░ :aud рдХреЛ рдкрд┐рди рдХрд░реЗрдВ - рдХреЗрд╡рд▓ рдЬрд╛рд░реАрдХрд░реНрддрд╛ рдХреЛ рдкрд┐рди рдХрд░рдиреЗ рд╕реЗ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдХреЛрдИ рднреА ServiceAccount рднреВрдорд┐рдХрд╛ рдЧреНрд░рд╣рдг рдХрд░ рдкрд╛рдПрдЧрд╛ред
3. IAM рдкреЙрд▓рд┐рд╕реА рдЬреЛ рднреВрдорд┐рдХрд╛ рд╕реЗ рдЬреБрдбрд╝реА рд╣реЛрддреА рд╣реИ, рд╡рд╣ рдРрдк рдХреЛ рдЬреЛ рдЪрд╛рд╣рд┐рдП рд╡рд╣ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ (рдПрдХ рдмрдХреЗрдЯ рдкрд░ s3:GetObject, рдФрд░ рдЗрд╕реА рддрд░рд╣)ред
4. ServiceAccount рдПрдХ рдПрдиреЛрдЯреЗрд╢рди рд░рдЦрддрд╛ рд╣реИ:
apiVersion: v1
kind: ServiceAccount
metadata:
name: checkout
namespace: apps
annotations:
eks.amazonaws.com/role-arn: arn:aws:iam::<account>:role/checkout
5. рдкреНрд░реЛрдЬреЗрдХреНрд╢рдиред EKS рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд Pod Identity Webhook рднреЗрдЬрддрд╛ рд╣реИред рдЬрдм рдПрдХ рдкреЙрдб рдПрдиреЛрдЯреЗрдЯ рдХрд┐рдП рдЧрдП ServiceAccount рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡реЗрдмрд╣реБрдХ AWS_ROLE_ARN рдФрд░ AWS_WEB_IDENTITY_TOKEN_FILE рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯреЗрдб рдЯреЛрдХрди (рдСрдбрд┐рдпрдВрд╕ sts.amazonaws.com, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдШреБрдорд╛рдпрд╛ рдЧрдпрд╛) рдорд╛рдЙрдВрдЯ рдХрд░рддрд╛ рд╣реИред
6. рдПрдХреНрд╕рдЪреЗрдВрдЬред AWS SDK AWS_WEB_IDENTITY_TOKEN_FILE рдХреЛ рдиреЛрдЯрд┐рд╕ рдХрд░рддрд╛ рд╣реИ, sts:AssumeRoleWithWebIdentity рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд▓реМрдЯрд╛рдП рдЧрдП рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдХреЛ рдХреИрд╢ рдХрд░рддрд╛ рд╣реИред рдЖрдкрдХрд╛ рдХреЛрдб рдмрд╕ boto3.client("s3") рд╣реИред
рдирдпрд╛ рд╡рд┐рдХрд▓реНрдк: EKS Pod Identity (2023) рдПрдХ рдСрди-рдХреНрд▓рд╕реНрдЯрд░ рдПрдЬреЗрдВрдЯ рдФрд░ рдПрдХ рдПрд╕реЛрд╕рд┐рдПрд╢рди API рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдмрдЬрд╛рдп рдкреНрд░рддрд┐-рдХреНрд▓рд╕реНрдЯрд░ IAM OIDC рдкреНрд░рджрд╛рддрд╛ рдФрд░ рдкреНрд░рддрд┐-рднреВрдорд┐рдХрд╛ рдЯреНрд░рд╕реНрдЯ рдкреЙрд▓рд┐рд╕реА рдХреЗ - рдЬреЛ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЗрд╕реЗ GKE рдХреЗ рдкреНрд░рдмрдВрдзрд┐рдд рдореЙрдбрд▓ рдЬреИрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░рд╛рддрд╛ рд╣реИред IRSA рдФрд░ Pod Identity рджреЛрдиреЛрдВ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд╕рд╣-рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рд╣реИрдВ; IRSA рд╡рд╣ рд╣реИ рдЬреЛ OIDC-рдлреЗрдбрд░реЗрд╢рди рдлреНрд░реЗрдорд┐рдВрдЧ рд╕реЗ рд╕рд╛рдл-рд╕рд╛рдл рдореИрдк рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдпрд╣рд╛рдВ рдЕрдкрдиреЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рд░рдЦрдирд╛ рд╣реИред
рд╡реЙрдХ-рдереНрд░реВ: GKE Workload Identity Federation, рдПрдВрдб-рдЯреВ-рдПрдВрдб
рд╡рд╣реА рдЯреНрд░рд╕реНрдЯ рдлреНрд▓реЛ, рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдо:
1. рджреЛ рд╕рдХреНрд╖рдорддрд╛ рдЯреЙрдЧрд▓ред рдХреНрд▓рд╕реНрдЯрд░ рдкрд░ рд╡рд░реНрдХрд▓реЛрдб рдЖрдЗрдбреЗрдВрдЯрд┐рдЯреА рдкреВрд▓ рдФрд░ рдиреЛрдб рдкреВрд▓ рдкрд░ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╕рд░реНрд╡рд░ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ:
gcloud container clusters update <cluster> --workload-pool=<project-id>.svc.id.goog
gcloud container node-pools update <pool> --cluster=<cluster> --workload-metadata=GKE_METADATA
рджреЛрдиреЛрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВред рдХреНрд▓рд╕реНрдЯрд░ рдлреНрд▓реИрдЧ рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдкреВрд▓ рдореЗрдВ рдСрдкреНрдЯ рдХрд░рддрд╛ рд╣реИ; рдиреЛрдб-рдкреВрд▓ рдлреНрд▓реИрдЧ GKE рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╕рд░реНрд╡рд░ (рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдкрд░ рдПрдХ DaemonSet) рдХреЛ рддреИрдирд╛рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░реЗрдЧрд╛ред GKE_METADATA рдХреЗ рдмрд┐рдирд╛ рдиреЛрдб рдкреВрд▓ рдкрд░ рдПрдХ рдкреЙрдб рдХреЛ рдиреЛрдб рдХреА рдкрд╣рдЪрд╛рди рдорд┐рд▓рддреА рд╣реИ, рдЕрдкрдиреА рдирд╣реАрдВ - рдПрдХ рдореМрди, рдЕрддреНрдпрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ рдлреЙрд▓рдмреИрдХред
2. рдкреВрд▓ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИред <project-id>.svc.id.goog рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдЖрдк рдХрднреА рднреА OIDC рдкреНрд░рджрд╛рддрд╛ рдкрдВрдЬреАрдХреГрдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╣рд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдкреНрд░рддрд┐-рдЦрд╛рддрд╛ рдкреНрд░рджрд╛рддрд╛ рд╕реАрдорд╛ рдирд╣реАрдВ рд╣реИред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ ServiceAccount рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдкреНрд░рд┐рдВрд╕рд┐рдкрд▓ рд╣реИред
3a. рдкреНрд░рддреНрдпрдХреНрд╖ рдкрд╣реБрдВрдЪ (рдЖрдзреБрдирд┐рдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ)ред рд╕реАрдзреЗ ServiceAccount рдХреЛ рдПрдХ рднреВрдорд┐рдХрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ, рдЬрд┐рд╕реЗ рдПрдХ IAM рдкреНрд░рд┐рдВрд╕рд┐рдкрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреЛрдИ Google рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ рдирд╣реАрдВ, рдХреЛрдИ рдПрдиреЛрдЯреЗрд╢рди рдирд╣реАрдВ:
gcloud storage buckets add-iam-policy-binding gs://<bucket> \
--role=roles/storage.objectViewer \
--member="principal://iam.googleapis.com/projects/<project-number>/locations/global/workloadIdentityPools/<project-id>.svc.id.goog/subject/ns/apps/sa/checkout"
рдкреНрд░рд┐рдВрд╕рд┐рдкрд▓ рдкрде ns/apps/sa/checkout рдХреЛ рдПрдиреНрдХреЛрдб рдХрд░рддрд╛ рд╣реИ - рдиреЗрдорд╕реНрдкреЗрд╕ рдФрд░ ServiceAccount рдЯреНрд░рд╕реНрдЯ рдирд┐рдпрдо рд╣реИрдВ; рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрд▓рдЧ рдЯреНрд░рд╕реНрдЯ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдирд╣реАрдВ рд╣реИред
3b. рдкреНрд░рддрд┐рд░реВрдкрдг (рдкреБрд░рд╛рдирд╛ рдореЙрдбрд▓, рдЕрднреА рднреА рдХреБрдЫ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ)ред рдПрдХ Google рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ рдмрдирд╛рдПрдВ, KSA рдХреЛ рдЗрд╕реЗ рдкреНрд░рддрд┐рд░реВрдкрд┐рдд рдХрд░рдиреЗ рджреЗрдВ, рдФрд░ KSA рдХреЛ рдПрдиреЛрдЯреЗрдЯ рдХрд░реЗрдВ:
gcloud iam service-accounts add-iam-policy-binding checkout@<project-id>.iam.gserviceaccount.com \
--role=roles/iam.workloadIdentityUser \
--member="serviceAccount:<project-id>.svc.id.goog[apps/checkout]"
apiVersion: v1
kind: ServiceAccount
metadata:
name: checkout
namespace: apps
annotations:
iam.gke.io/gcp-service-account: checkout@<project-id>.iam.gserviceaccount.com
рдпрд╣рд╛рдВ Google рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ рдЕрдиреБрдорддрд┐рдпрд╛рдБ рд░рдЦрддрд╛ рд╣реИ (рд╕рд╛рдорд╛рдиреНрдп рднреВрдорд┐рдХрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ), рдФрд░ KSA рдЙрдиреНрд╣реЗрдВ рдЙрдзрд╛рд░ рд▓реЗрддрд╛ рд╣реИред
4. рдПрдХреНрд╕рдЪреЗрдВрдЬред рдЬрдм рдЖрдкрдХрд╛ рдРрдк рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдорд╛рдВрдЧрддрд╛ рд╣реИ, рддреЛ GKE рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╕рд░реНрд╡рд░ http://metadata.google.internal рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рддрд╛ рд╣реИ, рдЙрд╕ рдкреЙрдб рдХреЗ рд▓рд┐рдП Kubernetes API рд╕реЗ рдПрдХ ServiceAccount JWT рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ Security Token Service рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ рдлреЗрдбрд░реЗрдЯреЗрдб рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди (рдбрд┐рдлрд╝реЙрд▓реНрдЯ 1 рдШрдВрдЯрд╛, рд╕рдорд╛рдкреНрддрд┐ рд╕реЗ рдкрд╣рд▓реЗ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рддрд╛рдЬрд╝рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛) рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИред рдЖрдкрдХрд╛ рдРрдк Application Default Credentials рдФрд░ рдорд╛рдирдХ Google Cloud рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ - рдпрд╣ рдареАрдХ рд╡реИрд╕реЗ рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рд╡рд╣ рдПрдХ GCE VM рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реЛред рдХреЛрдИ рд╡реЗрдмрд╣реБрдХ env vars рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдХреЛрдИ AZURE_*-рд╢реИрд▓реА рдХреЗ рд╡реИрд░рд┐рдПрдмрд▓ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рдХреЛрдИ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХреЙрд▓ рдирд╣реАрдВ рд╣реИ: рдПрдХ Cloud Storage рд░реАрдб Python рдореЗрдВ рдмрд╕ storage.Client() рд╣реИред
рд╡рд┐рд╖рдп рд╣реА рдореБрдЦреНрдп рдЖрдзрд╛рд░ рд╣реИ (рджреЛрдиреЛрдВ рдХреНрд▓рд╛рдЙрдб рдкрд░)
рд╡рд╣ рдорд╛рди рдЬреЛ рджреЛрдиреЛрдВ рдХреНрд▓рд╛рдЙрдб рдкрд░ рдареАрдХ-рдареАрдХ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╡рд╣ ServiceAccount рдкрд╣рдЪрд╛рди рд╣реИ:
- AWS рднреВрдорд┐рдХрд╛ рдХреА рдЯреНрд░рд╕реНрдЯ рдкреЙрд▓рд┐рд╕реА рдореЗрдВ рдЯреЛрдХрди рд╡рд┐рд╖рдп
system:serviceaccount:<namespace>:<serviceaccount>рдХреЛ рдкрд┐рди рдХрд░рддрд╛ рд╣реИред - GKE рдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рд┐рдВрд╕рд┐рдкрд▓ рдкрде
.../subject/ns/<namespace>/sa/<serviceaccount>рдореЗрдВ рд╡рд╣реА рдпреБрдЧреНрдорди рдПрдиреНрдХреЛрдб рдХрд░рддрд╛ рд╣реИред - GKE рдкреНрд░рддрд┐рд░реВрдкрдг рдЗрд╕реЗ рд╕рджрд╕реНрдп
serviceAccount:<project-id>.svc.id.goog[<namespace>/<serviceaccount>]рдореЗрдВ рдПрдиреНрдХреЛрдб рдХрд░рддрд╛ рд╣реИред
рдХрд┐рд╕реА рднреА рдХреНрд▓рд╛рдЙрдб рдкрд░ рд╕рдмрд╕реЗ рдЖрдо "рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдорд╛рдгрд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ" рд╡рд┐рдлрд▓рддрд╛ рдпрд╣рд╛рдВ рдПрдХ рдмреЗрдореЗрд▓ рд╣реИ: рдЪрд╛рд░реНрдЯ рдПрдХ рдЕрд▓рдЧ рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛, ServiceAccount рдХреЛ рдРрдк рдирд╛рдо рдХреЗ рдмрдЬрд╛рдп рд░рд┐рд▓реАрдЬрд╝ рдирд╛рдо рдорд┐рд▓рд╛, рдпрд╛ рдкреЙрдб default ServiceAccount рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ред рдЬрдм рдлреЗрдбрд░реЗрд╢рди рдЪреБрдкрдЪрд╛рдк рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкрд╣рд▓реЗ рдиреЗрдорд╕реНрдкреЗрд╕ рдФрд░ ServiceAccount рдирд╛рдо рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред
рдЕрдВрддрд░ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░реЗрдВрдЧреЗ
1. GKE рдЖрдкрдХреЗ рд▓рд┐рдП "OIDC рдкреНрд░рджрд╛рддрд╛" рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ - рдПрдХ рдмрд╛рд░, рдкреНрд░рддрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ, рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдПред EKS рдкрд░ рдЖрдк рдкреНрд░рддрд┐ рдХреНрд▓рд╕реНрдЯрд░ рдПрдХ IAM OIDC рдкреНрд░рджрд╛рддрд╛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлреНрд▓реАрдЯ рд╕реНрдХреЗрд▓ рдкрд░ рдЖрдк рдкреНрд░рддрд┐ AWS рдЦрд╛рддреЗ рдореЗрдВ 100 OIDC рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреА рд╕реЙрдлреНрдЯ рд▓рд┐рдорд┐рдЯ рдХреЛ рд╣рд┐рдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред GKE рдкрд░ рдкреНрд░рддрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдареАрдХ рдПрдХ рдкреВрд▓ (PROJECT_ID.svc.id.goog) рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ Google рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд▓рд╕реНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ, рдХреИрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВред рджреВрд╕рд░рд╛ рдкрд╣рд▓реВ: рдЯреНрд░рд╕реНрдЯ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ-рд╡реНрдпрд╛рдкреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк IAM рдмрд╛рдЗрдВрдбрд┐рдВрдЧ (рдЖрдк рдХрд┐рд╕ рдиреЗрдорд╕реНрдкреЗрд╕ рдФрд░ ServiceAccount рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ) рдХреЗ рд╕рд╛рде рд╕реНрдХреЛрдк рдХрд░рддреЗ рд╣реИрдВ, рди рдХрд┐ рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдХреЗред
2. GKE рдиреЛрдб-рд╕реНрдерд╛рдиреАрдп рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╕рд░реНрд╡рд░ рдкрд░ рдЯреЛрдХрди рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рди рдХрд┐ рдЗрди-рдкреЙрдб SDK рдХреЙрд▓ рдХреЗ рд╕рд╛рдеред IRSA рдкреЙрдб рдХреЛ рдореНрдпреВрдЯреЗрдЯ рдХрд░рддрд╛ рд╣реИ (рдПрдХ рд╡реЗрдмрд╣реБрдХ env vars рдФрд░ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯреЗрдб рдЯреЛрдХрди рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ) рдФрд░ SDK STS рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред GKE рдиреЛрдб рдкрд░ metadata.google.internal рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рд╡рд╛рдкрд╕ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдРрдк Application Default Credentials рдХрд╛ рдЙрдкрдпреЛрдЧ рдРрд╕реЗ рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рд╡рд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп VM рдкрд░ рд╣реЛред рджреЛ рдкрд░рд┐рдгрд╛рдо: рдЖрдкрдХреЗ рдРрдк рдХреЛ рдХреЛрдИ рдХреНрд▓рд╛рдЙрдб-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдФрд░ рдиреЛрдб рдкреВрд▓ рдореЗрдВ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╕рд░реНрд╡рд░ рд╕рдХреНрд╖рдо (GKE_METADATA) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЕрдиреНрдпрдерд╛ рдкреЙрдб рдЪреБрдкрдЪрд╛рдк рдЕрдкрдиреА рдкрд╣рдЪрд╛рди рдХреЗ рдмрдЬрд╛рдп рдиреЛрдб рдХреА рдкрд╣рдЪрд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
3. GKE рдПрдХ ServiceAccount рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХреНрд▓рд╛рдЙрдб рдкрд╣рдЪрд╛рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдХреНрд▓рд╛рдЙрдб рдЕрдиреБрдорддрд┐рдпрд╛рдБ рджреЗ рд╕рдХрддрд╛ рд╣реИред IRSA рдореЗрдВ рд╣рдореЗрд╢рд╛ рдПрдХ IAM рднреВрдорд┐рдХрд╛ рд╣реЛрддреА рд╣реИред GKE рдХреЗ рдкреНрд░рддреНрдпрдХреНрд╖ рдореЙрдбрд▓ рдореЗрдВ рдХреНрд▓рд╛рдЙрдб рд╕рд╛рдЗрдб рдкрд░ рднреВрдорд┐рдХрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХреБрдЫ рднреА рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ - Kubernetes ServiceAccount рд╣реА рдкреНрд░рд┐рдВрд╕рд┐рдкрд▓ рд╣реИ (principal://.../subject/ns/NS/sa/SA)ред рдкреБрд░рд╛рдирд╛ рдкреНрд░рддрд┐рд░реВрдкрдг рдореЙрдбрд▓ рдПрдХ Google рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ рдФрд░ iam.gke.io/gcp-service-account рдПрдиреЛрдЯреЗрд╢рди рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдЕрднреА рднреА рдЙрди рдореБрдЯреНрдареА рднрд░ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рд╕реАрдзреЗ рдПрдХ рдлреЗрдбрд░реЗрдЯреЗрдб рдкреНрд░рд┐рдВрд╕рд┐рдкрд▓ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВ - рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдкреНрд░рддреНрдпрдХреНрд╖ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдкрд╣реБрдВрдЪреЗрдВред
4. GKE рдХреЛ рджреЛ рдЯреЙрдЧрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреИрд╕реЗ Azure рдХрд░рддрд╛ рд╣реИред рдХреНрд▓рд╕реНрдЯрд░ (--workload-pool) рдкреНрд▓рд╕ рдиреЛрдб рдкреВрд▓ (--workload-metadata=GKE_METADATA)ред рдиреЛрдб-рдкреВрд▓ рдЖрдзреЗ рдХреЛ рдорд┐рд╕ рдХрд░рдиреЗ рдкрд░ рдХреЛрдИ рд╡рд┐рдлрд▓рддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдмрд╕ рдЧрд▓рдд (рдиреЛрдб) рдкрд╣рдЪрд╛рди рдорд┐рд▓рддреА рд╣реИред IRSA рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рдХреЛ EKS рдореЗрдВ рд╣реА рд╕рдореЗрдЯ рд▓реЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рд╕рдорд╛рди рджреВрд╕рд░рд╛ рд╕реНрд╡рд┐рдЪ рдирд╣реАрдВ рд╣реИред
5. рдЗрдореЗрдЬ рдЦреАрдВрдЪрдирд╛ рд╡рд░реНрдХрд▓реЛрдб рдкрд╣рдЪрд╛рди рд╕реЗ рдПрдХ рдЕрд▓рдЧ рдкрд╣рдЪрд╛рди рд╣реИ - рджреЛрдиреЛрдВ рдХреНрд▓рд╛рдЙрдб рдкрд░ред рдЗрдореЗрдЬ рдкреБрд▓ рдиреЛрдб рдкрд╣рдЪрд╛рди рдХрд╛ рдХрд╛рдо рд╣реИ: GKE рдкрд░ рдиреЛрдб рдкреВрд▓ рдХреЗ Google рд╕реЗрд╡рд╛ рдЦрд╛рддреЗ рдХреЛ Artifact Registry рд╕реЗ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП roles/artifactregistry.reader рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ; EKS рдкрд░ рдиреЛрдб рд╕рдореВрд╣ рдХреА рдЗрдВрд╕реНрдЯреЗрдВрд╕ рднреВрдорд┐рдХрд╛ рдХреЛ AmazonEC2ContainerRegistryReadOnly рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдпрд╛ рдЖрдк рдкреБрд▓ рд╕реАрдХреНрд░реЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ)ред рд╡рд░реНрдХрд▓реЛрдб рдкрд╣рдЪрд╛рди рдХреЗрд╡рд▓ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдРрдк рдХреЛрдб рдХреНрд▓рд╛рдЙрдб API рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдПрдХ рд╢реБрджреНрдз HTTP рд╕реЗрд╡рд╛ рдЬреЛ рдХрднреА рдХреНрд▓рд╛рдЙрдб SDK рд╕реЗ рдмрд╛рдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рдЙрд╕реЗ рдХрд┐рд╕реА рднреА рд╡рд░реНрдХрд▓реЛрдб рдкрд╣рдЪрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ - рдФрд░ рд╡рд░реНрдХрд▓реЛрдб рдкрд╣рдЪрд╛рди artifactregistry.reader рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рд╕реЗ рдЗрдореЗрдЬ рдкреБрд▓ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреБрд▓ рдРрдк (рдФрд░ рдЙрд╕рдХреЗ рдлреЗрдбрд░реЗрдЯреЗрдб рдЯреЛрдХрди) рдХреЗ рдЪрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реЛрддрд╛ рд╣реИред
6. рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рд╕рдВрд▓рдЧреНрди рд╣реЛрддреА рд╣реИрдВред AWS рднреВрдорд┐рдХрд╛ рд╕реЗ рдПрдХ IAM рдкреЙрд▓рд┐рд╕реА рдЬреЛрдбрд╝рддрд╛ рд╣реИ - рдЕрдиреБрдорддрд┐ рдкрд╣рдЪрд╛рди рдХреЗ рд╕рд╛рде рдпрд╛рддреНрд░рд╛ рдХрд░рддреА рд╣реИред GCP рд▓рдХреНрд╖реНрдп рд╕рдВрд╕рд╛рдзрди рдХреЗ рджрд╛рдпрд░реЗ (рдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ) рдореЗрдВ рдПрдХ IAM рднреВрдорд┐рдХрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ - рдЕрдиреБрджрд╛рди рдЙрд╕ рдЪреАрдЬрд╝ рдкрд░ рд░рд╣рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдкрд╣рдЪрд╛рди рдкрд░ рдирд╣реАрдВред рд╡рд╣реА рдЕрдВрддрд┐рдо рд╕реНрдерд┐рддрд┐, рдЗрд╕реЗ рдСрдбрд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рдЬрдЧрд╣: AWS рдкрд░ рднреВрдорд┐рдХрд╛ рдХреА рд╕рдВрд▓рдЧреНрди рдиреАрддрд┐рдпреЛрдВ рдХреЛ рдкрдврд╝реЗрдВ; GCP рдкрд░ рд╕рдВрд╕рд╛рдзрди рдХреА IAM рдкреЙрд▓рд┐рд╕реА рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВ (рдпрд╛ рдПрдХ рдкреНрд░рд┐рдВрд╕рд┐рдкрд▓ рдХреНрдпрд╛ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИ рдЗрд╕рдХреЗ рд▓рд┐рдП Policy Analyzer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ)ред
рдРрдк рдХреЛрдб рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ
рджреЛрдиреЛрдВ рдХреНрд▓рд╛рдЙрдб "рдХреЛрдИ рд░рд╣рд╕реНрдп рдирд╣реАрдВ, рдХреЛрдИ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдХреЛрдб рдирд╣реАрдВ" рдкрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рд╡рд╣рд╛рдВ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ:
- AWS: рд╡реЗрдмрд╣реБрдХ
AWS_ROLE_ARNрдФрд░AWS_WEB_IDENTITY_TOKEN_FILEрд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ; SDK рдХреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЪреЗрдиAssumeRoleWithWebIdentityрдХреЛ рдХреЙрд▓ рдХрд░рддреА рд╣реИред рдЖрдкрдХрд╛ рдХреЛрдб:boto3.client("s3")ред - GKE: рдкреЙрдб рдореЗрдВ рдХреБрдЫ рднреА рдЗрдВрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; SDK рдХреА Application Default Credentials рдЪреЗрди рдиреЛрдб рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╕рд░реНрд╡рд░ рдХреЛ рд╣рд┐рдЯ рдХрд░рддреА рд╣реИ, рдЬреЛ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХрд░рддрд╛ рд╣реИред рдЖрдкрдХрд╛ рдХреЛрдб:
storage.Client()ред
рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ рддрд╛рдЬрд╝рд╛ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдШреБрдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ, рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ, рдФрд░ рд▓реАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред
рдПрдХ рдбреАрдмрдЧрд┐рдВрдЧ рдЪреЗрдХрд▓рд┐рд╕реНрдЯ рдЬреЛ рджреЛрдиреЛрдВ рдХреНрд▓рд╛рдЙрдб рдкрд░ рдХрд╛рдо рдХрд░рддреА рд╣реИ
рдЬрдм рдПрдХ рдкреЙрдб "рдкреНрд░рдорд╛рдгрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛," рддреЛ рдЯреНрд░рд╕реНрдЯ рдЪреЗрди рдХреЛ рдХреНрд░рдо рдореЗрдВ рдЪрд▓реЗрдВ:
- рдХреНрд▓рд╕реНрдЯрд░/рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлреЗрдбрд░реЗрд╢рди рдЪрд╛рд▓реВ рд╣реИ? EKS: IAM OIDC рдкреНрд░рджрд╛рддрд╛ рдкрдВрдЬреАрдХреГрдд рд╣реИред GKE: рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ
--workload-poolрдФрд░ рдиреЛрдб рдкреВрд▓ рдореЗрдВGKE_METADATAрд╣реИред GKE рдкрд░, рдПрдХ рд▓рд╛рдкрддрд╛ рдиреЛрдб-рдкреВрд▓ рдЯреЙрдЧрд▓ рдХреНрд▓рд╛рд╕рд┐рдХ рд╕рд╛рдЗрд▓реЗрдВрдЯ рд╡рд┐рдлрд▓рддрд╛ рд╣реИ - рдкреЙрдб рдХреЛ рдиреЛрдб рдкрд╣рдЪрд╛рди рдорд┐рд▓рддреА рд╣реИ, рдЕрдкрдиреА рдирд╣реАрдВред - рд╕рд╣реА ServiceAccount? рдкреЙрдб рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ ServiceAccount рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдк рд╕реЛрдЪрддреЗ рд╣реИрдВ (рди рдХрд┐
default)ред рдЕрдВрджрд░ exec рдХрд░реЗрдВ рдФрд░ рдЬрд╛рдВрдЪреЗрдВред - рдкрд╣рдЪрд╛рди рдореЗрд▓ рдЦрд╛рддреА рд╣реИ? рдЯреНрд░рд╕реНрдЯ рдирд┐рдпрдо рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдиреЗрдорд╕реНрдкреЗрд╕ рдФрд░ ServiceAccount рд╕реЗ рддреБрд▓рдирд╛ рдХрд░реЗрдВ: AWS рдкрд░
system:serviceaccount:<ns>:<sa>, GKE рдкрд░.../subject/ns/<ns>/sa/<sa>(рдпрд╛[ns/sa])ред рдпрд╣ рджреЛрдиреЛрдВ рдкрд░ рд╕рдмрд╕реЗ рд▓рдЧрд╛рддрд╛рд░ рд╡рд┐рдлрд▓рддрд╛ рд╣реИред - рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ? EKS: рдкреЙрдб рдореЗрдВ
AWS_WEB_IDENTITY_TOKEN_FILEрд╣реИред GKE: рдкреЙрдб рд╕реЗ curl -H "Metadata-Flavor: Google" metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/email рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд╣рдЪрд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред - рдЕрдиреБрдорддрд┐рдпрд╛рдБ? рдкрд╣рдЪрд╛рди рд╣рд▓ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣реА: рднреВрдорд┐рдХрд╛ рдкрд░ IAM рдкреЙрд▓рд┐рд╕реА (AWS) рдпрд╛ рд▓рдХреНрд╖реНрдп рд╕рдВрд╕рд╛рдзрди рдкрд░ рднреВрдорд┐рдХрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ (GCP)ред рдпрд╣рд╛рдВ рдПрдХ рдЦрд╛рд▓реА рдкрд░рд┐рдгрд╛рдо рдПрдХ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рдлрд▓рддрд╛ рд╣реИ, рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдирд╣реАрдВ - рдЬреЛ рдЖрдкрдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдлреЗрдбрд░реЗрд╢рди рд╕реНрд╡рдпрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред
рдХреМрди рд╕реЗ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрд╢рди рдЗрд╕реЗ рдбреНрд░рд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ
рд╡рд░реНрдХрд▓реЛрдб рдкрд╣рдЪрд╛рди рдареАрдХ рд╡рд╣реАрдВ рдмреИрдарддреА рд╣реИ рдЬрд╣рд╛рдВ Kubernetes, рдХреНрд▓рд╛рдЙрдб IAM, рдФрд░ OIDC рдлреЗрдбрд░реЗрд╢рди рдорд┐рд▓рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рддреАрди рдкрд░реАрдХреНрд╖рд╛ рдЯреНрд░реИрдХреЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдХреНрд▓рд╛рдЙрдб рдХрд╛ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рд╣реИ, рддреЛ рджреВрд╕рд░реЗ рдХреНрд▓рд╛рдЙрдб рдкрд░ рд╡рд╣реА рдЕрд╡рдзрд╛рд░рдгрд╛ рдПрдХ рдЫреЛрдЯреА рд╕реА рдЫрд▓рд╛рдВрдЧ рд╣реИред
AWS рдкрдХреНрд╖ рдкрд░:
- AWS Certified Solutions Architect - Associate (SAA-C03) - IAM рднреВрдорд┐рдХрд╛рдПрдБ, EKS, рдФрд░ рдкрд╣рдЪрд╛рдиреЛрдВ рдХреЛ рдХреНрд▓рд╛рдЙрдб рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдХреИрд╕реЗ рдорд┐рд▓рддреА рд╣реИрдВред
- AWS Certified Security - Specialty (SCS-C03) - IAM рдЯреНрд░рд╕реНрдЯ рдиреАрддрд┐рдпрд╛рдБ, OIDC рдлреЗрдбрд░реЗрд╢рди, рдФрд░ рдиреНрдпреВрдирддрдо-рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╕реНрдХреЛрдкрд┐рдВрдЧ (рдареАрдХ IRSA рдЯреНрд░рд╕реНрдЯ рдЪреЗрди)ред
Google Cloud рдкрдХреНрд╖ рдкрд░:
- Google Cloud Associate Cloud Engineer - GKE, IAM, рд╕реЗрд╡рд╛ рдЦрд╛рддреЗ, рдФрд░ рднреВрдорд┐рдХрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧред
- Google Cloud Professional Cloud Security Engineer - рд╡рд░реНрдХрд▓реЛрдб рдкрд╣рдЪрд╛рди, IAM рдЧрд╣рд░рд╛рдИ, рд╕реЗрд╡рд╛-рдЦрд╛рддрд╛ рд╕реБрд░рдХреНрд╖рд╛, рдФрд░ рдиреНрдпреВрдирддрдо рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ред
Kubernetes рдкрдХреНрд╖ рдкрд░:
- CNCF Certified Kubernetes Administrator (CKA) - ServiceAccounts, рдкреНрд░реЛрдЬреЗрдХреНрдЯреЗрдб рдЯреЛрдХрди, рдФрд░ рдкреЙрдб рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХреЗрд╢рдиреНрд╕ред
- CNCF Certified Kubernetes Security Specialist (CKS) - ServiceAccount рдЯреЛрдХрди рд╕реБрд░рдХреНрд╖рд╛, рдиреНрдпреВрдирддрдо рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░, рдФрд░ рд╕реНрдерд┐рд░-рд░рд╣рд╕реНрдп рдПрдХреНрд╕рдкреЛрдЬрд░ рдХреЛ рдХрдо рдХрд░рдирд╛ред
рдирд┐рдЪрд▓рд╛ рд░реЗрдЦрд╛
IRSA рдФрд░ GKE Workload Identity Federation рдПрдХ рд╣реА рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ рдЬреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпрдкреНрд░рдгрд╛рд▓реА рдкрд╣рдирддреЗ рд╣реИрдВ: рдХреНрд▓рд╕реНрдЯрд░ рдПрдХ ServiceAccount рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ OIDC рдЯреЛрдХрди рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХреНрд▓рд╛рдЙрдб рдЗрд╕реЗ рдПрдХ рдПрдХрд▓ рдкрд╣рдЪрд╛рди рддрдХ рд╕реАрдорд┐рдд рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХрд░рддрд╛ рд╣реИред AWS рдЖрдкрдХреЛ рдЯреНрд░рд╕реНрдЯ рдХреЛ рд╕реНрд╡рдпрдВ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИ - рдкреНрд░рддрд┐ рдХреНрд▓рд╕реНрдЯрд░ рдПрдХ OIDC рдкреНрд░рджрд╛рддрд╛, рдПрдХ IAM рднреВрдорд┐рдХрд╛, рдПрдХ рдЯреНрд░рд╕реНрдЯ рдкреЙрд▓рд┐рд╕реА, рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯреЗрдб рдЯреЛрдХрди рдЬрд┐рд╕реЗ SDK рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХрд░рддрд╛ рд╣реИред GKE рдЖрдкрдХреЛ рдПрдХ рдкреНрд░рдмрдВрдзрд┐рдд, рдкреНрд░реЛрдЬреЗрдХреНрдЯ-рд╡реНрдпрд╛рдкреА рдкреВрд▓ рджреЗрддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХреНрд▓рд╛рдЙрдб рдкрд╣рдЪрд╛рди рдХреЗ рд╕реАрдзреЗ Kubernetes ServiceAccount рд╕реЗ рдПрдХ рднреВрдорд┐рдХрд╛ рдмрд╛рдВрдзрдиреЗ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдиреЛрдб рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдкрдХрд╛ рдРрдк рдХрднреА рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рди рджреЗрдЦреЗред рдЯреНрд░рд╕реНрдЯ рддреНрд░рд┐рдХреЛрдг рдХреЛ рдПрдХ рдмрд╛рд░ рд╕реАрдЦреЗрдВ рдФрд░ рдЕрдиреБрд╡рд╛рдж рдпрд╛рдВрддреНрд░рд┐рдХ рд╣реИ: рднреВрдорд┐рдХрд╛ рдкреНрд░рд┐рдВрд╕рд┐рдкрд▓ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ (рдпрд╛ рдПрдХ рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ рдЬрд┐рд╕реЗ рдЖрдк рдкреНрд░рддрд┐рд░реВрдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ) рдмрди рдЬрд╛рддреА рд╣реИ, рдЯреНрд░рд╕реНрдЯ рдкреЙрд▓рд┐рд╕реА рдПрдХ IAM рд╕рджрд╕реНрдп рд╕реНрдЯреНрд░рд┐рдВрдЧ рдмрди рдЬрд╛рддреА рд╣реИ, рд╕рдВрд▓рдЧреНрди рдкреЙрд▓рд┐рд╕реА рд╕рдВрд╕рд╛рдзрди рдкрд░ рдПрдХ рднреВрдорд┐рдХрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдмрди рдЬрд╛рддреА рд╣реИ, рдФрд░ AssumeRoleWithWebIdentity рдПрдХ рдЕрджреГрд╢реНрдп рдореЗрдЯрд╛рдбреЗрдЯрд╛-рд╕рд░реНрд╡рд░ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдмрди рдЬрд╛рддрд╛ рд╣реИред рддреАрди рдЪреАрдЬреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗрдВ - GKE рдХреЗ рджреЛ рдЯреЙрдЧрд▓, рдЗрд╕рдХрд╛ рдиреЛ-рдЖрдЗрдбреЗрдВрдЯрд┐рдЯреА-рдСрдмреНрдЬреЗрдХреНрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯ рдореЙрдбрд▓, рдФрд░ рдпрд╣ рддрдереНрдп рдХрд┐ рдЗрдореЗрдЬ рдкреБрд▓ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдХ рдЕрд▓рдЧ рдкрд╣рдЪрд╛рди рд╣реИ - рдФрд░ рдЬреЛ рдЗрдирдХрд╛рд░ рдкрд╣рд▓реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд▓рдЧрддреЗ рдереЗ рд╡реЗ рдПрдХ рд╕реБрд╕рдВрдЧрдд, рдЬрд╛рдирдмреВрдЭрдХрд░ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рдиреЗ рд▓рдЧрддреЗ рд╣реИрдВред