Azure Elastik SAN için şifrelemeyi yapılandırma

Elastik SAN birimine yazılan tüm veriler, dinlenme hâlindeyken veri şifreleme anahtarı (DEK) ile şifrelenir. Azure, DEK'yi bir anahtar şifreleme anahtarı (KEK) ile şifrelemek için zarf şifrelemesi kullanır. Azure varsayılan olarak platform tarafından yönetilen bir KEK kullanır. Azure Key Vault'ta depolanan müşteri tarafından yönetilen anahtarı (CMK) kullanabilirsiniz.

Bu makalede, Azure Key Vault'ta CMK kullanarak Elastik SAN birim grubu için şifrelemeyi yapılandırma adımları gösterilmektedir.

Önkoşullar

  • Eğer bir Azure aboneliğiniz yoksa, başlamadan önce ücretsiz bir hesap oluşturun.

  • Bu makale, Azure CLI sürüm v2.83.0 veya üzerini gerektirir. Daha fazla bilgi için bkz. Azure CLI'yi yükleme. Sorunlar oluşursa aks-preview gibi uzantıları devre dışı bırakın. Uzantıları gerektiği gibi yükleyin veya güncelleştirin:

    • az extension add --upgrade --name k8s-extension
    • az extension add --upgrade --name elastic-san (Yalnızca elastik SAN)
  • Kubernetes komut satırı istemcisine ihtiyacınız vardır. kubectl Azure Cloud Shell kullanıyorsanız zaten yüklüdür. komutunu çalıştırarak az aks install-cli yerel olarak yükleyebilirsiniz.

  • Hedef bölgenizin Azure Container Storage bölgelerinde desteklenip desteklenmediğini denetleyin.

Anahtar kasasını yapılandır

Müşteri tarafından yönetilen anahtarları depolamak için yeni veya mevcut bir anahtar kasası kullanabilirsiniz. Şifrelenmiş kaynak ve anahtar kasası, aynı Microsoft Entra ID kiracısında farklı bölgelerde veya aboneliklerde bulunabilir. Daha fazla bilgi edinmek için bkz. Azure Key Vault'a Genel Bakış ve Azure Key Vault nedir?

Müşteri tarafından yönetilen anahtarlarla şifreleme, anahtar kasası için hem geçici silme hem de temizleme korumasının etkinleştirilmesini gerektirir. Soft delete, yeni bir anahtar kasası oluşturduğunuzda varsayılan olarak etkinleştirilir ve kapatılamaz. Anahtar kasasını oluştururken veya oluşturulduktan sonra temizleme korumasını etkinleştirebilirsiniz. Azure Elastik SAN şifrelemesi 2048, 3072 ve 4096 boyutlarında RSA anahtarlarını destekler.

Azure Key Vault, Azure rol tabanlı erişim denetimi (Azure RBAC) ile yetkilendirmeyi destekler. Microsoft, Anahtar Kasası erişim ilkeleri yerine Azure RBAC'i önerir. Daha fazla bilgi için bkz. Azure rol tabanlı erişim denetimi ile Key Vault anahtarlarına, sertifikalarına ve gizli dizilerine erişim sağlama.

Birim grubu KEK'leriniz için bir anahtar kasası hazırlayın:

  • Geçici silme ve temizleme koruması etkinleştirilmiş yeni bir anahtar kasası oluşturun veya mevcut bir anahtar kasası için temizleme korumasını etkinleştirin.
  • Anahtar izinleri veren bir Azure RBAC rolü oluşturun veya atayın: get, wrapKey ve unwrapKey.

Azure CLI kullanarak yeni bir anahtar kasası oluşturmak için az keyvault create komutunu çağırın. Aşağıdaki örnek geçici silme ve temizleme korumasının etkinleştirildiği yeni bir anahtar kasası oluşturur. Anahtar kasası izin modeli, Azure RBAC'yi kullanır. Yer tutucu değerlerini köşeli ayraç içindeki kendi değerlerinizle değiştirin.

az keyvault create --name <key-vault-name> --resource-group <resource-group-name> --location <location> --enable-purge-protection --retention-days 7

Mevcut bir anahtar kasasında silme korumasını etkinleştirmek için bkz: Azure Key Vault kurtarma genel bakış.

Kullanıcı tarafından atanan yönetilen bir kimlik oluşturun ve anahtar kasasına erişim izni verin.

