Azure Key Vault Gizli Depolama uzantısı yapılandırma başvurusu

SSE dört yerde yapılandırılabilir: Uzantıyı oluştururken veya güncelleştirirken Arc altyapısına sağlanan yapılandırma ayarları, kaynaklar, AKVSyncSecretSync kubernetes kaynakları ve SecretProviderClass kubernetes kaynakları.

Arc uzantısı yapılandırma ayarları

SSE Arc uzantısı örneği oluşturulduğunda yapılandırma ayarları ayarlanabilir veya daha sonra güncelleştirilebilir. Sırasıyla bir SSE örneği oluşturmak veya güncelleştirmek için veya --configuration-settings <setting>=<value> ile az k8s-extension create ... kullanınaz k8s-extension update ....

SSE aşağıdaki Arc uzantısı yapılandırma parametrelerini kabul eder:

Parametre adı Açıklama Varsayılan değer
rotationPollIntervalInSeconds SSE'nin yönettiği gizli diziyi ne kadar hızlı denetleyemiyor veya güncelleştiriyor olduğunu belirtir. 3600 (1 saat)
enablePartialSecretSync false olarak ayarlandığında, bir gizli dizi yalnızca içindeki her öğe Azure Key Vault 'den (AKV) başarıyla getirilebiliyorsa güncelleştirilir. true Gizli dizideki her öğe, gizli dizideki diğer öğelerin başarısına bakılmaksızın başarıyla getirilirse güncelleştirilir. true
jitterSeconds Ek SecretSync değişimi üst sınırını belirtir. SSE, bir SecretSync kaynağını her değerlendirişinde 0 jitterSeconds ile her seferinde rastgele bir süre bekler. Bu gecikme, SecretSync her güncelleştirildiğinde veya geçtikten sonra rotationPollIntervalInSeconds gerçekleşir. Daha fazla kılavuz için bkz. AKV hız sınırlama . 0 (titreme yok)

AKVSync kaynakları (önizleme)

AKVSync kaynakları, yapılandırmayı tek bir kaynakta birleştirerek en yaygın SSE kullanım örneklerini basitleştirir. Bu tek kaynağı yapılandırmak bir insan için daha kolaydır ve tutarsızlıklara daha az yatkındır. Uygulandığında, AKVSync kaynaklar eşdeğerlerine SecretSync ve SecretProviderClass kaynaklarına çevrilir. Otomatik olarak oluşturulan SecretSync ve SecretProviderClass kaynakları değiştirmeyin; bunlar gerektiği gibi otomatik olarak güncelleştirilir.

Basitleştirilmiş yapılandırma bir önizleme özelliğidir ve gelecek sürümlerde yapılan küçük değişikliklerden yararlanabilir. Doğrudan yapılandırma stili tüm dağıtımlar için kullanılabilir durumda kalır.

Örnek

kind: AKVSync
apiVersion: secret-sync.x-k8s.io/v1alpha1
metadata:
  name: my-akv-secrets
  namespace: workload-namespace
spec:
  keyvaultName: exampleKeyvault
  clientID:  "xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx"
  tenantID:  "xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx"
  serviceAccountName: workload-serviceaccountname
  objects:
    - secretInAKV: "secret-A"
    - secretInAKV: "secret-B"
      kubernetesSecretName: "k8s-secret-b"
      labels:
        test-label-0: "label-value-0"
      annotations:
        test-annotation-0: "annotation-value-0"
      versionHistory: 3
    - certInAKV: "cert-A"
      kubernetesSecretType: "kubernetes.io/tls"
    - certInAKV: "cert-B"
      kubernetesSecretType: "Opaque"
      versionHistory: 3
    - kubernetesSecretName: "compound-secret"
      mapping:
        - dataKey: "username"
          secretInAKV: secret-A
        - dataKey: "password"
          secretInAKV: secret-B
          version: 1
        - dataKey: "tls-cert"
          certInAKV: cert-A
    - secretInAKV: "ssh-private-key"
      kubernetesSecretType: "kubernetes.io/ssh-auth"

Değerler

  • metadata.name(gerekli): Bu AKVSync kaynağın adı.

