Azure Kubernetes Service (AKS) kümelerinde KMS veri şifrelemesini etkinleştirme (Önizleme)

Bu makalede, Azure Kubernetes Service'te (AKS) Kubernetes gizli dizileri için Anahtar Yönetimi Hizmeti (KMS) veri şifrelemesini etkinleştirme adımları gösterilmektedir. KMS şifrelemesi, Azure Key Vault anahtarlarını kullanarak etcd'de depolanan Kubernetes gizli dizilerini şifreler.

AKS iki anahtar yönetimi seçeneğini destekler:

  • Platform tarafından yönetilen anahtarlar (PMK):AKS, şifreleme anahtarlarını otomatik olarak oluşturur ve yönetir. Bu seçenek, otomatik anahtar döndürme ile en basit kurulumu sağlar.
  • Müşteri tarafından yönetilen anahtarlar (CMK):Kendi Azure Key Vault ve şifreleme anahtarlarınızı oluşturup yönetirsiniz. Bu seçenek, anahtar yaşam döngüsü üzerinde tam denetim sağlar ve müşteri tarafından yönetilen anahtarları zorunlu hale getiren uyumluluk gereksinimlerini karşılar.

Şifreleme kavramları ve anahtar seçenekleri hakkında daha fazla bilgi için AKS için beklemede veri şifreleme kavramları bölümüne bakın.

Önemli

AKS önizleme özellikleri self servis ve kabul temelinde kullanılabilir. Önizlemeler "olduğu gibi" ve "mevcut olduğu şekilde" sağlanmakta olup, hizmet seviyesi anlaşmalarına ve sınırlı garantilere dahil edilmemektedir. AKS önizlemeleri, müşteri desteği ekibi tarafından maksimum çaba gösterilerek kısmen ele alınmaktadır. Bu nedenle, bu özellikler üretim kullanımı için tasarlanmamıştır. Daha fazla bilgi için aşağıdaki destek makalelerine bakın:

Önkoşullar

  • Bu makale, Azure CLI'nın 2.73.0 veya sonraki bir sürümünü gerektirir. Azure Cloud Shell kullanıyorsanız en son sürüm zaten orada yüklüdür.
  • Azure CLI uzantısı sürüm aks-preview veya üzeri gerekir.
    • Eğer aks-preview uzantısına henüz sahip değilseniz, az extension add komutunu kullanarak yükleyin.
      az extension add --name aks-preview
      
    • Uzantıya aks-preview zaten sahipseniz, komutunu kullanarak en son sürüme sahip olduğunuzdan emin olmak için uzantıyı güncelleştirin az extension update .
      az extension update --name aks-preview
      
  • kubectl CLI aracı yüklü.

Özellik bayrağını kaydetme

KMS veri şifrelemesini platform tarafından yönetilen anahtarlarla kullanmak için özellik bayrağını KMSPMKPreview aboneliğinize kaydedin.

  1. komutunu kullanarak özellik bayrağını az feature register kaydedin.

    az feature register --namespace Microsoft.ContainerService --name KMSPMKPreview
    
  2. komutunu kullanarak az feature show kayıt durumunu doğrulayın. Durumun Kayıtlı olarak gösterilmesi birkaç dakika sürer.

    az feature show --namespace Microsoft.ContainerService --name KMSPMKPreview
    
  3. Durum Kayıtlı olarak gösterildiğinde komutunu kullanarak Microsoft.ContainerService kaynak sağlayıcısının kaydını yenileyin az provider register .

    az provider register --namespace Microsoft.ContainerService
    

Ortam değişkenlerini ayarlama

Dağıtımınız için ortam değişkenlerini ayarlayın. Yer tutucu değerlerini kendi değerlerinizle değiştirin.

# Set environment variables
export SUBSCRIPTION_ID="<your-subscription-id>"
export RESOURCE_GROUP="<your-resource-group>"
export LOCATION="<your-location>"
export CLUSTER_NAME="<your-cluster-name>"

# Set subscription
az account set --subscription $SUBSCRIPTION_ID

# Create resource group if it doesn't exist
az group create --name $RESOURCE_GROUP --location $LOCATION

Platform tarafından yönetilen anahtar şifrelemesini etkinleştirme

Platform tarafından yönetilen anahtarlarla AKS, Azure Key Vault ve şifreleme anahtarlarını otomatik olarak oluşturur ve yönetir. Anahtar döndürme, platform tarafından otomatik olarak işlenir.

Platform tarafından yönetilen anahtarlarla yeni bir AKS kümesi oluşturma

Platform tarafından yönetilen anahtarları kullanarak KMS şifrelemesi ile yeni bir AKS kümesi oluşturun.

