[GCP] Workload Identity란

Seunghyun Moon·2023년 5월 2일
0

gcp

목록 보기
7/15
post-custom-banner

GKE 에서 기본적으로 노드(GCE VM)의 SA가 가진 권한으로 GCP 서비스에 액세스 할 수 있습니다. 여러 경우에 이런 상황을 원하지 않을 수 있습니다.

Workload Identity를 사용하면 GKE의 SA(이하 KSA)와 GCP의 SA(이하 GSA)를 매핑해 사용할 수 있습니다.

Workload Identity allows workloads in your GKE clusters to impersonate Identity and Access Management (IAM) service accounts to access Google Cloud services.


Prerequisites

IAM roles
roles/container.admin
roles/iam.serviceAccountAdmin
GKE 에서 workload identity를 활성화합니다.
workload identity pool 은 프로젝트의 기본 pool을 사용하게 됩니다.
--workload-pool=PROJECT_ID.svc.id.goog


적용

GSA, KSA 생성


# GSA 생성
gcloud iam service-accounts create GSA_NAME \
    --project=GSA_PROJECT
 
 
 
# KSA 생성
kubectl create serviceaccount KSA_NAME \
    --namespace NAMESPACE

GSA에 필요한 역할을 부여합니다.


gcloud projects add-iam-policy-binding PROJECT_ID \
    --member "serviceAccount:GSA_NAME@GSA_PROJECT.iam.gserviceaccount.com" \
    --role "ROLE_NAME"

이번엔 GSA를 리소스로써 사용합니다. KSA가 GSA를 iam.workloadIdentityUser 유저의 권한으로 사용하기 위해 IAM 정책 바인딩을 추가합니다.


gcloud iam service-accounts add-iam-policy-binding GSA_NAME@GSA_PROJECT.iam.gserviceaccount.com \
    --role roles/iam.workloadIdentityUser \
    --member "serviceAccount:PROJECT_ID.svc.id.goog[NAMESPACE/KSA_NAME]"

KSA에 annotation을 붙입니다.


kubectl annotate serviceaccount KSA_NAME \
    --namespace NAMESPACE \
    iam.gke.io/gcp-service-account=GSA_NAME@GSA_PROJECT.iam.gserviceaccount.com

참고

https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity

https://medium.com/google-cloud-apac/gcp-google-kubernetes-engine%EC%9D%98-workload-identity-%ED%99%9C%EC%9A%A9%ED%95%98%EA%B8%B0-b84a71b8d114

https://stackoverflow.com/questions/61875357/gcloud-confusion-around-add-iam-policy-binding

https://blog.thecloudside.com/auth-proxy-operator-the-secure-way-of-connecting-gke-to-cloud-sql-214ba5c1b22e

https://googlecloudarchitect.us/gcp-service-accounts-and-iam-bindings/

https://cloud.google.com/sdk/gcloud/reference/iam/service-accounts/add-iam-policy-binding

https://cloud.google.com/sdk/gcloud/reference/projects/add-iam-policy-binding

profile
I live fullest
post-custom-banner

0개의 댓글