Delen via


Sluit CA-certificaten aan voor Istio-gebaseerde service mesh-add-on in Azure Kubernetes Service

In de op Istio gebaseerde service-mesh-invoegtoepassing voor Azure Kubernetes Service genereert de Istio-certificeringsinstantie (CA) standaard een zelfondertekend basiscertificaat en -sleutel en gebruikt deze om de workloadcertificaten te ondertekenen. Als u de basis-CA-sleutel wilt beveiligen, moet u een basis-CA gebruiken, die offline wordt uitgevoerd op een beveiligde computer. U kunt de basis-CA gebruiken om tussenliggende certificaten uit te geven aan de Istio CA's die in elk cluster worden uitgevoerd. Een Istio-CA kan workloadcertificaten ondertekenen met behulp van het door de beheerder opgegeven certificaat en sleutel en een door de beheerder opgegeven basiscertificaat distribueren naar de werkbelastingen als de basis van vertrouwen. In dit artikel wordt beschreven hoe u uw eigen certificaten en sleutels voor Istio-CA kunt gebruiken in de service mesh-invoegtoepassing op basis van Istio voor Azure Kubernetes Service.

Diagram met hoofd- en tussenliggende CA met Istio.

In dit artikel wordt beschreven hoe u de Istio-certificeringsinstantie kunt configureren met een basiscertificaat, handtekeningcertificaat en sleutel die als invoer worden geleverd met behulp van Azure Key Vault voor de op Istio gebaseerde service mesh-invoegtoepassing.

Voordat u begint

Azure CLI-versie controleren

Voor de add-on is versie 2.57.0 of hoger van Azure CLI geïnstalleerd. U kunt az --version uitvoeren om de versie te verifiëren. Zie [Azure CLI installeren][azure-cli-install] als u deze wilt installeren of upgraden.

Azure Key Vault instellen

  1. U hebt een Azure Key Vault-resource nodig om het certificaat en de sleutelinvoer op te geven aan de Istio-invoegtoepassing.

  2. U moet een basiscertificaat, tussenliggende certificaten, tussenliggende sleutel en de certificaatketen offline genereren. Stap 1-3 van hieruit bevat een voorbeeld van het genereren van deze bestanden.

  3. Geheimen maken in Azure Key Vault met behulp van de certificaten en sleutel:

    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>
    
  4. Schakel de Azure Key Vault-provider in voor het CSI-stuurprogramma voor het geheimarchief voor uw cluster:

    az aks enable-addons --addons azure-keyvault-secrets-provider --resource-group $RESOURCE_GROUP --name $CLUSTER
    

    Notitie

    Wanneer u certificaten roteert, kunt u bepalen hoe snel de geheimen worden gesynchroniseerd met het cluster door de --rotation-poll-interval-parameter van de Azure Key Vault Secrets Provider-add-on te gebruiken. Bijvoorbeeld: az aks addon update --resource-group $RESOURCE_GROUP --name $CLUSTER --addon azure-keyvault-secrets-provider --enable-secret-rotation --rotation-poll-interval 20s

  5. Als uw Key Vault Gebruikmaakt van Azure RBAC voor het machtigingsmodel, volgt u de instructies hier om een Azure-rol van Key Vault Secrets User toe te wijzen voor de door de gebruiker toegewezen beheerde identiteit van de invoegtoepassing. Als uw sleutelkluis gebruikmaakt van het machtigingsmodel voor kluistoegangsbeleid, kunt u ook de door de gebruiker toegewezen beheerde identiteit van de invoegtoepassing autoriseren voor toegang tot Azure Key Vault-resource met behulp van toegangsbeleid:

    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
    