az aks create \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kubernetes-version 1.33.0 \
    --kms-infrastructure-encryption Enabled \
    --generate-ssh-keys

Mevcut bir kümede platform tarafından yönetilen anahtarları etkinleştirme

Mevcut aks kümesinde platform tarafından yönetilen anahtarlarla KMS şifrelemesini etkinleştirin.

Uyarı

Kümenin Kubernetes sürüm 1.33 veya üzerini çalıştırıyor olması gerekir.

az aks update \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kms-infrastructure-encryption Enabled

KMS yapılandırmasını doğrulama

KMS şifrelemesini etkinleştirdikten sonra yapılandırmayı doğrulayın.

az aks show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --query 'securityProfile'

Çıkış KMS yapılandırmasını içerir:

{
    "kubernetesResourceObjectEncryptionProfile": {
        "infrastructureEncryption": "Enabled"
    }
}

Müşteri yönetimli anahtar şifrelemesini gizli anahtar kasasıyla etkinleştirme

Gelişmiş güvenlik için, genel ağ erişiminin devre dışı bırakıldığı bir özel anahtar kasası kullanabilirsiniz. AKS, güvenilir hizmetler güvenlik duvarı istisnası aracılığıyla özel anahtar kasasına erişir. Bu bölümde, müşteri tarafından yönetilen anahtarların özel bir anahtar kasasıyla nasıl yapılandırılacağı gösterilmektedir.

Güvenilen hizmetlerin erişimine sahip bir anahtar kasası ve anahtar oluşturun

Uyarı

Bu bölümde başlangıçta genel ağ erişimine sahip bir anahtar kasası oluşturma ve ardından güvenilen hizmetlerle güvenlik duvarını atlama özelliğini etkinleştirme gösterilmektedir. Bu yaklaşım yalnızca açıklayıcı amaçlar içindir. Üretim ortamlarında, başlangıçtan itibaren anahtar kasanızı özel olarak oluşturup yönetmeniz gerekir. Özel anahtar kasalarını yönetme yönergeleri için bkz. Azure Key Vault ağ güvenliği.

  1. Azure RBAC'nin etkinleştirildiği bir anahtar kasası oluşturun.

    export KEY_VAULT_NAME="<your-key-vault-name>"
    
    az keyvault create \
        --name $KEY_VAULT_NAME \
        --resource-group $RESOURCE_GROUP \
        --enable-rbac-authorization true \
        --public-network-access Enabled
    
    # Get the key vault resource ID
    export KEY_VAULT_RESOURCE_ID=$(az keyvault show --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --query id -o tsv)
    
  2. Anahtar oluşturmak için kendinize Key Vault Şifreleme Yetkilisi rolünü atayın.

    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. Anahtar kasasında bir anahtar oluşturun. encrypt ve decrypt anahtar işlemlerinin etkinleştirildiğinden emin olun.

    export KEY_NAME="<your-key-name>"
    
    az keyvault key create --name $KEY_NAME --vault-name $KEY_VAULT_NAME
    
    # Get the key ID (without version for automatic rotation)
    export KEY_ID=$(az keyvault key show --name $KEY_NAME --vault-name $KEY_VAULT_NAME --query 'key.kid' -o tsv)
    export KEY_ID_NO_VERSION=$(echo $KEY_ID | sed 's|/[^/]*$||')
    
  4. Anahtar kasası güvenlik duvarını güvenilir hizmetleri aşma ile etkinleştirin.

    az keyvault update \
        --name $KEY_VAULT_NAME \
        --resource-group $RESOURCE_GROUP \
        --default-action Deny \
        --bypass AzureServices
    

    --default-action Deny parametresi genel ağ erişimini engeller ve --bypass AzureServices parametresi güvenilen Azure hizmetlerinin (AKS dahil) anahtar kasasına erişmesine izin verir.

Kullanıcının atadığı yönetilen kimliği oluşturun

  1. Küme için kullanıcı tarafından atanan bir yönetilen kimlik oluşturun.

    export IDENTITY_NAME="<your-identity-name>"
    
    az identity create --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP
    
    # Get the identity details
    export IDENTITY_OBJECT_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'principalId' -o tsv)
    export IDENTITY_RESOURCE_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'id' -o tsv)
    
  2. Gerekli rolleri yönetilen kimliğe atayın.

    # Assign Key Vault Crypto User role for encrypt/decrypt operations
    az role assignment create \
        --role "Key Vault Crypto User" \
        --assignee-object-id $IDENTITY_OBJECT_ID \
        --assignee-principal-type "ServicePrincipal" \
        --scope $KEY_VAULT_RESOURCE_ID
    
    # Assign Key Vault Contributor role for key management
    az role assignment create \
        --role "Key Vault Contributor" \
        --assignee-object-id $IDENTITY_OBJECT_ID \
        --assignee-principal-type "ServicePrincipal" \
        --scope $KEY_VAULT_RESOURCE_ID
    