.spec içinde:

  • serviceAccountName(gerekli): Kubernetes gizli deposuna erişmek için kullanılan Kubernetes hizmet hesabı. Bu hizmet hesabı, Azure Key Vault gizli dizilere erişimi olan yönetilen kimlikle birleştirilmiş olmalıdır.

  • clientID(gerekli): Gerekli gizli dizilere erişimi olan yönetilen kimliğin clientID değeri. Bu yönetilen kimlik, adlandırılmış hizmet hesabıyla ilişkilendirilmiş bir federasyon kimlik bilgilerine sahip olmalıdır.

  • tenantID(gerekli): AKV örneğini içeren Azure kiracısının kimliği.

  • keyvaultName(gerekli): Anahtar kasasının adı.

  • objects(gerekli): Öğelerin listesi (secretInAKV, certInAKV veya kubernetesSecretName). Öğeler, AKV'den getirilecek gizli diziler veya sertifikalar veya AKV'den birçok öğe içerebilen daha karmaşık 'bileşik gizli diziler' olabilir.

    • secretInAKV(isteğe bağlı): AKV'den alınması gereken gizli dizinin adı.

      • kubernetesSecretName(isteğe bağlı): Yeni Kubernetes gizli dizisinin adı.
      • kubernetesSecretType(isteğe bağlı): Kubernetes gizli dizisinin türü. Varsayılan olarak Opaque değerini alır. Desteklenen değerler , , Opaque, kubernetes.io/tls, kubernetes.io/ssh-auth, kubernetes.io/basic-authve kubernetes.io/dockercfgdeğerlerini içerirkubernetes.io/dockerconfigjson. Gizli dizi oluşturulduktan sonra bu alan sabittir. Gizli dizi türünü değiştirmek için otomatik olarak oluşturulan SecretSync ve Kubernetes Gizli Dizisini silin, ardından AKVSync kaynağını güncelleştirin. Denetleyici bunları yeni türle yeniden oluşturur.
      • labels(isteğe bağlı): Gizli nesneye uygulanacak ek etiketlerin anahtar-değer çiftlerinin haritası.
      • ek açıklamalar(isteğe bağlı): Gizli nesneye uygulanacak ek ek açıklamaların anahtar-değer çiftlerinin haritası.
      • versionHistory(isteğe bağlı): Varsayılan değer 1'tir. SSE, gizli dizinin bu çok sayıda sürümünü AKV'den indirir. Sürümler Kubernetes gizli dizisinde "v0", "v1", "v2" vb. adlı anahtarlarda depolanır. "v0" en son sürümdür.
    • certInAKV(isteğe bağlı): AKV'den alınması gereken bir sertifikanın adı. Sertifikanın ve özel anahtarının her ikisi de getirilir. ile kubernetesSecretTypekubernetes.io/tlskullanıldığında, sertifika ve anahtar standart tls.crt ve tls.key veri anahtarlarında depolanır.

      • kubernetesSecretName(isteğe bağlı): Yeni Kubernetes gizli dizisinin adı.
      • kubernetesSecretType(isteğe bağlı): Kubernetes gizli dizisinin türü. Varsayılan olarak Opaque değerini alır. TLS sertifikaları için olarak kubernetes.io/tls ayarlayın. Gizli dizi oluşturulduktan sonra bu alan sabittir. Gizli dizi türünü değiştirmek için otomatik olarak oluşturulan SecretSync ve Kubernetes Gizli Dizisini silin, ardından AKVSync kaynağını güncelleştirin. Denetleyici bunları yeni türle yeniden oluşturur.
      • labels(isteğe bağlı): Gizli nesneye uygulanacak ek etiketlerin anahtar-değer çiftlerinin haritası.
      • ek açıklamalar(isteğe bağlı): Gizli nesneye uygulanacak ek ek açıklamaların anahtar-değer çiftlerinin haritası.
      • versionHistory(isteğe bağlı): Varsayılan değer 1'tir. SSE, sertifikanın bu çok sayıda sürümünü AKV'den indirir. Davranışına bağlıdır kubernetesSecretType:
        olduğunda Opaque, tüm sürümler "v0", "v1", "v2" vb. veri anahtarlarıyla tek bir Kubernetes gizli dizisinde depolanır.
        olduğundakubernetes.io/tls, her sürüm, her birinin ve <cert-name>-v0 veri anahtarlarını içeren <cert-name>-v1 , tls.crtvb. adlı tls.keyayrı bir Kubernetes gizli dizisi oluşturur. Her iki durumda da "v0" en son sürümdür.
    • kubernetesSecretName(isteğe bağlı): Kubernetes'te herhangi bir sayıda öğeye sahip olabilecek bileşik gizli dizinin adını tanımlar. versionHistory bu durumda kullanılamaz. Birden çok sürüm gerekiyorsa, bunlar açıkça numaralandırılmalıdır. İsteğe bağlı olarak kubernetesSecretType (oluşturma işleminden sonra sabit), etiketler ve ek açıklamalar belirtebilirsiniz.

      • eşleme(gerekli): Veri anahtarlarının ve bunların AKV kaynaklarının listesi. Varsayılan anahtar yoktur. Her girdi tam olarak secretInAKV veya certInAKV'lerden birini belirtmelidir.
        • dataKey(gerekli): AKV'den getirilen gizli diziyi tutan Kubernetes gizli dizisi içindeki veri anahtarının adı.

        • secretInAKV(isteğe bağlı): AKV'den alınması ve aday veri anahtarında depolanması gereken gizli dizinin adı.

        • certInAKV(isteğe bağlı): AKV'den alınması gereken bir sertifikanın adı. Hem sertifika hem de özel anahtarı iki parçalı bir PEM olarak getirilir ve aday veri anahtarında depolanır.

        • version(isteğe bağlı): AKV'den getirilme gizli dizi veya sertifika sürümü. 0 en son sürümdür, 1 ikinci en son sürümdür vb.

