Aracılığıyla paylaş


Azure tarafından dağıtılan Service Fabric Uygulamaları için KeyVaultReference desteği

Bulut uygulamaları oluştururken karşılaşılan yaygın bir zorluk, gizli dizileri uygulamalarınıza güvenli bir şekilde dağıtmayı ve bunları yönetmeyi bulmaktır. Service Fabric KeyVaultReference desteği bunu kolaylaştırır. Yapılandırıldıktan sonra, uygulama tanımınızda Key Vault'ta depolanan gizli dizinin URL'sine başvurabilirsiniz ve Service Fabric bu gizli diziyi getirip uygulamanızı onunla etkinleştirmeyi işler. Özelliğin "SF ile yönetilen" sürümünü kullanırken Service Fabric, Key Vault'unuzu da izleyebilir ve gizli dizileriniz kasada döndürüldüğünde sıralı uygulama parametresi yükseltmelerini otomatik olarak tetikleyebilir.

Service Fabric'te uygulamalara gizli dizi teslim etme seçenekleri

Bir Service Fabric uygulamasına gizli dizi teslim etmenin klasik yolu Şifrelenmiş Parametreler bildirmekti. Bu, gizli dizileri bir şifreleme sertifikasına karşı şifrelemeyi ve bu şifrelenmiş gizli dizileri uygulamanıza geçirmeyi içerir. Bu yöntemin birkaç dezavantajı vardır: şifreleme sertifikasını yönetme ihtiyacı, dağıtım işlem hattındaki gizli dizilerin açığa çıkarma ve dağıtılan bir uygulamaya bağlı gizli dizilerin meta verilerine görünürlük eksikliği. Benzer şekilde, gizli dizileri döndürmek için bir uygulama dağıtımı gerekir. Tek başına küme çalıştırmadığınız sürece, artık şifrelenmiş parametreler kullanmanızı önermeyiz.

Bir diğer seçenek de Gizli Dizi Deposu Başvuruları'nın kullanılmasıdır. Bu deneyim uygulama gizli dizilerinizin merkezi yönetimine, dağıtılan gizli dizilerin meta verilerine daha iyi görünürlük sağlar ve şifreleme sertifikasının merkezi yönetimine olanak tanır. Bazıları, tek başına Service Fabric kümelerini çalıştırırken bu gizli dizi yönetimi stilini tercih edebilir.

Bugün öneri, Service Fabric uygulamaları için Yönetilen Kimlikler'i kullanarak gizli dizilere olan dayanıklılığı azaltmaktır. Yönetilen kimlikler doğrudan Azure Depolama, Azure SQL ve daha fazlası için kimlik doğrulaması yapmak için kullanılabilir. Bu, Microsoft Entra kimlik doğrulamasını destekleyen Azure hizmetlerine erişirken ayrı bir kimlik bilgisi yönetmeye gerek olmadığı anlamına gelir.

Yönetilen Kimliği istemci olarak kullanmak mümkün olmadığında KeyVaultReferences kullanmanızı öneririz. Doğrudan Key Vault'a gitmek için Yönetilen Kimlik kullanmak yerine KeyVaultReferences kullanmalısınız. KeyVaultReferences, sıralı yükseltmeler sırasında gizli dizi değişikliklerinin gerçekleşmesini zorunlu kıldığını için uygulamanızın kullanılabilirliğini artırmaya yardımcı olur. Ayrıca gizli diziler önbelleğe alınıp küme içinden sunulduğundan daha iyi ölçeklendirilir. Uygulamanız bugün Şifrelenmiş Parametreler kullanıyorsa, uygulama kodunuzda KeyVaultReferences'ı kullanmak için yalnızca en az değişiklik gereklidir. Uygulamanız tek bir gizli diziyle gelmeyi ve bu gizli dizi için işlemin ömrü boyunca aynı olmasını beklemeye devam edebilir.

