최근 CDC(Change Data Capture)와 관련하여 Origin DB에서 BigQuery로의 작업을 진행했습니다.
여기에 몇가지 걸렷던 것은 보안 요구 사항으로 RBAC으로 인증/권한 획득을 해야한다는 조건이었는데요.
이를 위해 다음과 같이 진행하게 되었습니다.
Google Cloud / GKE 작업
## 1. GKE내 Service Account 생성
kubectl create serviceaccount srv-dev-sa --namespace srv
## 2. Google Cloud 내 Service Account 생성
gcloud iam service-accounts create srv-dev-sa --project srv-dev
## 3. GCP SA와 GKE SA에 대한 Binding 진행
gcloud iam service-accounts add-iam-policy-binding \
srv-dev-sa@srv-dev.iam.gserviceaccount.com \
--role roles/iam.workloadIdentityUser \
--member "serviceAccount:srv-dev.svc.id.goog[srv/srv-dev-sa]" \
--project srv-dev
## 4. IAM 계정에 필요 권한 부여하기
gcloud projects add-iam-policy-binding srv-dev \
--member "serviceAccount:srv-dev-sa@srv-dev.iam.gserviceaccount.com" \
--role "Service Account OpenID Connect Identity Token Creator"
gcloud projects add-iam-policy-binding srv-dev \
--member "serviceAccount:srv-dev-sa@srv-dev.iam.gserviceaccount.com" \
--role "Service Account Token Creator"
## 5. GKE SA에 관련 정보 추가하기
kubectl annotate serviceaccount srv-dev-sa \
--namespace srv \
iam.gke.io/gcp-service-account=srv-dev-sa@srv-dev.iam.gserviceaccount.com
## 6. AWS IAM에 등록할 oauth2ClientId 확인하기
gcloud iam service-accounts describe srv-dev-sa@oydp-srv-dev.iam.gserviceaccount.com
description: srv-dev 프로젝트의 cdc용 서비스 계정입니다.
displayName: srv-dev-sa
email: srv-dev-sa@srv-dev.iam.gserviceaccount.com
etag: ************
name: projects/srv-dev/serviceAccounts/srv-dev-sa@srv-dev.iam.gserviceaccount.com
oauth2ClientId: '*********************'
projectId: srv-dev
uniqueId: '*********************'
AWS IAM 작업 (아래는 연동을 위한 기본 정보입니다. Role은 필요한 권한만 부여하도록 작업)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {"Federated": "accounts.google.com"},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"accounts.google.com:aud": "*********************"
}
}
}
]
}
이렇게 작업하게 되면, GKE에서 동작하는 어플리케이션이 AWS내 리소스에 접근할수 있도록 할수 있습니다. 동시에 AccessKey를 사용하지 않기 때문에 보안적인부분에서도 도움이 될수 있습니다.
참고링크