Aracılığıyla paylaş


Azure Kubernetes Service'te (AKS) Azure yönetilen diskleriyle kendi anahtarlarınızı getirme (KAG)

Azure, bekleyen yönetilen diskteki tüm verileri şifreler. Varsayılan olarak, veriler Microsoft tarafından yönetilen anahtarlarla şifrelenir. Şifreleme anahtarları üzerinde daha fazla denetim için, AKS kümelerinizin hem işletim sistemi hem de veri diskleri için bekleyen şifreleme için kullanılacak müşteri tarafından yönetilen anahtarlar sağlayabilirsiniz.

Linux ve Windows'ta müşteri tarafından yönetilen anahtarlar hakkında daha fazla bilgi edinin.

Önkoşullar

  • Yönetilen diskleri şifrelemek için Key Vault kullanırken Azure Key Vault için geçici silme ve temizleme korumasını etkinleştirmeniz gerekir.
  • Azure CLI sürüm 2.11.1 veya üzeri gerekir.
  • Veri diski şifrelemesi ve müşteri tarafından yönetilen anahtarlar Kubernetes 1.24 ve üzeri sürümlerde desteklenir.
  • Anahtarlarınızı düzenli aralıklarla döndürmeyi (değiştirmeyi) seçerseniz daha fazla bilgi için bkz . Müşteri tarafından yönetilen anahtarlar ve Azure yönetilen disk şifrelemesi.

Sınırlamalar

  • Bir işletim sistemi diskinin müşteri tarafından yönetilen anahtarlarla şifrelenmesi yalnızca AKS kümesi oluşturulurken etkinleştirilebilir.

  • Sanal düğümler desteklenmez.

  • Kısa ömürlü işletim sistemi disk özellikli düğüm havuzunu müşteri tarafından yönetilen anahtarlarla şifrelerken anahtarı Azure Key Vault'ta döndürmek istiyorsanız şunları yapmanız gerekir:

    • Düğüm havuzu sayısının ölçeğini 0'a düşür
    • Anahtarı döndürme
    • Düğüm havuzunun ölçeğini özgün sayıya kadar büyütün.

Azure Key Vault örneği oluşturma

Anahtarlarınızı depolamak için bir Azure Key Vault örneği kullanın. İsteğe bağlı olarak Azure portalını kullanarak Azure Key Vault ile müşteri tarafından yönetilen anahtarları yapılandırabilirsiniz

Yeni bir kaynak grubu oluşturun, ardından yeni bir Key Vault örneği oluşturun ve geçici silme ve temizleme korumasını etkinleştirin. Her komut için aynı bölge ve kaynak grubu adlarını kullandığınızdan emin olun.

# Optionally retrieve Azure region short names for use on upcoming commands
az account list-locations
# Create new resource group in a supported Azure region
az group create --location myAzureRegionName --name myResourceGroup

# Create an Azure Key Vault resource in a supported Azure region
az keyvault create --name myKeyVaultName --resource-group myResourceGroup --location myAzureRegionName  --enable-purge-protection true

DiskEncryptionSet örneği oluşturma

myKeyVaultName değerini anahtar kasanızın adıyla değiştirin. Aşağıdaki adımları tamamlamak için Azure Key Vault'ta depolanan bir anahtara da ihtiyacınız vardır. Mevcut Anahtarınızı önceki adımlarda oluşturduğunuz Key Vault'ta depolayın veya yeni bir anahtar oluşturup myKeyName değerini anahtarınızın adıyla değiştirin.

# Retrieve the Key Vault Id and store it in a variable
keyVaultId=$(az keyvault show --name myKeyVaultName --query "[id]" -o tsv)

# Retrieve the Key Vault key URL and store it in a variable
keyVaultKeyUrl=$(az keyvault key show --vault-name myKeyVaultName --name myKeyName --query "[key.kid]" -o tsv)

# Create a DiskEncryptionSet
az disk-encryption-set create --name myDiskEncryptionSetName --location myAzureRegionName --resource-group myResourceGroup --source-vault $keyVaultId --key-url $keyVaultKeyUrl

Önemli

DiskEncryptionSet'in AKS kümenizle aynı bölgede bulunduğundan ve AKS kümesi kimliğinin DiskEncryptionSet'e okuma erişimi olduğundan emin olun.

DiskEncryptionSet'e anahtar kasasına erişim verme

Önceki adımlarda oluşturduğunuz DiskEncryptionSet ve kaynak gruplarını kullanın ve DiskEncryptionSet kaynak erişimini Azure Key Vault'a verin.

# Retrieve the DiskEncryptionSet value and set a variable
desIdentity=$(az disk-encryption-set show --name myDiskEncryptionSetName --resource-group myResourceGroup --query "[identity.principalId]" -o tsv)

# Update security policy settings
az keyvault set-policy --name myKeyVaultName --resource-group myResourceGroup --object-id $desIdentity --key-permissions wrapkey unwrapkey get