AKS kümenizin yönetilen kaynak grubunda kullanıcı tarafından atanan bir yönetilen kimlik oluşturun:

az identity create --name <identity-name> --resource-group <node-resource-group>

Kimlik kimliklerini alın ve bunları değişkenlerde depolayın:

uai_id=$(az identity show --name <identity-name> --resource-group <node-resource-group> --query id -o tsv)
uai_principal_id=$(az identity show --ids "$uai_id" --query principalId -o tsv)

Elastik SAN birim grubu için müşteri tarafından yönetilen şifreleme anahtarlarını etkinleştirdiğinizde, anahtarı içeren anahtar kasasına erişimi yetkilendirmek için yönetilen bir kimlik belirtmeniz gerekir.

Anahtar kasanız erişim ilkeleri kullanıyorsa yönetilen kimlik için anahtar izinlerini ayarlayın. Kasanız Azure RBAC kullanıyorsa, bunun yerine eşdeğer bir rol atayın.

az keyvault set-policy --name <key-vault-name> --resource-group <resource-group-name> --object-id $uai_principal_id --key-permissions get wrapKey unwrapKey

Anahtar ekleme

Anahtarı eklemeden önce Key Vault Şifreleme Yetkilisi rolüne sahip olduğunuzdan emin olun.

Vault URI'sini alın ve bir değişkene kaydedin.

vault_uri=$(az keyvault show --name <key-vault-name> --resource-group <resource-group-name> --query "properties.vaultUri" -o tsv)

Şifreleme anahtarı oluşturma:

az keyvault key create --name <key-name> --vault-name <key-vault-name> --kty RSA --size 2048

StorageClass oluşturma

gibi storageclass.yamlbir YAML bildirim dosyası oluşturun. Önceki adımlarda yer alan adları ve değişkenleri kullanın.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: azuresan-csi-encrypted
provisioner: san.csi.azure.com
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true
parameters:
  encryption.keyvaulturi: "${vault_uri}"
  encryption.keyname: <key-name>
  encryption.identity: "${uai_id}"

StorageClass'ı oluşturmak için bildirimi uygulayın.

kubectl apply -f storageclass.yaml

Kalıcı birim talebi oluştur

gibi acstor-pvc.yamlbir YAML bildirim dosyası oluşturun.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-san-encrypted
spec:
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: azuresan-csi-encrypted

PVC'yi oluşturmak için manifesti uygulayın.

kubectl apply -f acstor-pvc.yaml

Bir pod dağıtımı gerçekleştir

gibi acstor-pod.yamlbir YAML bildirim dosyası oluşturun.

apiVersion: v1
kind: Pod
metadata:
  name: pod-san-encrypted
spec:
  nodeSelector:
    kubernetes.io/os: linux
  containers:
    - name: pod-san-encrypted
      image: mcr.microsoft.com/azurelinux/busybox:1.36
      command:
        - "/bin/sh"
        - "-c"
        - set -euo pipefail; trap exit TERM; while true; do echo "$(date)" >> /mnt/san/outfile; sleep 1; done
      volumeMounts:
        - name: persistent-storage-encrypted
          mountPath: /mnt/san
  volumes:
    - name: persistent-storage-encrypted
      persistentVolumeClaim:
        claimName: pvc-san-encrypted

Podu dağıtmak için bildirimi uygulayın.

kubectl apply -f acstor-pod.yaml

Bu örneğe benzer bir çıktı görmeniz gerekir:

pod/pod-san-encrypted created

Birim grubundaki şifrelemeyi doğrulayın

Kalıcı birimden (PV) Elastik SAN birim tutamacını alın:

kubectl get pv <pv-name> -o jsonpath='{.spec.csi.volumeHandle}'

Birim grubu ayrıntılarını almak için birim tutamacından kaynak grubu, Elastik SAN adı ve birim grubu adını kullanın:

az elastic-san volume-group show --resource-group <resource-group-name> --elastic-san-name <elastic-san-name> --name <volume-group-name> --output json

Şifrelenmiş birimde okuma ve yazma işlemlerini doğrulayın:

kubectl exec pod-san-encrypted -- sh -c "echo 'testing encrypted storage' > /mnt/san/test-encryption.txt && cat /mnt/san/test-encryption.txt"

Sonraki Adımlar