Service mesh-invoegtoepassing op basis van Istio instellen met invoegtoepassings-CA-certificaten

  1. Schakel de Mesh-invoegtoepassing van de Istio-service in voor uw bestaande AKS-cluster terwijl u verwijst naar de Azure Key Vault-geheimen die u eerder hebt gemaakt:

    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
    

    Notitie

    Voor bestaande clusters met Istio-add-on die gebruikmaken van een zelfondertekend basiscertificaat dat is gegenereerd door de Istio CA, wordt het overschakelen naar de plugin-CA niet ondersteund. U moet eerst de mesh op deze clusters uitschakelen en deze vervolgens opnieuw inschakelen met het bovenstaande commando om de plugin CA-invoer door te sturen.

  2. Controleer of het Istio-controlevlak de aangepaste certificeringsinstantie heeft opgehaald.

    kubectl logs deploy/istiod-asm-1-17 -c discovery -n aks-istio-system | grep -v validationController | grep x509
    

    De verwachte uitvoer moet er ongeveer als volgt uitzien:

    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"
    

Rotatie van certificeringsinstantie

Mogelijk moet u de certificeringsinstanties regelmatig roteren om veiligheids- of beleidsredenen. In deze sectie wordt uitgelegd hoe u tussenliggende CA- en basis-CA-rotatiescenario's kunt afhandelen.

Tussenliggende rotatie van certificeringsinstantie

  1. U kunt de tussenliggende CA roteren terwijl u de basis-CA hetzelfde houdt. Werk de geheimen in de Azure Key Vault-resource bij met het nieuwe certificaat en de sleutelbestanden:

    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>
    
  2. Wacht de tijdsduur van --rotation-poll-interval af. Controleer of de certificaten zijn vernieuwd op het cluster op basis van de nieuwe tussenliggende CA die is bijgewerkt op de Azure Key Vault-resource:

    kubectl logs deploy/istiod-asm-1-17 -c discovery -n aks-istio-system | grep -v validationController
    

    De verwachte uitvoer moet er ongeveer als volgt uitzien:

    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
    
  3. De workloads ontvangen standaard certificaten van het Istio-besturingsvlak die standaard 24 uur geldig zijn. Als u de pods niet opnieuw opstart, verkrijgen alle workloads binnen 24 uur nieuwe leaf-certificaten op basis van de nieuwe tussenliggende CA. Als u wilt afdwingen dat al deze werkbelastingen direct nieuwe leaf-certificaten verkrijgen van de nieuwe tussenliggende CA, moet u de werkbelastingen opnieuw starten.

    kubectl rollout restart deployment <deployment name> -n <deployment namespace>
    

Rotatie van basiscertificeringsinstantie

  1. U moet Azure Key Vault-geheimen bijwerken met het basiscertificaatbestand met de samenvoeging van het oude en de nieuwe basiscertificaten:

    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>
    

    De inhoud van root-cert.pem volgt dit formaat:

    -----BEGIN CERTIFICATE-----
    <contents of old root certificate>
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    <contents of new root certificate>
    -----END CERTIFICATE-----
    

    Controleer istiod de logboeken zodra de certificaten zijn gesynchroniseerd met het cluster.

    kubectl logs deploy/istiod-asm-1-17 -c discovery -n aks-istio-system 
    

    Verwachte uitvoer:

    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 reloaded
    
  2. U moet 24 uur wachten (de standaardtijd voor de geldigheid van het leaf-certificaat) of het opnieuw opstarten van alle workloads afdwingen. Op deze manier herkennen alle workloads zowel de oude als de nieuwe certificeringsinstanties voor mTLS-verificatie.

    kubectl rollout restart deployment <deployment name> -n <deployment namespace>
    
  3. U kunt nu Azure Key Vault-geheimen bijwerken met alleen de nieuwe CA (zonder de oude CA):

    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>
    

    Controleer istiod de logboeken zodra de certificaten zijn gesynchroniseerd met het cluster.

    kubectl logs deploy/istiod-asm-1-17 -c discovery -n aks-istio-system | grep -v validationController
    

    Verwachte uitvoer:

    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"
    

    In de voorbeelduitvoer die in dit artikel wordt weergegeven, kunt u zien dat we zijn gegaan van Root A (gebruikt bij het inschakelen van de add-on) naar Root B.