SecretSync kaynakları

SecretSync kaynaklar, SSE'nin gizli dizileri ve sertifikaları Kubernetes gizli dizi deposunda nasıl depolay yapılacağını yapılandırmaktadır. Her SecretSync kaynağı bir Kubernetes gizli dizisini tanımlar, ancak birden fazla gizli dizi içerebilir.

Örnek

apiVersion: secret-sync.x-k8s.io/v1alpha1
kind: SecretSync
metadata:
  name: secret-sync-name
  namespace: workload-namespace
spec:
  serviceAccountName: workload-serviceaccountname
  secretProviderClassName: secret-provider-class-name
  secretObject:
    type: Opaque
    data:
      - sourcePath: aSecret/0
        targetKey: aSecret-data-key0
      - sourcePath: aSecret/1
        targetKey: aSecret-data-key1
    labels:
      fromExample: absolutelyYes
    annotations:
      exampleAnnotation: annotationValue 
  forceSynchronization: ArbitraryValue12354

Değerler

  • metadata.name(gerekli): Bu SecretSync kaynağının adı. Not: Otomatik olarak oluşturulan Gizli Dizi kaynağı, bu kaynakla aynı ada sahiptir.

.spec içinde:

  • serviceAccountName(gerekli): Kubernetes gizli deposuna erişmek için kullanılan Kubernetes hizmet hesabı. Bu hizmet hesabı, Azure Key Vault gizli dizilere erişimi olan yönetilen kimlikle birleştirilmiş olmalıdır.
  • secretProviderClassName(gerekli): Azure Key Vault hangi gizli dizilerin getirildiğini tanımlayan SecretProviderClass kaynağının adı.
  • secretObject(gerekli): Depolanan gizli dizi kaynağının nasıl yapılandırılması gerektiğini tanımlar.
    • type(gerekli): Kubernetes gizli dizisi nesnesinin türü. Bu alanı Opaque , uygulanmamış bir yapıya sahip genel amaçlı gizli dizi için olarak ayarlayın. Özel amaçlı gizli dizi türlerinin nasıl yapılandırılması gerektiği konusunda yönergeler için bkz. Kubernetes gizli dizi türleri. Gizli dizi oluşturulduktan sonra bu alan sabittir. Gizli dizi türünü değiştirmek için var olan SecretSync'i ve ilişkili gizli dizisini silin, ardından SecretSync'i yeni türle yeniden oluşturun.
    • data(gerekli): Gizli dizi kaynağındaki veri öğelerinin listesi. En az bir öğe olmalıdır. Her veri öğesi şu iki alanı içermelidir:
      • sourcePath(gerekli): AKV'den getirilen öğenin yolu. Adlandırılmış gizli dizinin yalnızca bir sürümü AKV'den getirildiğinde, yol basitçe <secret name>olur.
        Adlandırılmış gizli dizinin birden fazla sürümü AKV'den getirilirse, en son sürümün sourcePath'i , <secret name>/0ikinci en son sürümü ise vb. olur <secret name>/1.
        AKV'den bir sertifika getirildiğinde sourcePaths, SecretProviderClass içindeki değerine objectType bağlıdır. objectType SPC'deki "gizli" olduğunda, hem bir sertifika hem de özel anahtar sırasıyla ve <secret name>/tls.crt sourcePath'lerinde <secret name>/tls.key kullanılabilir.
      • targetKey(gerekli): Kubernetes gizli dizi nesnesinde verileri depolayan anahtar.
    • labels(isteğe bağlı): Gizli nesneye uygulanacak ek etiketlerin anahtar-değer çiftlerinin haritası.
    • ek açıklamalar(isteğe bağlı): Gizli nesneye uygulanacak ek ek açıklamaların anahtar-değer çiftlerinin haritası.
    • forceSynchronization(isteğe bağlı): Bu alanda yapılan değişiklikler, değişiklikler için AKV'yi yeniden denetlemek için SSE'yi tetikler. SSE güncelleştirilmiş verileri bulursa Kubernetes her zamanki gibi güncelleştirilir. Bu alanın değeri SSE'nin davranışını etkilemez.

