Как привязать K8s ServiceAccount к учетной записи службы Google с помощью ConfigConnector
Я хотел бы определить Kubernetes ServiceAccount, связанный с Google ServiceAccount в диаграмме Helm, в качестве первого шага, а затем использовать эту учетную запись службы в спецификации модулей Kubernetes.
Вот что я пробовал: я определяю учетную запись службы Kubernetes, затем учетную запись службы Google и, наконец, пытаюсь связать обе:
apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ .Release.Name }}
namespace: {{ .Release.Namespace }}
annotations:
iam.gke.io/gcp-service-account: {{ printf "%s@%s.iam.gserviceaccount.com" .Release.Name .Values.gcp.project }}
---
apiVersion: iam.cnrm.cloud.google.com/v1beta1
kind: IAMServiceAccount
metadata:
name: {{ .Release.Name }}
namespace: {{ .Release.Namespace }}
---
# https://cloud.google.com/config-connector/docs/reference/resource-docs/iam/iampolicymember
apiVersion: iam.cnrm.cloud.google.com/v1beta1
kind: IAMPolicyMember
metadata:
name: {{ .Release.Name }}
namespace: {{ .Release.Namespace }}
spec:
member: {{ printf "serviceAccount:%s@%s.iam.gserviceaccount.com" .Release.Name .Values.gcp.project }}
role: roles/iam.workloadIdentityUser
resourceRef:
apiVersion: v1
kind: ServiceAccount
name: {{ .Release.Name }}
namespace: {{ .Release.Namespace }}
Диаграмма управления, развернутая в кластере GKE, в котором включен WorkloadIdentity, возвращает следующую ошибку
Error: UPGRADE FAILED: failed to create resource: admission webhook "iam-validation.cnrm.cloud.google.com" denied the request: resource reference for kind 'ServiceAccount' must include API group
В основном то, что я пытаюсь сделать, - это эквивалент ConfigConnector для
gcloud iam service-accounts add-iam-policy-binding \
--role roles/iam.workloadIdentityUser \
--member "serviceAccount:<YOUR-GCP-PROJECT>.svc.id.goog[<YOUR-K8S-NAMESPACE>/<YOUR-KSA-NAME>]" \
<YOUR-GSA-NAME>@<YOUR-GCP-PROJECT>.iam.gserviceaccount.com
который я получил с https://cloud.google.com/sql/docs/postgres/connect-kubernetes-engine#gsa
1 ответ
Вот способ привязать учетную запись службы Kubernetes к учетной записи службы Google с помощью Config Connector:
apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ .Release.Name }}
namespace: {{ .Release.Namespace }}
annotations:
iam.gke.io/gcp-service-account: {{ printf "%s@%s.iam.gserviceaccount.com" .Release.Name .Values.gcp.project }}
---
apiVersion: iam.cnrm.cloud.google.com/v1beta1
kind: IAMServiceAccount
metadata:
name: {{ .Release.Name }}
namespace: {{ .Release.Namespace }}
spec:
displayName: {{ .Release.Name }}
---
apiVersion: iam.cnrm.cloud.google.com/v1beta1
kind: IAMPolicy
metadata:
name: {{ .Release.Name }}
namespace: {{ .Release.Namespace }}
spec:
resourceRef:
apiVersion: iam.cnrm.cloud.google.com/v1beta1
kind: IAMServiceAccount
name: {{ .Release.Name }}
bindings:
- role: roles/iam.workloadIdentityUser
members:
- {{ printf "serviceAccount:%s.svc.id.goog[%s/%s]" .Values.gcp.project .Release.Namespace .Release.Name }}