Müşteri tarafından yönetilen anahtarlarla yeni bir AKS kümesi oluşturma (özel)

Özel anahtar kasasıyla müşteri tarafından yönetilen anahtarları kullanarak KMS (Anahtar Yönetim Hizmeti) şifrelemesi ile yeni bir AKS kümesi oluşturun.

az aks create \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kubernetes-version 1.33.0 \
    --kms-infrastructure-encryption Enabled \
    --enable-azure-keyvault-kms \
    --azure-keyvault-kms-key-id $KEY_ID_NO_VERSION \
    --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \
    --azure-keyvault-kms-key-vault-network-access Private \
    --assign-identity $IDENTITY_RESOURCE_ID \
    --generate-ssh-keys

Mevcut bir kümede müşteri tarafından yönetilen anahtarları etkinleştirme (özel)

Mevcut AKS kümesinde özel bir anahtar kasası kullanarak müşteri tarafından yönetilen anahtarlarla KMS şifrelemesini etkinleştirin.

Uyarı

Kümenin Kubernetes sürüm 1.33 veya üzerini çalıştırıyor olması gerekir.

az aks update \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kms-infrastructure-encryption Enabled \
    --enable-azure-keyvault-kms \
    --azure-keyvault-kms-key-id $KEY_ID_NO_VERSION \
    --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \
    --azure-keyvault-kms-key-vault-network-access Private \
    --assign-identity $IDENTITY_RESOURCE_ID

KMS yapılandırmasını doğrulama

KMS şifrelemesini etkinleştirdikten sonra yapılandırmayı doğrulayın.

az aks show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --query 'securityProfile'

Çıkış KMS yapılandırmasını içerir:

{
    "azureKeyVaultKms": {
        "enabled": true,
        "keyId": "https://<key-vault-name>.vault.azure.net/keys/<key-name>",
        "keyVaultNetworkAccess": "Private",
        "keyVaultResourceId": "<key-vault-resource-id>"
    },
    "kubernetesResourceObjectEncryptionProfile": {
        "infrastructureEncryption": "Enabled"
    }
}

Açık anahtar kasasıyla müşteri tarafından yönetilen anahtar şifrelemesini etkinleştirme

Müşteri tarafından yönetilen anahtarlarla kendi Azure Key Vault ve şifreleme anahtarlarınızı oluşturup yönetirsiniz. Bu bölümde, müşteri tarafından yönetilen anahtarların ortak anahtar kasasıyla nasıl yapılandırılır gösterilmektedir.

Anahtar kasası ve anahtar oluştur

  1. Azure RBAC'nin etkinleştirildiği bir anahtar kasası oluşturun.

    export KEY_VAULT_NAME="<your-key-vault-name>"
    
    az keyvault create \
        --name $KEY_VAULT_NAME \
        --resource-group $RESOURCE_GROUP \
        --enable-rbac-authorization true \
        --public-network-access Enabled
    
    # Get the key vault resource ID
    export KEY_VAULT_RESOURCE_ID=$(az keyvault show --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --query id -o tsv)
    
  2. Anahtar oluşturmak için kendinize Key Vault Şifreleme Yetkilisi rolünü atayın.

    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. Anahtar kasasında bir anahtar oluşturun. encrypt ve decrypt anahtar işlemlerinin etkinleştirildiğinden emin olun.

    export KEY_NAME="<your-key-name>"
    
    az keyvault key create --name $KEY_NAME --vault-name $KEY_VAULT_NAME
    
    # Get the key ID (without version for automatic rotation)
    export KEY_ID=$(az keyvault key show --name $KEY_NAME --vault-name $KEY_VAULT_NAME --query 'key.kid' -o tsv)
    export KEY_ID_NO_VERSION=$(echo $KEY_ID | sed 's|/[^/]*$||')
    