SecretProviderClass kaynakları

SecretProviderClass kaynakları, bir Azure Key Vault ne ve nasıl getirileceklerini yapılandırılır. Bu başvuru yalnızca SecretProviderClass'ın SSE kullanım örnekleri için gerekli alanları kapsar.

Örnek

apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: secret-provider-class-name
  namespace: workload-namespace
spec:
  provider: azure
  parameters:
    clientID: "xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx"
    tenantID: "xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx"
    keyvaultName: exampleKeyvault
    objects: |
      array:
        - |
          objectName: aSecret
          objectType: secret
          objectVersionHistory: 2
        - |
          objectName: aCertificate
          objectType: secret

Değerler

.spec içinde:

  • provider(gerekli): Azure Key Vault gizli dizileri getirmek için SSE kullanırken bu alanı azure olarak ayarlayın.
  • parameters(gerekli): AKV gizli dizilerinin nasıl ve nereden getirileceği tanımlar.
    • clientID(gerekli): Gerekli gizli dizilere erişimi olan yönetilen kimliğin clientID değeri. Bu yönetilen kimlik, bu SecretProviderClass kullanan SecretSync kaynağında adlı hizmet hesabıyla ilişkilendirilmiş bir federasyon kimlik bilgilerine sahip olmalıdır.
    • tenantID(gerekli): AKV örneğini içeren Azure kiracısının kimliği.
    • keyvaultName(gerekli): Anahtar kasasının adı.
    • objects(gerekli): Bu AKV'den getirilecek öğeleri temsil eden YAML parçası içeren bir dize . Nesneler alanının nasıl yapıldığını görmek için örne çok dikkat edin. Azure Key Vault ile kullanılmak üzere SecretProviderClass kaynaklarına ek örnekler AKV sağlayıcı belgelerinde bulunabilir. nesneleri "array" alt nesnesinde en az bir öğe içermelidir.
      • objectName(gerekli): AKV'den getirilme gizli dizisinin veya sertifikanın adı.
      • objectType(gerekli): AKV'den secret gizli dizi getirilirken bu alanı olarak ayarlayın.
        Sertifika getirirken bu alanı şu şekilde ayarlayın:
        • cert yalnızca sertifikayı getirmek için.
        • key yalnızca sertifikanın ortak anahtarını getirmek için.
        • secret sertifikasını ve özel anahtarı getirmek için.
      • objectVersionHistory(isteğe bağlı): Varsa ve birden büyükse, en son sürümden başlayarak bu çok sayıda sürüm AKV'den getirilir.