AKS의 Secrets Store CSI driver를 통해 Key Vault 사용
6869 단어 AzureKubernetesakskeyvaulttech
키 볼트(Key Vault)를 활용하면 안전한 방법으로 비밀 정보를 저장·취득할 수 있을 것으로 기대할 수 있다.
튜토리얼 프로그램은 다음 공식 문서를 참조합니다.
Azure Kubernetes Service Service Secret 비밀 스토어 CSI 드라이버 사용 - Azure Kubernetes Service | Microsoft Docs
해보려고 했는데 막힌 부분도 있어서 기사로 미리 남기고 싶었어요.
컨디션
고려 사항
kubectl의 자격 정보 저장
'시크릿스토어 CSI 드라이버 설치 확인'에서는 단계별로'샤샤'
kubectl get pods
이지만 환경에 따라 이전 접속 정보 등이 있어 접속이 되지 않을 수 있다.kubectl get pods -n kube-system -l 'app in (secrets-store-csi-driver, secrets-store-provider-azure)'
Unable to connect to the server: dial tcp: lookup xxx: no such host
다음 명령을 사용하여kubectl의 연결 목표를 설정합니다.az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
그리고 집행kubectl get pods
하면 순조롭게 통과할 수 있을 것이다.> kubectl get pods -n kube-system -l 'app in (secrets-store-csi-driver, secrets-store-provider-azure)'
NAME READY STATUS RESTARTS AGE
aks-secrets-store-csi-driver-j9gjh 3/3 Running 1 4m20s
aks-secrets-store-csi-driver-nmzjs 3/3 Running 2 4m31s
aks-secrets-store-csi-driver-wkhwd 3/3 Running 1 4m20s
aks-secrets-store-provider-azure-54vp5 1/1 Running 0 4m20s
aks-secrets-store-provider-azure-pztzs 1/1 Running 0 4m31s
aks-secrets-store-provider-azure-vms2g 1/1 Running 0 4m20s
비밀 및 키 만들기
튜토리얼의 yaml 파일을 직접 사용하면 "Azure Key Vault 만들기 또는 기존 파일 사용"의 경우 객체의 Key Vault에서 사전 제작
secret1
의 비밀과key1
키가 필요합니다.서비스 공급업체의 생성 및 액세스 라이센스 필요
Azure Key Vault에 접근하기 위한 ID 제공'에 프로그램이 기재되지 않았지만 서비스 주관자의 펄스 제작과 Key Vault에 대한 접근 허가가 필요하다.
이 단계를 수행하지 않으면 후면
busybox-secrets-store-inline
Pod 제작ContainerCreating
상태가 유지됩니다.이때 kubectl describe pod
확인을 통해 다음과 같은 오류가 발생했음을 확인할 수 있다.Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 4s default-scheduler Successfully assigned default/busybox-secrets-store-inline to aks-nodepool1-42592859-vmss000001
Warning FailedMount 1s (x2 over 2s) kubelet <下記参照>
MountVolume.SetUp failed for volume "secrets-store-inline": fetching NodePublishSecretRef default/secrets-store-creds failed: kubernetes.io/csi: failed to find the secret secrets-store-creds in the namespace default with error: secrets "secrets-store-creds"not found"
secrets-store-creds
같은 비밀은 없다"는 욕을 먹었지만, 이를 만드는 절차는 다음 문서에 기재돼 있다.Service Principal | Azure Key Vault Provider for Secrets Store CSI Driver
우선 서비스 선호도 만들기
az ad sp create-for-rbac --skip-assignment --name myAKSClusterServicePrincipal
{
"appId": "06634dda-f18b-4688-b941-ff71d363ca10",
"displayName": "myAKSClusterServicePrincipal",
"name": "http://myAKSClusterServicePrincipal",
"password": "TAy5g~0d-NPskcesNsS9DhFNbxNnFQGYjw",
"tenant": "xxxxxx"
}
Key Vault의 액세스 정책에서 상기 서비스 중요 사항에 대해 최소한 기밀 및 키 액세스 권한을 부여합니다.참조: Azure Key Vault 액세스 정책 할당(포털) | Microsoft Docs
다음 느낌으로 바뀌면 OK.
그리고 사전 제작
secrets-store-creds
의 비밀.kubectl create secret generic secrets-store-creds --from-literal clientid="06634dda-f18b-4688-b941-ff71d363ca10" --from-literal clientsecret="TAy5g~0d-NPskcesNsS9DhFNbxNnFQGYjw"
다시 Pod를 만들면 Pod가 Running
로 변하고 kubectl describe pod
에서 다음과 같이 오류가 없으면 OK.Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 4s default-scheduler Successfully assigned default/busybox-secrets-store-inline to aks-nodepool1-42592859-vmss000001
Normal Pulling 4s kubelet Pulling image "k8s.gcr.io/e2e-test-images/busybox:1.29"
Normal Pulled 2s kubelet Successfully pulled image "k8s.gcr.io/e2e-test-images/busybox:1.29" in 2.198869156s
Normal Created 1s kubelet Created container busybox
Normal Started 1s kubelet Started container busybox
또한 액세스 권한 부여 오류 등의 경우 방금 오류 메시지가 발생한 곳에서 다음과 같은 액세스 거부(403 Forbidden) 오류가 발생할 수 있으므로 이 오류가 발생한 경우 액세스 정책이 정확한지 확인하는 것이 좋습니다.MountVolume.SetUp failed for volume "secrets-store-inline": rpc error: code = Unknown desc = failed to mount secrets store objects for pod default/busybox-secrets-store-inline, err: rpc error: code = Unknown desc = failed to mount objects, error: failed to get objectType:secret, objectName:secret1, objectVersion::keyvault.BaseClient#GetSecret: Failure responding to request: StatusCode=403 -- Original Error: autorest/azure: Service returned an error. Status=403 Code="Forbidden"Message="The user, group or application 'appid=06634dda-f18b-4688-b941-ff71d363ca10;oid=xxxxxx;iss=https://sts.windows.net/xxxxxx/' does not have secrets get permission on key vault 'ndsouMyKeyVault3;location=japaneast'. For help resolving this issue, please see https://go.microsoft.com/fwlink/?linkid=2125287 "InnerError={"code":"AccessDenied"}
이 정도면 강좌의 프로그램이 끝까지 실행될 수 있다.
> kubectl exec busybox-secrets-store-inline -- ls /mnt/secrets-store/
key1
secret1
> kubectl exec busybox-secrets-store-inline -- cat /mnt/secrets-store/secret1
P@ssw0rd!!
기타 고려 사항
글 첫머리에서 말한 바와 같이 Azure Key Vault를 활용하면 안전한 방법으로 비밀 정보를 저장하고 얻을 수 있을 것으로 기대할 수 있다.
다른 한편, 의존하는 서비스가 증가한 것은 사실이다.서비스 전체의 가용성을 계산하는 공식 등에서도 Key Vault의 가용성을 곱해야 한다는 점에 유의해야 한다.편하긴 한데
Reference
이 문제에 관하여(AKS의 Secrets Store CSI driver를 통해 Key Vault 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/08thse/articles/31-aks-csi-keyvault텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)