Kullanıcının atadığı yönetilen kimliği oluşturun

  1. Küme için kullanıcı tarafından atanan bir yönetilen kimlik oluşturun.

    export IDENTITY_NAME="<your-identity-name>"
    
    az identity create --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP
    
    # Get the identity details
    export IDENTITY_OBJECT_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'principalId' -o tsv)
    export IDENTITY_RESOURCE_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'id' -o tsv)
    
  2. Gerekli rolleri yönetilen kimliğe atayın.

    # Assign Key Vault Crypto User role for encrypt/decrypt operations
    az role assignment create \
        --role "Key Vault Crypto User" \
        --assignee-object-id $IDENTITY_OBJECT_ID \
        --assignee-principal-type "ServicePrincipal" \
        --scope $KEY_VAULT_RESOURCE_ID
    
    # Assign Key Vault Contributor role for key management
    az role assignment create \
        --role "Key Vault Contributor" \
        --assignee-object-id $IDENTITY_OBJECT_ID \
        --assignee-principal-type "ServicePrincipal" \
        --scope $KEY_VAULT_RESOURCE_ID
    

Müşteri tarafından yönetilen anahtarlarla yeni bir AKS kümesi oluşturma

Müşteri tarafından yönetilen anahtarları kullanarak KMS şifrelemesi ile yeni bir AKS kümesi oluşturun.

az aks create \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kubernetes-version 1.33.0 \
    --kms-infrastructure-encryption Enabled \
    --enable-azure-keyvault-kms \
    --azure-keyvault-kms-key-id $KEY_ID_NO_VERSION \
    --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \
    --azure-keyvault-kms-key-vault-network-access Public \
    --assign-identity $IDENTITY_RESOURCE_ID \
    --generate-ssh-keys

Mevcut bir kümede müşteri tarafından yönetilen anahtarları etkinleştirme

Mevcut aks kümesinde müşteri tarafından yönetilen anahtarlarla KMS şifrelemesini etkinleştirin.

Uyarı

Kümenin Kubernetes sürüm 1.33 veya üzerini çalıştırıyor olması gerekir.

az aks update \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kms-infrastructure-encryption Enabled \
    --enable-azure-keyvault-kms \
    --azure-keyvault-kms-key-id $KEY_ID_NO_VERSION \
    --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \
    --azure-keyvault-kms-key-vault-network-access Public \
    --assign-identity $IDENTITY_RESOURCE_ID

KMS yapılandırmasını doğrulama

KMS şifrelemesini etkinleştirdikten sonra yapılandırmayı doğrulayın.

az aks show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --query 'securityProfile'

Çıkış KMS yapılandırmasını içerir:

{
    "azureKeyVaultKms": {
        "enabled": true,
        "keyId": "https://<key-vault-name>.vault.azure.net/keys/<key-name>",
        "keyVaultNetworkAccess": "Public",
        "keyVaultResourceId": "<key-vault-resource-id>"
    },
    "kubernetesResourceObjectEncryptionProfile": {
        "infrastructureEncryption": "Enabled"
    }
}

Anahtar yönetimi seçenekleri arasında geçiş yapma

Platform tarafından yönetilen anahtarlar ile müşteri tarafından yönetilen anahtarlar arasında geçiş yapabilirsiniz.

Platform tarafından yönetilen anahtarlardan müşteri tarafından yönetilen anahtarlara geçiş

Platform tarafından yönetilen anahtarlardan müşteri tarafından yönetilen anahtarlara geçiş yapmak için önce müşteri tarafından yönetilen anahtarlar bölümünde açıklandığı gibi anahtar kasasını, anahtarı ve yönetilen kimliği ayarlayın, ardından güncelleştirme komutunu çalıştırın:

az aks update \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kms-infrastructure-encryption Enabled \
    --enable-azure-keyvault-kms \
    --azure-keyvault-kms-key-id $KEY_ID_NO_VERSION \
    --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \
    --azure-keyvault-kms-key-vault-network-access Public \
    --assign-identity $IDENTITY_RESOURCE_ID

Müşteri tarafından yönetilen anahtarlardan platform tarafından yönetilen anahtarlara geçiş

Müşteri tarafından yönetilen anahtarlardan platform tarafından yönetilen anahtarlara geçiş yapmak için:

az aks update \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kms-infrastructure-encryption Enabled \
    --disable-azure-keyvault-kms

Anahtar döndürme

KMS veri şifrelemesi ile anahtar döndürme, anahtar yönetimi seçeneğinize bağlı olarak farklı şekilde işlenir:

  • Platform tarafından yönetilen anahtarlar: Anahtar döndürme otomatiktir. Eylem gerekmez.
  • Müşteri tarafından yönetilen anahtarlar: Azure Key Vault'ta anahtar sürümünü döndürdüğünüzde, KMS denetleyicisi döndürmeyi düzenli aralıklarla algılar (6 saatte bir) ve yeni anahtar sürümünü kullanır.

Uyarı

Eski KMS deneyiminden farklı olarak, bu yeni uygulamayla anahtar döndürmeden sonra gizli dizileri el ile yeniden şifrelemeniz gerekmez. Platform bunu otomatik olarak işler.