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
Azure Kubernetes Service