Yeni bir AKS kümesi oluşturma ve işletim sistemi diskini şifreleme

Yeni bir kaynak grubu oluşturun veya diğer AKS kümelerini barındıran mevcut bir kaynak grubunu seçin, ardından anahtarınızı kullanarak ağa bağlı işletim sistemi disklerini veya kısa ömürlü işletim sistemi diskini kullanarak şifreleyin. Varsayılan olarak, bir küme mümkün olduğunda VM boyutu ve işletim sistemi disk boyutuyla birlikte kısa ömürlü işletim sistemi diski kullanır.

DiskEncryptionSet değerini almak ve bir değişken ayarlamak için aşağıdaki komutu çalıştırın:

diskEncryptionSetId=$(az disk-encryption-set show --name mydiskEncryptionSetName --resource-group myResourceGroup --query "[id]" -o tsv)

Küme için yeni bir kaynak grubu oluşturmak istiyorsanız aşağıdaki komutu çalıştırın:

az group create --name myResourceGroup --location myAzureRegionName

Anahtarınız ile şifrelenmiş ağa bağlı işletim sistemi disklerini kullanarak normal bir küme oluşturmak için bağımsız değişkenini --node-osdisk-type=Managed belirterek bunu yapabilirsiniz.

az aks create --name myAKSCluster --resource-group myResourceGroup --node-osdisk-diskencryptionset-id $diskEncryptionSetId --generate-ssh-keys --node-osdisk-type Managed

Anahtarınız ile şifrelenmiş kısa ömürlü işletim sistemi diskine sahip bir küme oluşturmak için bağımsız değişkenini --node-osdisk-type=Ephemeral belirterek bunu yapabilirsiniz. Varsayılan vm boyutu çok küçük olduğundan ve kısa ömürlü işletim sistemi diskini desteklemediğinden bağımsız değişkeni --node-vm-size de belirtmeniz gerekir.

az aks create --name myAKSCluster --resource-group myResourceGroup --node-osdisk-diskencryptionset-id $diskEncryptionSetId --generate-ssh-keys --node-osdisk-type Ephemeral --node-vm-size Standard_DS3_v2

Kümeye yeni düğüm havuzları eklendiğinde, oluşturma işlemi sırasında sağlanan müşteri tarafından yönetilen anahtar işletim sistemi diskini şifrelemek için kullanılır. Aşağıdaki örnekte kısa ömürlü işletim sistemi diski ile yeni bir düğüm havuzunun nasıl dağıtılacağı gösterilmektedir.

az aks nodepool add --cluster-name $CLUSTER_NAME --resource-group $RG_NAME --name $NODEPOOL_NAME --node-osdisk-type Ephemeral

AKS küme veri diskinizi şifreleme

Küme oluşturma sırasında zaten bir disk şifreleme kümesi sağladıysanız, veri disklerini aynı disk şifreleme kümesiyle şifrelemek varsayılan seçenektir. Bu nedenle, bu adım isteğe bağlıdır. Ancak, veri disklerini farklı bir disk şifreleme kümesiyle şifrelemek istiyorsanız bu adımları izleyebilirsiniz.

Önemli

Uygun AKS kimlik bilgilerine sahip olduğunuzdan emin olun. Yönetilen kimliğin diskencryptionset'in dağıtıldığı kaynak grubuna katkıda bulunan erişimine sahip olması gerekir. Aksi takdirde, yönetilen kimliğin izinlere sahip olmadığını belirten bir hata alırsınız.

AKS küme kimliğine diskencryptionset için Katkıda Bulunan rolü atamak için aşağıdaki komutları yürütebilirsiniz:

aksIdentity=$(az aks show --resource-group $RG_NAME --name $CLUSTER_NAME --query "identity.principalId")
az role assignment create --role "Contributor" --assignee $aksIdentity --scope $diskEncryptionSetId

Aşağıdaki bilgileri içeren byok-azure-disk.yaml adlı bir dosya oluşturun. myAzureSubscriptionId, myResourceGroup ve myDiskEncrptionSetName değerlerini değerlerinizle değiştirin ve yaml'yi uygulayın. DiskEncryptionSet'inizin dağıtıldığı kaynak grubunu kullandığınızdan emin olun.

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: byok
provisioner: disk.csi.azure.com # replace with "kubernetes.io/azure-disk" if aks version is less than 1.21
parameters:
  skuname: StandardSSD_LRS
  kind: managed
  diskEncryptionSetID: "/subscriptions/{myAzureSubscriptionId}/resourceGroups/{myResourceGroup}/providers/Microsoft.Compute/diskEncryptionSets/{myDiskEncryptionSetName}"

Ardından, AKS kümenizi güncelleştirmek için aşağıdaki komutları çalıştırın:

# Get credentials
az aks get-credentials --name myAksCluster --resource-group myResourceGroup --output table

# Update cluster
kubectl apply -f byok-azure-disk.yaml

Sonraki adımlar

AKS kümesi güvenliği için en iyi yöntemleri gözden geçirin