Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Gizli Dizi Deposu için Azure Key Vault Sağlayıcısı CSI Sürücüsü, Azure Key Vault'un bir CSI birimi aracılığıyla Kubernetes kümesiyle gizli dizi deposu olarak tümleştirilmesine olanak tanır. Azure Arc özellikli Kubernetes kümeleri için, gizli bilgileri getirmek üzere Azure Key Vault Gizli Bilgi Sağlayıcı uzantısını yükleyebilirsiniz.
Azure Key Vault Gizli Dizi Sağlayıcısı uzantısının özellikleri şunlardır:
- CSI Satır içi birim kullanarak gizli bilgiler/anahtarlar/sertifikalar pod'a bindirilir.
- SecretProviderClass CRD ile pod taşınabilirliğini destekler
- Linux ve Windows kapsayıcılarını destekler
- Kubernetes Secrets ile eşitlemeyi destekler
- Gizli bilgilerin otomatik dönmesini destekler
- Uzantı bileşenleri kullanılabilirlik alanlarına dağıtılarak alanlar arası yedekli hale gelir
İpucu
Çevrimdışı erişim gerekiyorsa veya gizli dizilerin Kubernetes gizli dizi deposuyla eşitlenmesi gerekiyorsa Arc özellikli Kubernetes kümelerinizde gizli dizi yönetimi için Gizli Dizi Deposu uzantısını kullanın.
Önkoşullar
- Azure Arc'a bağlı desteklenen kubernetes dağıtımına sahip bir küme. Şu anda bu senaryo için aşağıdaki Kubernetes dağıtımları desteklenmektedir:
- Küme API'si Azure
- Azure Yerel'de Azure Kubernetes Service (AKS) kümeleri
- Azure Arc tarafından etkinleştirilen AKS
- Google Kubernetes Engine
- OpenShift Kubernetes Dağıtımı
- Kanonik Kubernetes Dağıtımı
- Elastic Kubernetes Service
- Tanzu Kubernetes Grid
- Azure Red Hat OpenShift
- Aşağıdaki uç noktalara giden bağlantı:
linuxgeneva-microsoft.azurecr.io
upstreamarc.azurecr.io
*.blob.core.windows.net
-
Küme uzantıları için genel önkoşulları karşıladığınızdan emin olun. Azure CLI uzantısının 0.4.0 veya daha yeni bir
k8s-extension
sürümünü kullanmanız gerekir.
Arc özellikli kubernetes kümesine Azure Key Vault Gizli Dizi Sağlayıcısı uzantısını yükleme
Bağlı kümenize Azure Key Vault Gizli Dizi Sağlayıcısı uzantısını Azure portalda, Azure CLI kullanarak veya bir ARM şablonu dağıtarak yükleyebilirsiniz.
Azure Arc özellikli kubernetes kümelerinde uzantının yalnızca bir örneği dağıtılabilir.
İpucu
Küme giden ara sunucunun arkasındaysa, uzantıyı yüklemeden önce ara sunucu yapılandırma seçeneğini kullanarak Azure Arc'a bağladığınızdan emin olun.
Azure portalı
Azure portalında Kubernetes - Azure Arc'a gidin ve kümenizi seçin.
Hizmet menüsünde, Ayarlar'ın altında Uzantılar'ı seçin. Ardından + Ekle'yi seçin.
Kullanılabilir uzantılar listesinden Azure Key Vault Gizli Dizileri Sağlayıcısı'nı seçerek uzantının en son sürümünü dağıtın.
Uzantıyı dağıtmak için istemleri izleyin. Gerekirse, Yapılandırma sekmesindeki varsayılan seçenekleri değiştirerek yüklemeyi özelleştirin.
Azure Komut Satırı Arayüzü (Azure CLI)
Ortam değişkenlerini ayarlayın:
export CLUSTER_NAME=<arc-cluster-name> export RESOURCE_GROUP=<resource-group-name>
Aşağıdaki komutu çalıştırarak Gizli Dizi Deposu CSI Sürücüsünü ve Azure Key Vault Gizli Dizi Sağlayıcısı uzantısını yükleyin:
az k8s-extension create --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --cluster-type connectedClusters --extension-type Microsoft.AzureKeyVaultSecretsProvider --name akvsecretsprovider
Bu örneğe benzer bir çıktı görmeniz gerekir. Gizli anahtar sağlayıcısı Helm çizelgesinin kümeye dağıtılması birkaç dakika sürebilir.
{
"aksAssignedIdentity": null,
"autoUpgradeMinorVersion": true,
"configurationProtectedSettings": {},
"configurationSettings": {},
"customLocationSettings": null,
"errorInfo": null,
"extensionType": "microsoft.azurekeyvaultsecretsprovider",
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Kubernetes/connectedClusters/$CLUSTER_NAME/providers/Microsoft.KubernetesConfiguration/extensions/akvsecretsprovider",
"identity": {
"principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"tenantId": null,
"type": "SystemAssigned"
},
"location": null,
"name": "akvsecretsprovider",
"packageUri": null,
"provisioningState": "Succeeded",
"releaseTrain": "Stable",
"resourceGroup": "$RESOURCE_GROUP",
"scope": {
"cluster": {
"releaseNamespace": "kube-system"
},
"namespace": null
},
"statuses": [],
"systemData": {
"createdAt": "2022-05-12T18:35:56.552889+00:00",
"createdBy": null,
"createdByType": null,
"lastModifiedAt": "2022-05-12T18:35:56.552889+00:00",
"lastModifiedBy": null,
"lastModifiedByType": null
},
"type": "Microsoft.KubernetesConfiguration/extensions",
"version": "1.1.3"
}
ARM şablonu
Aşağıdaki biçimi kullanarak bir .json dosyası oluşturun. Kümenizi gösterecek şekilde
<cluster-name>
değerini güncellediğinizden emin olun.{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "ConnectedClusterName": { "defaultValue": "<cluster-name>", "type": "String", "metadata": { "description": "The Connected Cluster name." } }, "ExtensionInstanceName": { "defaultValue": "akvsecretsprovider", "type": "String", "metadata": { "description": "The extension instance name." } }, "ExtensionVersion": { "defaultValue": "", "type": "String", "metadata": { "description": "The version of the extension type." } }, "ExtensionType": { "defaultValue": "Microsoft.AzureKeyVaultSecretsProvider", "type": "String", "metadata": { "description": "The extension type." } }, "ReleaseTrain": { "defaultValue": "stable", "type": "String", "metadata": { "description": "The release train." } } }, "functions": [], "resources": [ { "type": "Microsoft.KubernetesConfiguration/extensions", "apiVersion": "2021-09-01", "name": "[parameters('ExtensionInstanceName')]", "identity": { "type": "SystemAssigned" }, "properties": { "extensionType": "[parameters('ExtensionType')]", "releaseTrain": "[parameters('ReleaseTrain')]", "version": "[parameters('ExtensionVersion')]" }, "scope": "[concat('Microsoft.Kubernetes/connectedClusters/', parameters('ConnectedClusterName'))]" } ] }
Şimdi aşağıdaki Azure CLI komutunu kullanarak ortam değişkenlerini ayarlayın:
export TEMPLATE_FILE_NAME=<template-file-path> export DEPLOYMENT_NAME=<desired-deployment-name>
Son olarak, Azure Key Vault Gizli Dizi Sağlayıcısı uzantısını yüklemek için şu Azure CLI komutunu çalıştırın:
az deployment group create --name $DEPLOYMENT_NAME --resource-group $RESOURCE_GROUP --template-file $TEMPLATE_FILE_NAME
Artık gizli sağlayıcı kaynaklarını görüntüleyebilmeniz ve kümenizdeki uzantıyı kullanabilmeniz gerekir.
Uzantı yüklemesini doğrulama
Azure Key Vault Gizli Dizi Sağlayıcısı uzantısının başarıyla yüklenmesini onaylamak için aşağıdaki komutu çalıştırın.
az k8s-extension show --cluster-type connectedClusters --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --name akvsecretsprovider
Bu örneğe benzer bir çıktı görmeniz gerekir.
{
"aksAssignedIdentity": null,
"autoUpgradeMinorVersion": true,
"configurationProtectedSettings": {},
"configurationSettings": {},
"customLocationSettings": null,
"errorInfo": null,
"extensionType": "microsoft.azurekeyvaultsecretsprovider",
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Kubernetes/connectedClusters/$CLUSTER_NAME/providers/Microsoft.KubernetesConfiguration/extensions/akvsecretsprovider",
"identity": {
"principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"tenantId": null,
"type": "SystemAssigned"
},
"location": null,
"name": "akvsecretsprovider",
"packageUri": null,
"provisioningState": "Succeeded",
"releaseTrain": "Stable",
"resourceGroup": "$RESOURCE_GROUP",
"scope": {
"cluster": {
"releaseNamespace": "kube-system"
},
"namespace": null
},
"statuses": [],
"systemData": {
"createdAt": "2022-05-12T18:35:56.552889+00:00",
"createdBy": null,
"createdByType": null,
"lastModifiedAt": "2022-05-12T18:35:56.552889+00:00",
"lastModifiedBy": null,
"lastModifiedByType": null
},
"type": "Microsoft.KubernetesConfiguration/extensions",
"version": "1.1.3"
}
Azure Key Vault oluşturma veya seçme
Ardından, bağlı kümenizle kullanılacak Azure Key Vault'ı belirtin. Henüz bir anahtar kasanız yoksa aşağıdaki komutları kullanarak yeni bir Key Vault oluşturun. Anahtar kasanızın adının genel olarak benzersiz olması gerektiğini unutmayın.
Aşağıdaki ortam değişkenlerini ayarlayın:
export AKV_RESOURCE_GROUP=<resource-group-name>
export AZUREKEYVAULT_NAME=<AKV-name>
export AZUREKEYVAULT_LOCATION=<AKV-location>
Ardından aşağıdaki komutu çalıştırın:
az keyvault create -n $AZUREKEYVAULT_NAME -g $AKV_RESOURCE_GROUP -l $AZUREKEYVAULT_LOCATION
Azure Key Vault anahtarları, gizli dizileri ve sertifikaları depolayabilir. Bu örnekte, aşağıdaki komutu kullanarak adlı DemoSecret
bir düz metin gizli dizisi ayarlayabilirsiniz:
az keyvault secret set --vault-name $AZUREKEYVAULT_NAME -n DemoSecret --value MyExampleSecret
Sonraki bölüme geçmeden önce aşağıdaki özellikleri not alın:
- Key Vault'taki gizli nesnenin adı
- Nesne türü (gizli dizi, anahtar veya sertifika)
- Key Vault kaynağınızın adı
- Key Vault'un ait olduğu aboneliğin Azure Kiracı Kimliği
Azure Key Vault'a erişmek için kimlik sağlama
Şu anda Arc özellikli kümelerde Secrets Store CSI Sürücüsüne bir hizmet sorumlusu kimliği üzerinden erişilebilir. Key Vault'unuza erişebilecek bir kimlik sağlamak için bu adımları izleyin.
Azure'da hizmet sorumlusu oluşturmak için adımları izleyin. Bu adımda oluşturulan İstemci Kimliği ve İstemci Sırrı'nı not alın.
Ardından Azure Key Vault'un oluşturulan hizmet sorumlusu için GET iznine sahip olduğundan emin olun.
Bağlantılı kümede bir Kubernetes sırrı oluşturmak için ilk adımdaki İstemci Kimliği ve İstemci Sırrı'nı kullanın.
kubectl create secret generic secrets-store-creds --from-literal clientid="<client-id>" --from-literal clientsecret="<client-secret>"
Oluşturulan sırrı etiketle:
kubectl label secret secrets-store-creds secrets-store.csi.k8s.io/used=true
Anahtar Kasası adı, kiracı kimliği ve AKV örneğinizden erişilecek nesneler için değerlerinizi doldurarak aşağıdaki YAML ile bir
SecretProviderClass
oluşturun.# This is a SecretProviderClass example using service principal to access Keyvault apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: akvprovider-demo spec: provider: azure parameters: usePodIdentity: "false" keyvaultName: <key-vault-name> cloudName: # Defaults to AzurePublicCloud objects: | array: - | objectName: DemoSecret objectType: secret # object types: secret, key or cert objectVersion: "" # [OPTIONAL] object versions, default to latest if empty tenantId: <tenant-Id> # The tenant ID of the Azure Key Vault instance
Ulusal bulutlarla kullanmak için, Azure Kamu için
cloudName
'üAzureUSGovernmentCloud
olarak değiştirin veya 21Vianet tarafından işletilen Microsoft Azure içincloudName
'ü olarak değiştirin.SecretProviderClass'ı kümenize uygulayın:
kubectl apply -f secretproviderclass.yaml
Kimliğinizin adını doldurarak aşağıdaki YAML ile bir pod oluşturun:
# This is a sample pod definition for using SecretProviderClass and service principal to access Keyvault kind: Pod apiVersion: v1 metadata: name: busybox-secrets-store-inline spec: containers: - name: busybox image: k8s.gcr.io/e2e-test-images/busybox:1.29 command: - "/bin/sleep" - "10000" volumeMounts: - name: secrets-store-inline mountPath: "/mnt/secrets-store" readOnly: true volumes: - name: secrets-store-inline csi: driver: secrets-store.csi.k8s.io readOnly: true volumeAttributes: secretProviderClass: "akvprovider-demo" nodePublishSecretRef: name: secrets-store-creds
Podu kümenize uygulayın:
kubectl apply -f pod.yaml
Gizli bilgileri doğrula
Pod başlatıldıktan sonra, dağıtım YAML'nizde belirtilen birim yolundaki bağlanmış içerik kullanılabilir.
## show secrets held in secrets-store
kubectl exec busybox-secrets-store-inline -- ls /mnt/secrets-store/
## print a test secret 'DemoSecret' held in secrets-store
kubectl exec busybox-secrets-store-inline -- cat /mnt/secrets-store/DemoSecret
Ek yapılandırma seçenekleri
Azure Key Vault Gizli Dizi Sağlayıcısı uzantısı Helm grafik yapılandırmalarını destekler.
Aşağıdaki yapılandırma ayarları, Azure Key Vault Gizli Dizi Sağlayıcısı uzantısıyla sık sık kullanılır:
Yapılandırma Ayarı | Varsayılan | Açıklama |
---|---|---|
enableSecretRotation | yanlış | Boole türü. Eğer true ise, pod montajı ve Kubernetes Gizli Dizisini düzenli aralıklarla, harici gizli depolama alanındaki en son içerikle günceller. |
DöngüYoklamaAralığı | 2 m | Eğer enableSecretRotation true ise, bu ayar sır döndürme yoklama aralığı süresini belirtir. Bu süre, tüm podlar ve Kubernetes sırları için bağlantılı içeriklerin en son sürüme ne sıklıkta yeniden senkronize edilmeleri gerektiği temelinde ayarlanabilir. |
syncSecret etkinleştirildi | yanlış | Boole girişi. Bazı durumlarda, bağlı içeriği kopyalamak için bir Kubernetes Secret oluşturmak isteyebilirsiniz. Eğer true , SecretProviderClass secretObjects alanın senkronize edilen Kubernetes Gizli Dizi nesnelerinin istenen durumunu tanımlamasına izin verir. |
Uzantı yüklendiğinde bu ayarlar şu komut kullanılarak az k8s-extension create
belirtilebilir:
az k8s-extension create --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --cluster-type connectedClusters --extension-type Microsoft.AzureKeyVaultSecretsProvider --name akvsecretsprovider --configuration-settings secrets-store-csi-driver.enableSecretRotation=true secrets-store-csi-driver.rotationPollInterval=3m secrets-store-csi-driver.syncSecret.enabled=true
Yüklemeden sonra şu komutu kullanarak az k8s-extension update
da bu ayarları değiştirebilirsiniz:
az k8s-extension update --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --cluster-type connectedClusters --name akvsecretsprovider --configuration-settings secrets-store-csi-driver.enableSecretRotation=true secrets-store-csi-driver.rotationPollInterval=3m secrets-store-csi-driver.syncSecret.enabled=true
Dağıtımınız için gereken diğer yapılandırma ayarlarını kullanabilirsiniz. Örneğin, küme oluştururken kubelet kök dizinini değiştirmek için komutunu değiştirin az k8s-extension create
:
az k8s-extension create --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --cluster-type connectedClusters --extension-type Microsoft.AzureKeyVaultSecretsProvider --name akvsecretsprovider --configuration-settings linux.kubeletRootDir=/path/to/kubelet secrets-store-csi-driver.linux.kubeletRootDir=/path/to/kubelet
Azure Key Vault Sır Sağlayıcısı uzantısını kaldırma
Uzantıyı kaldırmak için aşağıdaki komutu çalıştırın:
az k8s-extension delete --cluster-type connectedClusters --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --name akvsecretsprovider
Not
Uzantı kaldırıldığında, uzantı yüklendiğinde oluşturulan Özel Kaynak Tanımları (CRD) silinmez.
Uzantı örneğinin silindiğini onaylamak için aşağıdaki komutu çalıştırın:
az k8s-extension list --cluster-type connectedClusters --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP
Uzantı başarıyla kaldırıldıysa Azure Key Vault Gizli Dizi Sağlayıcısı uzantısı çıkışta listelenmez. Kümenizde başka uzantı yüklü değilse boş bir dizi döndürülür.
Artık ihtiyacınız yoksa, aşağıdaki komutu çalıştırarak hizmet temel kimliğiyle ilişkili Kubernetes gizli anahtarını sildiğinizden emin olun.
kubectl delete secret secrets-store-creds
Mutabakat ve sorun giderme
Azure Key Vault Secrets Sağlayıcı uzantısı kendi kendini iyileştirendir. Birisi uzantı yüklendiğinde dağıtılan bir uzantı bileşenini değiştirmeye veya silmeye çalışırsa, bu bileşen özgün durumuyla mutabıktır. Yalnızca Özel Kaynak Tanımları (CRD) için özel durumlar vardır. Silinen CRD'ler uyumlu hale getirilmez. Silinen CRD'leri geri yüklemek için komutunu mevcut uzantı örneği adıyla yeniden kullanın az k8s-extension create
.
Yaygın sorunları çözme hakkında daha fazla bilgi için Bkz. Gizli Dizi Deposu CSI sürücüsü ve Gizli Dizi Deposu CSI Sürücüsü için Azure Key Vault sağlayıcısı için açık kaynak sorun giderme kılavuzları.
Sonraki adımlar
- Bir şeyler denemek ister misin? Küme API'sini kullanarak Azure Arc Jumpstart senaryosunu kullanmaya hızlı bir şekilde başlayın.
- Azure Key Vault hakkında daha fazla bilgi edinin.
- Azure Arc özellikli Kubernetes güvenlik kitabındaki yönergeleri izleyerek kümenizi başka yollarla korumaya yardımcı olun.