Azure Kubernetes Service 대한 Istio 기반 서비스 메시 추가 기능에서 기본적으로 Istio CA(인증 기관)는 자체 서명된 루트 인증서 및 키를 생성하고 이를 사용하여 워크로드 인증서에 서명합니다. 루트 CA 키를 보호하려면 오프라인으로 보안 컴퓨터에서 실행되는 루트 CA를 사용해야 합니다. 루트 CA를 사용하여 각 클러스터에서 실행되는 Istio CA에 중간 인증서를 발급할 수 있습니다. Istio CA는 관리자가 지정한 인증서와 키를 사용하여 워크로드 인증서에 서명하고 관리자가 지정한 루트 인증서를 신뢰할 수 있는 루트로 워크로드에 배포할 수 있습니다. 이 문서에서는 Azure Kubernetes Service 대한 Istio 기반 서비스 메시 추가 기능에서 Istio CA에 대한 자체 인증서 및 키를 가져오는 방법을 설명합니다.
이 문서에서는 Istio 기반 서비스 메시 추가 기능에 대한 Azure Key Vault 사용하여 입력으로 제공되는 루트 인증서, 서명 인증서 및 키를 사용하여 Istio 인증 기관을 구성하는 방법을 설명합니다.
시작하기 전에
Azure CLI 버전 확인
추가 기능을 사용하려면 Azure CLI 버전 2.57.0 이상이 설치되어 있어야 합니다.
az --version을 실행하여 버전을 확인할 수 있습니다. 설치 또는 업그레이드를 위해서는 Azure CLI 설치를 참조하세요.
Azure Key Vault 설정
Istio 추가 기능에 인증서 및 키 입력을 제공하려면 Azure Key Vault 리소스가 필요합니다.
루트 인증서, 중간 인증서, 중간 키 및 인증서 체인을 오프라인으로 생성해야 합니다. 여기의 1~3단계에는 이러한 파일을 생성하는 방법에 대한 예가 있습니다.
인증서 및 키를 사용하여 Azure Key Vault 비밀을 만듭니다.
az keyvault secret set --vault-name $AKV_NAME --name root-cert --file <path-to-folder/root-cert.pem> az keyvault secret set --vault-name $AKV_NAME --name ca-cert --file <path-to-folder/ca-cert.pem> az keyvault secret set --vault-name $AKV_NAME --name ca-key --file <path-to-folder/ca-key.pem> az keyvault secret set --vault-name $AKV_NAME --name cert-chain --file <path-to-folder/cert-chain.pem>클러스터에 대한 비밀 저장소 CSI 드라이버에 Azure Key Vault 공급자를 사용하도록 설정합니다:
az aks enable-addons --addons azure-keyvault-secrets-provider --resource-group $RESOURCE_GROUP --name $CLUSTER참고
인증서를 회전할 때 비밀이 클러스터에 동기화되는 빈도를 제어하기 위해 Azure Key Vault 비밀 공급자 추가 기능의
--rotation-poll-interval매개 변수를 사용할 수 있습니다. 예:az aks addon update --resource-group $RESOURCE_GROUP --name $CLUSTER --addon azure-keyvault-secrets-provider --enable-secret-rotation --rotation-poll-interval 20sKey Vault 사용 권한 모델에 Azure RBAC를 사용하는 경우 here 지침에 따라 추가 기능의 사용자 할당 관리 ID에 Key Vault 비밀 사용자의 Azure 역할을 할당합니다. 또는 키 볼트가 볼트 액세스 정책 권한 모델을 사용하는 경우, 액세스 정책을 사용하여 애드온의 사용자 지정 관리형 ID가 Azure Key Vault 리소스에 액세스할 수 있도록 권한을 부여합니다.
OBJECT_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER --query 'addonProfiles.azureKeyvaultSecretsProvider.identity.objectId' -o tsv) az keyvault set-policy --name $AKV_NAME --object-id $OBJECT_ID --secret-permissions get
플러그 인 CA 인증서로 Istio 기반 서비스 메시 추가 기능 설정
기존 AKS 클러스터에서 앞서 생성된 Azure Key Vault 비밀을 참조하면서 Istio 서비스 메쉬 애드온을 활성화합니다.
az aks mesh enable --resource-group $RESOURCE_GROUP --name $CLUSTER \ --root-cert-object-name root-cert \ --ca-cert-object-name ca-cert \ --ca-key-object-name ca-key \ --cert-chain-object-name cert-chain \ --key-vault-id /subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.KeyVault/vaults/$AKV_NAME참고
Istio CA에서 생성된 자체 서명 루트 인증서를 사용하는 Istio 추가 기능이 있는 기존 클러스터의 경우 플러그 인 CA로 전환하는 것이 지원되지 않습니다. 플러그 인 CA 입력을 통과하려면 먼저 이러한 클러스터에서 메시를 사용하지 않도록 설정한 다음 위 명령을 사용하여 다시 사용하도록 설정해야 합니다.
Istio 컨트롤 플레인이 사용자 지정 인증 기관을 선택했는지 확인합니다.
kubectl logs deploy/istiod-asm-1-17 -c discovery -n aks-istio-system | grep -v validationController | grep x509예상 출력은 다음과 유사해야 합니다.
2023-11-06T15:49:15.493732Z info x509 cert - Issuer: "CN=Intermediate CA - A1,O=Istio,L=cluster-A1", Subject: "", SN: e191d220af347c7e164ec418d75ed19e, NotBefore: "2023-11-06T15:47:15Z", NotAfter: "2033-11-03T15:49:15Z" 2023-11-06T15:49:15.493764Z info x509 cert - Issuer: "CN=Root A,O=Istio", Subject: "CN=Intermediate CA - A1,O=Istio,L=cluster-A1", SN: 885034cba2894f61036f2956fd9d0ed337dc636, NotBefore: "2023-11-04T01:40:02Z", NotAfter: "2033-11-01T01:40:02Z" 2023-11-06T15:49:15.493795Z info x509 cert - Issuer: "CN=Root A,O=Istio", Subject: "CN=Root A,O=Istio", SN: 18e2ee4089c5a7363ec306627d21d9bb212bed3e, NotBefore: "2023-11-04T01:38:27Z", NotAfter: "2033-11-01T01:38:27Z"
인증 기관 회전
보안이나 정책상의 이유로 인증 기관을 주기적으로 회전해야 할 수도 있습니다. 이 섹션에서는 중간 CA 및 루트 CA 회전 시나리오를 처리하는 방법을 안내합니다.
중간 인증 기관 회전
루트 CA를 동일하게 유지하면서 중간 CA를 회전할 수 있습니다. Azure Key Vault 리소스의 비밀을 새 인증서 및 키 파일로 업데이트합니다.
az keyvault secret set --vault-name $AKV_NAME --name root-cert --file <path-to-folder/root-cert.pem> az keyvault secret set --vault-name $AKV_NAME --name ca-cert --file <path-to-folder/ca-cert.pem> az keyvault secret set --vault-name $AKV_NAME --name ca-key --file <path-to-folder/ca-key.pem> az keyvault secret set --vault-name $AKV_NAME --name cert-chain --file <path/cert-chain.pem>--rotation-poll-interval의 기간 동안 기다리세요. Azure Key Vault 리소스에서 업데이트된 새 중간 CA를 기반으로 클러스터에서 인증서가 새로 고쳐졌는지 확인합니다.kubectl logs deploy/istiod-asm-1-17 -c discovery -n aks-istio-system | grep -v validationController예상 출력은 다음과 유사해야 합니다.
2023-11-07T06:16:21.091844Z info Update Istiod cacerts 2023-11-07T06:16:21.091901Z info Using istiod file format for signing ca files 2023-11-07T06:16:21.354423Z info Istiod has detected the newly added intermediate CA and updated its key and certs accordingly 2023-11-07T06:16:21.354910Z info x509 cert - Issuer: "CN=Intermediate CA - A2,O=Istio,L=cluster-A2", Subject: "", SN: b2753c6a23b54d8364e780bf664672ce, NotBefore: "2023-11-07T06:14:21Z", NotAfter: "2033-11-04T06:16:21Z" 2023-11-07T06:16:21.354967Z info x509 cert - Issuer: "CN=Root A,O=Istio", Subject: "CN=Intermediate CA - A2,O=Istio,L=cluster-A2", SN: 17f36ace6496ac2df88e15878610a0725bcf8ae9, NotBefore: "2023-11-04T01:40:22Z", NotAfter: "2033-11-01T01:40:22Z" 2023-11-07T06:16:21.355007Z info x509 cert - Issuer: "CN=Root A,O=Istio", Subject: "CN=Root A,O=Istio", SN: 18e2ee4089c5a7363ec306627d21d9bb212bed3e, NotBefore: "2023-11-04T01:38:27Z", NotAfter: "2033-11-01T01:38:27Z" 2023-11-07T06:16:21.355012Z info Istiod certificates are reloaded워크로드는 기본적으로 24시간 동안 유효한 Istio 컨트롤 플레인으로부터 인증서를 받습니다. Pod를 다시 시작하지 않으면 모든 워크로드가 24시간 내에 새 중간 CA를 기반으로 새 리프 인증서를 가져옵니다. 이러한 모든 워크로드가 새 중간 CA에서 즉시 새 리프 인증서를 가져오도록 하려면 워크로드를 다시 시작해야 합니다.
kubectl rollout restart deployment <deployment name> -n <deployment namespace>
루트 인증 기관 회전
이전 인증서와 새 루트 인증서가 연결된 루트 인증서 파일로 Azure Key Vault 비밀을 업데이트해야 합니다.
az keyvault secret set --vault-name $AKV_NAME --name root-cert --file <path-to-folder/root-cert.pem> az keyvault secret set --vault-name $AKV_NAME --name ca-cert --file <path-to-folder/ca-cert.pem> az keyvault secret set --vault-name $AKV_NAME --name ca-key --file <path-to-folder/ca-key.pem> az keyvault secret set --vault-name $AKV_NAME --name cert-chain --file <path/cert-chain.pem>root-cert.pem의 콘텐츠는 다음 형식을 따릅니다.-----BEGIN CERTIFICATE----- <contents of old root certificate> -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- <contents of new root certificate> -----END CERTIFICATE-----인증서가 클러스터에 동기화되면
istiod로그를 확인합니다.kubectl logs deploy/istiod-asm-1-17 -c discovery -n aks-istio-system예상 출력:
2023-11-07T06:42:00.287916Z info Updating new ROOT-CA 2023-11-07T06:42:00.287928Z info update root cert and generate new dns certs 2023-11-07T06:42:00.288254Z info Update trust anchor with new root cert 2023-11-07T06:42:00.288279Z info trustBundle updating Source IstioCA with certs 2023-11-07T06:42:00.288298Z info Istiod has detected the newly added intermediate CA and updated its key and certs accordingly 2023-11-07T06:42:00.288303Z info Istiod certificates are reloaded24시간(리프 인증서 유효성의 기본 시간) 동안 기다리거나 모든 워크로드를 강제로 다시 시작해야 합니다. 이렇게 하면 모든 워크로드가 mTLS 확인을 위해 이전 인증 기관과 새 인증 기관을 모두 인식합니다.
kubectl rollout restart deployment <deployment name> -n <deployment namespace>이제 새 CA(이전 CA 제외)로만 Azure Key Vault 비밀을 업데이트할 수 있습니다.
az keyvault secret set --vault-name $AKV_NAME --name root-cert --file <path-to-folder/root-cert.pem> az keyvault secret set --vault-name $AKV_NAME --name ca-cert --file <path-to-folder/ca-cert.pem> az keyvault secret set --vault-name $AKV_NAME --name ca-key --file <path-to-folder/ca-key.pem> az keyvault secret set --vault-name $AKV_NAME --name cert-chain --file <path/cert-chain.pem>인증서가 클러스터에 동기화되면
istiod로그를 확인합니다.kubectl logs deploy/istiod-asm-1-17 -c discovery -n aks-istio-system | grep -v validationController예상 출력:
2023-11-07T08:01:17.780299Z info x509 cert - Issuer: "CN=Intermediate CA - B1,O=Istio,L=cluster-B1", Subject: "", SN: 1159747c72cc7ac7a54880cd49b8df0a, NotBefore: "2023-11-07T07:59:17Z", NotAfter: "2033-11-04T08:01:17Z" 2023-11-07T08:01:17.780330Z info x509 cert - Issuer: "CN=Root B,O=Istio", Subject: "CN=Intermediate CA - B1,O=Istio,L=cluster-B1", SN: 2aba0c438652a1f9beae4249457023013948c7e2, NotBefore: "2023-11-04T01:42:12Z", NotAfter: "2033-11-01T01:42:12Z" 2023-11-07T08:01:17.780345Z info x509 cert - Issuer: "CN=Root B,O=Istio", Subject: "CN=Root B,O=Istio", SN: 3f9da6ddc4cb03749c3f43243a4b701ce5eb4e96, NotBefore: "2023-11-04T01:41:54Z", NotAfter: "2033-11-01T01:41:54Z"이 문서에 표시된 출력 예에서 루트 A(추가 기능을 사용하도록 설정할 때 사용됨)에서 루트 B로 이동했음을 확인할 수 있습니다.