Önkoşullar

  • Service Fabric Uygulamaları için Yönetilen Kimlik

    Service Fabric KeyVaultReference desteği, uygulama adına gizli dizileri getirmek için uygulamanın Yönetilen Kimliğini kullanır. Uygulamanızı ARM aracılığıyla dağıtmanız ve yönetilen bir kimlik atamanız gerekir. Uygulamanız için yönetilen kimliği etkinleştirmek için bu belgeyi izleyin.

  • Merkezi Gizli Dizi Deposu (CSS).

    Merkezi Gizli Dizi Deposu (CSS), Service Fabric'in şifrelenmiş yerel gizli dizi önbelleğidir. Bu özellik, gizli dizileri Key Vault'tan getirildikten sonra korumak ve kalıcı hale getirmek için CSS kullanır. KeyVaultReferences'ı kullanmak için bu sistem hizmetinin etkinleştirilmesi gerekir. CSS'yi etkinleştirmek ve yapılandırmak için bu belgeyi izleyin.

  • Uygulamanın Key Vault'a yönetilen kimlik erişimi izni verme

    Key Vault'a yönetilen kimlik erişimi verme hakkında bilgi edinmek için bu belgeye başvurun. Ayrıca sistem tarafından atanan yönetilen kimliği kullanıyorsanız yönetilen kimliğin yalnızca uygulama dağıtımından sonra oluşturulduğunu unutmayın. Bu, uygulamaya kasaya erişim verilmeden önce gizli diziye erişmeye çalıştığı yarış koşulları oluşturabilir. Sistem tarafından atanan kimliğin adı olacaktır {cluster name}/{application name}/{service name}.

KeyVaultReferences ile Yönetilen KeyVaultReferences karşılaştırması

KeyVaultReferences'ın temel fikri, uygulama parametrenizin değerini gizli diziniz olarak ayarlamak yerine Key Vault URL'sine ayarlamaktır. Bu url, uygulamanızın etkinleştirilmesi üzerine gizli dizi değerine çözümlenir. Key Vault'ta tek bir gizli dizi, örneğin https://my.vault.azure.net/secrets/MySecret/ ve <oid2>gibi https://my.vault.azure.net/secrets/MySecret/<oid1> birden çok sürüme sahip olabilir. KeyVaultReference kullandığınızda, değer bir sürüm başvurusu (https://my.vault.azure.net/secrets/MySecret/<oid1>) olmalıdır. Kasadaki bu gizli diziyi örneğin olarak <oid2>döndürürseniz, yeni başvuruya bir uygulama yükseltmesi tetiklemeniz gerekir. ManagedKeyVaultReference kullandığınızda, değer sürüm olmayan bir başvuru (https://my.vault.azure.net/secrets/MySecret/) olmalıdır. Service Fabric en son örneği <oid1> çözümler ve uygulamayı bu gizli diziyle etkinleştirir. Kasadaki <oid2>gizli diziyi olarak döndürürseniz Service Fabric sizin adınıza geçiş <oid2> yapmak için otomatik olarak bir uygulama parametresi yükseltmesi tetikler.

Not

Service Fabric Uygulamaları için KeyVaultReference (sürümlenmiş gizli diziler) desteği, Service Fabric sürüm 7.2 CU5'den itibaren Genel Kullanıma Sunuldu. Bu özelliği kullanmadan önce bu sürüme yükseltmeniz önerilir.

Not

Service Fabric Uygulamaları için Yönetilen KeyVaultReference (sürüm olmayan gizli diziler) desteği, Service Fabric sürüm 9.0'dan itibaren Genel Kullanıma sunuldu.

Uygulamanızda KeyVaultReferences kullanma

KeyVaultReferences kullanılabilir

Ortam değişkeni olarak

<EnvironmentVariables>
      <EnvironmentVariable Name="MySecret" Type="KeyVaultReference" Value="<KeyVaultURL>"/>
</EnvironmentVariables>
string secret =  Environment.GetEnvironmentVariable("MySecret");

Kapsayıcınıza dosya olarak takılı

  • settings.xml bölüm ekleme

    Tür KeyVaultReference ve Değer ile parametre tanımlama MySecret<KeyVaultURL>

    <Section Name="MySecrets">
        <Parameter Name="MySecret" Type="KeyVaultReference" Value="<KeyVaultURL>"/>
    </Section>
    
  • ApplicationManifest.xml'da yeni bölüme başvurma <ConfigPackagePolicies>

    <ServiceManifestImport>
        <Policies>
        <IdentityBindingPolicy ServiceIdentityRef="MyServiceMI" ApplicationIdentityRef="MyApplicationMI" />
        <ConfigPackagePolicies CodePackageRef="Code">
            <!--Linux container example-->
            <ConfigPackage Name="Config" SectionName="MySecrets" EnvironmentVariableName="SecretPath" MountPoint="/var/secrets"/>
            <!--Windows container example-->
            <!-- <ConfigPackage Name="Config" SectionName="dbsecrets" EnvironmentVariableName="SecretPath" MountPoint="C:\secrets"/> -->
        </ConfigPackagePolicies>
        </Policies>
    </ServiceManifestImport>
    
  • Hizmet kodundaki gizli dizileri kullanma

    altında <Section Name=MySecrets> listelenen her parametre, EnvironmentVariable SecretPath tarafından işaret edilen klasörün altındaki bir dosya olacaktır. Aşağıdaki C# kod parçacığı, uygulamanızdan MySecret'in nasıl okunduğu gösterir.

    string secretPath = Environment.GetEnvironmentVariable("SecretPath");
    using (StreamReader sr = new StreamReader(Path.Combine(secretPath, "MySecret"))) 
    {
        string secret =  sr.ReadToEnd();
    }
    

    Not

    MountPoint, gizli dizi değerleri içeren dosyaların bağlanacağı klasörü denetler.

