Přidání šifrování etcd pomocí služby správy klíčů (KMS) do clusteru Azure Kubernetes Service (AKS) (starší verze)

Důležité

Tento článek popisuje starší verzi prostředí Služby správy klíčů pro AKS. Pro nové clustery, na kterých běží Kubernetes verze 1.33 nebo novější, doporučujeme použít nové prostředí pro šifrování dat Služby správy klíčů , které nabízí klíče spravované platformou, klíče spravované zákazníkem s automatickým obměněm klíčů a zjednodušené prostředí konfigurace.

Koncepční informace o možnostech šifrování dat najdete v tématu Koncepty šifrování neaktivních uložených dat pro AKS.

V tomto článku se dozvíte, jak zapnout šifrování uložených dat v klidu pro veřejný nebo privátní trezor klíčů pomocí služby Azure Key Vault a pluginu Služby správy klíčů (KMS) v AKS. Modul plug-in KmS můžete použít k:

  • Pro šifrování atd. použijte klíč v trezoru klíčů.
  • Přineste si vlastní klíče.
  • Zajistěte šifrování dat na úložišti pro tajemství uložená v etcd.
  • Otočte klíče v trezoru klíčů.

Další informace o používání Služby správy klíčů najdete v tématu Použití zprostředkovatele Služby správy klíčů pro šifrování dat.

Požadavky

Varování

Od 15. září 2024 už nebude Konnectivity podporována pro trezory privátních klíčů v nových předplatných nebo v těch, která tuto konfiguraci dosud nepoužívala. U předplatných, která aktuálně používají tuto konfiguraci nebo ji používali za posledních 60 dnů, podpora pokračuje až do konce životnosti AKS verze 1.30 pro podporu komunity.

KMS podporuje Konnectivity nebo API Server VNet Integration pro trezory veřejných klíčů.

Služba KMS podporuje API Server VNet Integration pro privátní i veřejné úložiště klíčů.

Můžete použít kubectl get pods -n kube-system k ověření výsledků a zobrazení, že konnectivity-agent pod běží. Pokud je pod spuštěný, cluster AKS používá Konnectivity. Pokud používáte integraci virtuální sítě serveru API, můžete spuštěním az aks show --resource-group <resource-group-name> --name <cluster-name> příkazu ověřit, že enableVnetIntegration je nastavení nastavené na true.

Omezení

Při integraci šifrování KMS etcd s AKS platí následující omezení:

  • Odstranění klíče, trezoru klíčů nebo přidružené identity se nepodporuje.
  • Šifrování KMS etcd nefunguje se spravovanou identitou přiřazenou systémem. Před zapnutím této funkce je nutné nastavit zásady přístupu trezoru klíčů. Spravovaná identita přiřazená systémem není k dispozici, dokud se cluster nevytvořil. Zvažte závislost cyklu.
  • Vzhledem k tomu, že brána firewall blokuje provoz z KMS pluginu do služby Key Vault, nejsou podporovány dva scénáře. Nejprve, ve službě Azure Key Vault není možné nastavit možnost firewallu Povolit veřejný přístup z konkrétních virtuálních sítí a IP adres. Za druhé, Azure Key Vault nejde nakonfigurovat pomocí zákazu veřejného přístupu , pokud není povolená integrace virtuální sítě API Serveru .
  • Maximální počet tajných kódů podporovaných clusterem se zapnutou službou KmS je 2 000. Je ale důležité si uvědomit, že Služba správy klíčů v2 není tímto omezením omezena a dokáže zpracovat vyšší počet tajných kódů.
  • Používání vlastního trezoru klíčů Azure (BYO) z jiného tenanta se nepodporuje.
  • Když je služba Správy klíčů zapnutá, nemůžete změnit přidružený režim trezoru klíčů (veřejný a soukromý). Pokud chcete aktualizovat režim trezoru klíčů, musíte nejdřív vypnout Službu správy klíčů a pak ho znovu zapnout.
  • Pokud má cluster zapnutou KMS a trezor privátních klíčů, musí použít tunel integrace VNet pro API Server. Nepodporuje se Konnectivity.
  • Použití rozhraní API škálovacích sad virtuálních počítačů ke škálování uzlů v clusteru dolů na nulu uvolní uzly. Cluster se pak zhroutí a stane se neobnovitelný.
  • Po vypnutí Služby správy klíčů nemůžete klíče odstranit ani vypršet jejich platnost. Takové chování by způsobilo, že server rozhraní API přestal fungovat.
  • Pro privátní cluster s povolenou službou KMS a integrací virtuální sítě, která používá trezor privátních klíčů, musí skupina zabezpečení sítě (NSG) povolit port TCP 443 ze serveru rozhraní API na IP adresu privátního koncového bodu trezoru privátních klíčů. Toto omezení je potřeba zvážit při použití jiných pravidel v síťové bezpečnostní skupině podsítě API nebo v síťové bezpečnostní skupině podsítě clusteru.

