External Secrets로 SecretManager로 GKE의 secret을 관리해 봤습니다.
4337 단어 GCPKubernetestech
ExternalSecrets의 시크릿을 사용하는 관리 방법을 소개합니다.
External Secrets 소개
External Secrets는 kubernetes cluster의 secret을 외부에서 관리할 수 있는 소프트웨어 도구입니다.
구체적으로 말하면, cluster에 External Secrets 컨트롤러를 설정하여 외부 공급자로부터 secret 데이터를 얻어 cluster에서 upsert를 진행한다.
이로써 cluster의pod는 시크릿에 자유롭게 접근할 수 있습니다.
External Secrets의 이점 사용
외부 관리 시크릿을 통해 안전을 고려한 토대에서 횡적 조정을 할 수 있다.
GiitHub로 관리하면 시크릿이 유출될 수 있으므로 피해야 한다.
또 클라우드 서비스 관리를 통해 콘솔에서 자유롭게 추가 또는 삭제할 수 있어 편의성도 좋다.
실제로 사용해볼게요.
필자는 실제적으로 GKE의 cluster에 External Secrets 컨트롤러를 설치하고 같은 GCP 서비스의 Secret Manager를 이용하여 secret을 관리하는 방법을 시도했다.
필요한 설정은 다음과 같습니다.
1. Workload Identity의 유효성
cluster 내의 node에서 Secret Manager에 접근해야 하기 때문에kubernetes 서비스 계정을 GCP 서비스 계정과 연결해야 합니다.
이때 필요한 것은 Workload Identity 기능입니다.
cluster의 Workload Identity를 유효하게 만들기 위해 다음 명령을 사용합니다.
또 노드 풀에 대해서도 수정이 필요하다.
gcloud container clusters update $CLUSTER_NAME --workload-pool $PROJECT_NAME.svc.id.goog
terraform 사용 시
GKE의 리소스에
workload_identity_config.idnetity_namespace
와node_pool.node_config.workload_metadata_config
를 더하면 유효하다.gcloud container node-pools update $NODEPOOL_NAME --cluster=$CLUSTER_NAME --workload-metadata=GKE_METADATA
2. manfest 파일 생성
clonekubernetes-external-secrets.
clone 창고로 이동하고 helm으로kubernetes의 manfest 파일을 생성하는template를 사용합니다.
resource "google_container_cluster" "CLUSTER_NAME" {
workload_identity_config {
identity_namespace = "<PROJECT_NAME>.svc.id.goog"
}
node_pool {
node_config {
workload_metadata_config {
node_metadata = "GKE_METADATA_SERVER"
}
}
}
}
3. template 수정
template의 메타데이터 등을 수정합니다.
주요 수정
RELEASE-NAME
의 항목.예를 들어
deployment.yaml
의metadata.name
는RELEASE-NAME-kubernetes-external-secrets
이기 때문에 수정RELEASE-NAME
한 부분이다.이 글은
my-release-kubernetes-external-secrets
라고 썼지만 자유롭고 문제가 없습니다.rbac.yaml
, serviceaccount.yaml
도 마찬가지로 수정했다.4. GSA 및 KSA 링크
GCP 서비스 계정과kubernetes 서비스 계정의 링크를 진행합니다.
이제 1에 설명된 Workload Identity의 유효성을 확인합니다.
우선 2생성
service.yaml
에 추가serviceaccount.yaml
된 항목이 있다.helm template --output-dir <OUTPUT PATH> ./charts/kubernetes-external-secrets/
이때metadata.annotations
는 연결하고 싶은 GCP 서비스 계정의 이름입니다.이 GCP 서비스 계정의 역할이 필요합니다
SERVICEACCOUNT_NAME
.다음으로 GKE에
secretmanager.secretAccessor
를 적용합니다.또한 binding을 완성하기 위해 gcloud에서 다음 명령을 실행합니다.
metadata:
annotations:
iam.gke.io/gcp-service-account: <SERVICEACCOUNT_NAME>@<PROJECT_NAME>.iam.gserviceaccount.com
5. 프로그램 설계
설정이 끝난 후 다른 manfest 파일도 적용됩니다.
이렇게 되면 External Secrets 설정이 완성되기 때문에 실제 시크릿을 설계해 봅니다.
예를 들어 다음과 같은 manfest 파일을 만듭니다.
gcloud iam service-accounts add-iam-policy-binding \
--role roles/iam.workloadIdentityUser \
--member "serviceAccount:<PROJECT_NAME>.svc.id.goog[default/my-release-kubernetes-external-secrets]" \
<SERVICEACCOUNT_NAME>@<PROJECT_NAME>.iam.gserviceaccount.com
이로써 시크릿 매니저의 example-secret은 GKE의 시크릿으로 향상되었다.끝맺다
끝까지 읽어주셔서 감사합니다.
실복을 하고 기사를 쓸 시간이 있으니 다른 점이 있으면 알려주세요.
또한 AWS Secret Manager 등을 사용하는 방법도 README 에서 사용할 수 있으므로 반드시 참조하십시오.
참고 자료
Reference
이 문제에 관하여(External Secrets로 SecretManager로 GKE의 secret을 관리해 봤습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/champon1020/articles/bf3cfd302e0e6a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)