Kapsayıcı deposu parolasına başvuru olarak

 <Policies>
      <ContainerHostPolicies CodePackageRef="Code">
        <RepositoryCredentials AccountName="MyACRUser" Type="KeyVaultReference" Password="<KeyVaultURL>"/>
      </ContainerHostPolicies>

Uygulamanızda Yönetilen KeyVaultReferences kullanma

İlk olarak, küme tanımınızı yükselterek diğer gerekli CSS yapılandırmalarına ek olarak ayarı ekleyerek EnableSecretMonitoring gizli dizi izlemeyi etkinleştirmeniz gerekir:

"fabricSettings": [
    {
        "name": "CentralSecretService",     
        "parameters": [
            {
                "name": "EnableSecretMonitoring",
                "value": "true"
            },
            {
                "name":  "DeployedState",
                "value":  "enabled"
            },
            {
                "name" : "EncryptionCertificateThumbprint",
                "value": "<thumbprint>"
            },
            {
                "name":  "MinReplicaSetSize",
                "value":  "<size>"
            },
            {
                "name":  "TargetReplicaSetSize",
                "value":  "<size>"
            }
        ]
    }
],

Not

Varsayılan değer gelecekte olabilir true

Küme yükseltmesi tamamlandıktan sonra kullanıcı uygulamanız yükseltilebilir. KeyVaultReference'ın kullanabildiği her yerde ManagedKeyVaultReference da kullanılabilir, örneğin,

    <Section Name="MySecrets">
        <Parameter Name="MySecret" Type="ManagedKeyVaultReference" Value="[MySecretReference]"/>
    </Section>

ManagedKeyVaultReferences'ın belirtilmesindeki birincil fark, uygulama türü bildiriminizde sabit kodlanmamalarıdır. Bunlar Uygulama düzeyi parametreleri olarak bildirilmeli ve ARM uygulama tanımınızda daha fazla geçersiz kılınmalıdır.

İşte iyi biçimlendirilmiş bir bildirimden bir alıntı

<?xml version="1.0" encoding="utf-8"?>
<ApplicationManifest ApplicationTypeName="MyAppType" ApplicationTypeVersion="1.0.0">
  <Parameters>
    <Parameter Name="MySecretReference" DefaultValue="" />
  </Parameters>
  <ServiceManifestImport>
    <EnvironmentOverrides CodePackageRef="Code">
      <EnvironmentVariable Name="MySecret" Value="[MySecretReference]" Type="ManagedKeyVaultReference" />
    </EnvironmentOverrides>
    <Policies>
      <IdentityBindingPolicy ServiceIdentityRef="MySvcIdentity" ApplicationIdentityRef="MyAppIdentity" />
    </Policies>
  </ServiceManifestImport>
  <Principals>
    <ManagedIdentities>
      <ManagedIdentity Name="MyAppIdentity" />
    </ManagedIdentities>
  </Principals>
</ApplicationManifest>

ve uygulama kaynak tanımının bir alıntısı:

{
    "type": "Microsoft.ServiceFabric/clusters/applications",
    "name": "MyApp",
    "identity": {
        "type" : "userAssigned",
        "userAssignedIdentities": {
            "[variables('userAssignedIdentityResourceId')]": {}
        }
    },
    "properties": {
        "parameters": {
            "MySecretReference": "https://my.vault.azure.net/secrets/MySecret/"
        },
        "managedIdentities": [
            {
            "name" : "MyAppIdentity",
            "principalId" : "<guid>"
            }
        ]
    }
}

Hem ManagedKeyVaultReference'ı bir uygulama parametresi olarak bildirme hem de service Fabric'in dağıtılan gizli dizi yaşam döngüsünü başarıyla yönetmesi için dağıtımda bu parametreyi geçersiz kılma gerekir.

Sonraki adımlar