Vytvoření trezoru klíčů a klíče pro veřejný trezor klíčů

Následující části popisují, jak zapnout Službu správy klíčů pro veřejný trezor klíčů. Veřejný trezor klíčů můžete použít s řízením přístupu na základě role Azure (Azure RBAC) nebo bez.

Varování

Odstranění klíče nebo trezoru klíčů se nepodporuje a způsobí, že tajné kódy v clusteru nebudou obnovitelné.

Pokud potřebujete obnovit trezor klíčů nebo váš klíč, přečtěte si Správa obnovení služby Azure Key Vault pomocí funkce měkkého odstranění a ochrany před vymazáním.

  1. Vytvořte trezor klíčů pomocí Azure RBAC pomocí az keyvault create příkazu. Tento ukázkový příkaz také exportuje ID prostředku trezoru klíčů do proměnné prostředí.

    export KEY_VAULT_RESOURCE_ID=$(az keyvault create --name $KEY_VAULT --resource-group $RESOURCE_GROUP  --enable-rbac-authorization true --query id -o tsv)
    
  2. Přiřaďte si oprávnění k vytvoření klíče pomocí az role assignment create příkazu. Tento příklad přiřadí roli kryptografického důstojníka služby Key Vault přihlášeným uživatelům.

    az role assignment create --role "Key Vault Crypto Officer" --assignee-object-id $(az ad signed-in-user show --query id -o tsv) --assignee-principal-type "User" --scope $KEY_VAULT_RESOURCE_ID
    
  3. Vytvořte klíč pomocí az keyvault key create příkazu. Ujistěte se, že encrypt a decrypt klíčové operace jsou povoleny.

    az keyvault key create --name $KEY_NAME --vault-name $KEY_VAULT
    
  4. Získejte ID klíče a pomocí příkazu ho uložte jako proměnnou az keyvault key show prostředí.

    export KEY_ID=$(az keyvault key show --name $KEY_NAME --vault-name $KEY_VAULT --query 'key.kid' -o tsv)
    echo $KEY_ID
    

Vytvoření spravované identity přiřazené uživatelem pro veřejný trezor klíčů

  1. Vytvořte spravovanou identitu přiřazenou uživatelem pomocí příkazu az identity create.

    az identity create --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP
    
  2. Získejte ID objektu identity a pomocí příkazu ho uložte jako proměnnou az identity show prostředí.

    export IDENTITY_OBJECT_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'principalId' -o tsv)
    echo $IDENTITY_OBJECT_ID
    
  3. Získejte ID prostředku identity a pomocí příkazu ho az identity show uložte jako proměnnou prostředí.

    export IDENTITY_RESOURCE_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'id' -o tsv)
    echo $IDENTITY_RESOURCE_ID
    

Přiřazení oprávnění k dešifrování a šifrování veřejného trezoru klíčů

Následující části popisují, jak přiřadit dešifrovací a šifrovací oprávnění pro úložiště veřejných klíčů s Azure RBAC nebo bez něj.

  • Přiřaďte roli uživatele kryptografických služeb Key Vault, abyste mohli pomocí az role assignment create příkazu udělit dešifrovací a šifrovaná oprávnění.

    az role assignment create --role "Key Vault Crypto User" --assignee-object-id $IDENTITY_OBJECT_ID --assignee-principal-type "ServicePrincipal" --scope $KEY_VAULT_RESOURCE_ID
    

Povolení KMS pro úložiště veřejných klíčů v clusteru AKS

Následující části popisují, jak zapnout Službu správy klíčů pro veřejný trezor klíčů v novém nebo existujícím clusteru AKS.

Vytvoření clusteru AKS s trezorem veřejných klíčů a Službou správy klíčů

  • Vytvořte cluster AKS s úložištěm veřejných klíčů a Službou správy klíčů pomocí příkazu az aks create a parametrů --enable-azure-keyvault-kms, --azure-keyvault-kms-key-vault-network-access a --azure-keyvault-kms-key-id.

    az aks create \
        --name $CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP \
        --assign-identity $IDENTITY_RESOURCE_ID \
        --enable-azure-keyvault-kms \
        --azure-keyvault-kms-key-vault-network-access "Public" \
        --azure-keyvault-kms-key-id $KEY_ID \
        --generate-ssh-keys
    

Povolení veřejného trezoru klíčů a Služby správy klíčů v existujícím clusteru AKS

  1. Povolte KMS v trezoru veřejných klíčů v existujícím clusteru pomocí příkazu az aks update s parametry --enable-azure-keyvault-kms, --azure-keyvault-kms-key-vault-network-access a --azure-keyvault-kms-key-id.

    az aks update \
        --name $CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP \
        --enable-azure-keyvault-kms \
        --azure-keyvault-kms-key-vault-network-access "Public" \
        --azure-keyvault-kms-key-id $KEY_ID
    
  2. Aktualizujte všechny tajné kódy kubectl get secrets pomocí příkazu, abyste zajistili, že dříve vytvořené tajné kódy už nejsou šifrované. U větších clusterů můžete chtít rozdělit tajemství podle oboru názvů nebo vytvořit skript pro aktualizaci. Pokud předchozí příkaz pro aktualizaci Služby správy klíčů selže, spusťte následující příkaz, aby se zabránilo neočekávanému stavu modulu plug-in Služby správy klíčů.

    kubectl get secrets --all-namespaces -o json | kubectl replace -f -
    

    Při spuštění příkazu je následující chyba bezpečná pro ignorování:

    The object has been modified; please apply your changes to the latest version and try again.
    

Rotace existujících klíčů v klíčovém trezoru

Po změně ID klíče (včetně změny názvu klíče nebo verze klíče) můžete stávající klíče ve veřejném trezoru klíčů otočit.

Varování

Nezapomeňte aktualizovat všechny tajné kódy po obměně klíčů. Pokud neaktualizujete všechny tajné kódy, jsou tajné kódy nepřístupné, pokud dříve vytvořené klíče neexistují nebo už nefungují.

KMS používá současně dva klíče. Po obměně prvního klíče je potřeba zajistit, aby staré i nové klíče byly platné (nevypršela platnost) až do další obměna klíče. Po obměně druhého klíče je možné nejstarší klíč bezpečně odebrat nebo vypršet.

Po rotaci verze klíče Služby správy klíčů s novým keyId zkontrolujte securityProfile.azureKeyVaultKms.keyId v json prostředku AKS. Ujistěte se, že se používá nová verze klíče.

  1. Pomocí příkazu az aks update s parametry --enable-azure-keyvault-kms, --azure-keyvault-kms-key-vault-network-access a --azure-keyvault-kms-key-id můžete otočit existující klíče.

    az aks update \
        --name $CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP \
        --enable-azure-keyvault-kms \
        --azure-keyvault-kms-key-vault-network-access "Public" \
        --azure-keyvault-kms-key-id $NEW_KEY_ID
    
  2. Aktualizujte všechny tajné kódy kubectl get secrets pomocí příkazu, abyste zajistili, že dříve vytvořené tajné kódy už nejsou šifrované. U větších clusterů můžete chtít rozdělit tajemství podle oboru názvů nebo vytvořit skript pro aktualizaci. Pokud předchozí příkaz pro aktualizaci Služby správy klíčů selže, spusťte následující příkaz, aby se zabránilo neočekávanému stavu modulu plug-in Služby správy klíčů.

    kubectl get secrets --all-namespaces -o json | kubectl replace -f -
    

    Při spuštění příkazu je následující chyba bezpečná pro ignorování:

    The object has been modified; please apply your changes to the latest version and try again.
    

Vytvořte trezor klíčů a klíč pro privátní úložiště klíčů

Pokud pro privátní trezor klíčů zapnete Službu správy klíčů, AKS automaticky vytvoří privátní koncový bod a privátní propojení ve skupině prostředků uzlu. Úložiště klíčů má připojení privátního koncového bodu ke clusteru AKS.

Varování

Při používání privátního trezoru klíčů mějte na paměti následující informace:

  1. Pomocí příkazu s az keyvault create parametrem --public-network-access Disabled vytvořte privátní trezor klíčů.

    az keyvault create --name $KEY_VAULT --resource-group $RESOURCE_GROUP --public-network-access Disabled
    
  2. Vytvořte klíč pomocí az keyvault key create příkazu. Ujistěte se, že encrypt a decrypt klíčové operace jsou povoleny.

    az keyvault key create --name $KEY_NAME --vault-name $KEY_VAULT
    

Vytvoření spravované identity přiřazené uživatelem pro privátní trezor klíčů

  1. Vytvořte spravovanou identitu přiřazenou uživatelem pomocí příkazu az identity create.

    az identity create --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP
    
  2. Získejte ID objektu identity a pomocí příkazu ho uložte jako proměnnou az identity show prostředí.

    export IDENTITY_OBJECT_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'principalId' -o tsv)
    echo $IDENTITY_OBJECT_ID
    
  3. Získejte ID prostředku identity a pomocí příkazu ho az identity show uložte jako proměnnou prostředí.

    export IDENTITY_RESOURCE_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'id' -o tsv)
    echo $IDENTITY_RESOURCE_ID
    

Přiřazení oprávnění k dešifrování a šifrování privátního trezoru klíčů

Následující části popisují, jak přiřadit oprávnění dešifrovat a šifrovat k privátnímu klíčovému trezoru s nebo bez Azure RBAC.

  • Přiřaďte roli uživatele kryptografických služeb Key Vault, abyste mohli pomocí az role assignment create příkazu udělit dešifrovací a šifrovaná oprávnění.

    az role assignment create --role "Key Vault Crypto User" --assignee-object-id $IDENTITY_OBJECT_ID --assignee-principal-type "ServicePrincipal" --scope $KEY_VAULT_RESOURCE_ID
    

Pro trezory privátních klíčů se k vytvoření privátního propojení mezi privátním trezorem klíčů a clusterem vyžaduje role Přispěvatel služby Key Vault.

  • Pomocí příkazu az role assignment create přiřaďte roli Přispěvatel služby Key Vault.

    az role assignment create --role "Key Vault Contributor" --assignee-object-id $IDENTITY_OBJECT_ID --assignee-principal-type "ServicePrincipal" --scope $KEY_VAULT_RESOURCE_ID
    

Povolte KMS pro soukromé úložiště klíčů v clusteru AKS

Následující části popisují, jak zapnout Službu správy klíčů pro privátní trezor klíčů v novém nebo existujícím clusteru AKS.

Vytvoření clusteru AKS s trezorem privátních klíčů a Službou správy klíčů

  • Vytvořte cluster AKS s trezorem privátních klíčů a se službou správy klíčů KMS pomocí příkazu s parametry az aks create, --enable-azure-keyvault-kms, --azure-keyvault-kms-key-id a --azure-keyvault-kms-key-vault-network-access.

    az aks create \
        --name $CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP \
        --assign-identity $IDENTITY_RESOURCE_ID \
        --enable-azure-keyvault-kms \
        --azure-keyvault-kms-key-id $KEY_ID \
        --azure-keyvault-kms-key-vault-network-access "Private" \
        --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \
        --generate-ssh-keys
    

Aktualizace existujícího clusteru AKS, aby se zapnulo šifrování KMS etcd pro soukromý trezor klíčů.

  1. Povolte KMS v privátním trezoru klíčů v existujícím clusteru pomocí příkazu az aks update s parametry --enable-azure-keyvault-kms, --azure-keyvault-kms-key-id, --azure-keyvault-kms-key-vault-network-access a --azure-keyvault-kms-key-vault-resource-id.

    az aks update \
        --name $CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP \
        --enable-azure-keyvault-kms \
        --azure-keyvault-kms-key-id $KEY_ID \
        --azure-keyvault-kms-key-vault-network-access "Private" \
        --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID
    
  2. Aktualizujte všechny tajné kódy kubectl get secrets pomocí příkazu, abyste zajistili, že dříve vytvořené tajné kódy už nejsou šifrované. U větších clusterů můžete chtít rozdělit tajemství podle oboru názvů nebo vytvořit skript pro aktualizaci. Pokud předchozí příkaz pro aktualizaci Služby správy klíčů selže, spusťte následující příkaz, aby se zabránilo neočekávanému stavu modulu plug-in Služby správy klíčů.

    kubectl get secrets --all-namespaces -o json | kubectl replace -f -
    

    Při spuštění příkazu je následující chyba bezpečná pro ignorování:

    The object has been modified; please apply your changes to the latest version and try again.
    

Obnovení existujících klíčů v soukromém trezoru klíčů

Po změně ID klíče (včetně změny názvu klíče nebo verze klíče) můžete stávající klíče v trezoru privátních klíčů otočit.

Varování

Nezapomeňte aktualizovat všechny tajné kódy po obměně klíčů. Pokud neaktualizujete všechny tajné kódy, jsou tajné kódy nepřístupné, pokud dříve vytvořené klíče neexistují nebo už nefungují.

Po otočení klíče je předchozí klíč (klíč1) stále uložený v mezipaměti a neměl by být odstraněn. Pokud chcete předchozí klíč (klíč1) okamžitě odstranit, musíte klíč otočit dvakrát. Klíč2 a klíč3 se pak uloží do mezipaměti a klíč1 se dá odstranit, aniž by to mělo vliv na existující cluster.

Po rotaci verze klíče Služby správy klíčů s novým keyId zkontrolujte securityProfile.azureKeyVaultKms.keyId v json prostředku AKS. Ujistěte se, že se používá nová verze klíče.

  1. Otočení existujících klíčů v úložišti klíčů pomocí příkazu az aks update s parametry --enable-azure-keyvault-kms, --azure-keyvault-kms-key-id, --azure-keyvault-kms-key-vault-network-access a --azure-keyvault-kms-key-vault-resource-id.

    az aks update \
        --name $CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP  \
        --enable-azure-keyvault-kms \
        --azure-keyvault-kms-key-id $NEW_KEY_ID \
        --azure-keyvault-kms-key-vault-network-access "Private" \
        --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID
    
  2. Aktualizujte všechny tajné kódy kubectl get secrets pomocí příkazu, abyste zajistili, že dříve vytvořené tajné kódy už nejsou šifrované. U větších clusterů můžete chtít rozdělit tajemství podle oboru názvů nebo vytvořit skript pro aktualizaci. Pokud předchozí příkaz pro aktualizaci Služby správy klíčů selže, spusťte následující příkaz, aby se zabránilo neočekávanému stavu modulu plug-in Služby správy klíčů.

    kubectl get secrets --all-namespaces -o json | kubectl replace -f -
    

    Při spuštění příkazu je následující chyba bezpečná pro ignorování:

    The object has been modified; please apply your changes to the latest version and try again.
    

Zakázání Služby správy klíčů v clusteru AKS

  1. Před vypnutím Služby správy klíčů pomocí příkazu ověřte, že je služba Správy klíčů v clusteru povolená az aks list .

    az aks list --query "[].{Name:name, KmsEnabled:securityProfile.azureKeyVaultKms.enabled, KeyId:securityProfile.azureKeyVaultKms.keyId}" -o table
    
  2. Po potvrzení můžete Službu správy klíčů zakázat pomocí příkazu az aks update s parametrem --disable-azure-keyvault-kms.

    az aks update --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --disable-azure-keyvault-kms
    
  3. Aktualizujte všechny tajné kódy kubectl get secrets pomocí příkazu, abyste zajistili, že dříve vytvořené tajné kódy už nejsou šifrované. U větších clusterů můžete chtít rozdělit tajemství podle oboru názvů nebo vytvořit skript pro aktualizaci. Pokud předchozí příkaz pro aktualizaci Služby správy klíčů selže, spusťte následující příkaz, aby se zabránilo neočekávanému stavu modulu plug-in Služby správy klíčů.

    kubectl get secrets --all-namespaces -o json | kubectl replace -f -
    

    Při spuštění příkazu je následující chyba bezpečná pro ignorování:

    The object has been modified; please apply your changes to the latest version and try again.
    

Další kroky

Další informace o používání Služby správy klíčů s AKS najdete v následujících článcích: