Aracılığıyla paylaş


Service Fabric uygulamalarında şifrelenmiş gizli dizileri yönetme

Bu kılavuz, bir Service Fabric uygulamasında gizli dizileri yönetme adımlarında size yol gösterir. Gizli diziler, depolama bağlantı dizeleri, parolalar veya düz metin olarak işlenmemesi gereken diğer değerler gibi hassas bilgiler olabilir.

Service Fabric uygulamasında şifrelenmiş gizli dizilerin kullanılması üç adımdan oluşur:

  • Şifreleme sertifikası ayarlayın ve gizli dizileri şifreleyin.
  • Bir uygulamada şifrelenmiş gizli dizileri belirtin.
  • Hizmet kodundan şifrelenmiş gizli dizilerin şifresini çözme.

Şifreleme sertifikası ayarlama ve gizli dizileri şifreleme

Şifreleme sertifikası ayarlamak ve gizli dizileri şifrelemek için kullanmak Windows ile Linux arasında farklılık gösterir.

Uygulamada şifrelenmiş gizli dizileri belirtme

Önceki adım, bir sertifikayla gizli dizi şifrelemeyi ve bir uygulamada kullanmak üzere base-64 ile kodlanmış bir dize oluşturmayı açıklar. Bu base-64 kodlamalı dize, hizmetin Settings.xml şifrelenmiş parametre olarak veya hizmetin ServiceManifest.xml şifrelenmiş bir ortam değişkeni olarak belirtilebilir.

Hizmetinizin Settings.xml yapılandırma dosyasında IsEncrypted özniteliği olarak ayarlanmış trueşifrelenmiş bir parametre belirtin:

<?xml version="1.0" encoding="utf-8" ?>
<Settings xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2011/01/fabric">
  <Section Name="MySettings">
    <Parameter Name="MySecret" IsEncrypted="true" Value="I6jCCAeYCAxgFhBXABFxzAt ... gNBRyeWFXl2VydmjZNwJIM=" />
  </Section>
</Settings>

Hizmetinizin ServiceManifest.xml dosyasında Type özniteliği olarak ayarlanmış Encryptedşifrelenmiş bir ortam değişkeni belirtin:

<CodePackage Name="Code" Version="1.0.0">
  <EnvironmentVariables>
    <EnvironmentVariable Name="MyEnvVariable" Type="Encrypted" Value="I6jCCAeYCAxgFhBXABFxzAt ... gNBRyeWFXl2VydmjZNwJIM=" />
  </EnvironmentVariables>
</CodePackage>

Gizli diziler, uygulama bildiriminde bir sertifika belirterek Service Fabric uygulamanıza da dahil edilmelidir. ApplicationManifest.xml için bir SecretsCertificate öğesi ekleyin ve istenen sertifikanın parmak izini ekleyin.

<ApplicationManifest … >
  ...
  <Certificates>
    <SecretsCertificate Name="MyCert" X509FindType="FindByThumbprint" X509FindValue="[YourCertThumbrint]"/>
  </Certificates>
</ApplicationManifest>

Not

SecretsCertificate belirten bir uygulamayı etkinleştirdikten sonra Service Fabric eşleşen sertifikayı bulur ve uygulamanın çalıştığı kimliğe sertifikanın özel anahtarı üzerinde tam izinler altında verir. Service Fabric ayrıca sertifikayı değişiklikler için izler ve izinleri buna göre yeniden uygular. Service Fabric, ortak adla bildirilen sertifikaların değişikliklerini algılamak için eşleşen tüm sertifikaları bulan ve bunu önbelleğe alınmış parmak izi listesiyle karşılaştıran düzenli bir görev çalıştırır. Yeni bir parmak izi algılandığında, o konuya göre bir sertifikanın yenilendiği anlamına gelir. Görev, kümenin her düğümünde dakikada bir kez çalışır.

SecretsCertificate konu tabanlı bildirimlere izin verirken, şifrelenmiş ayarların istemcideki ayarı şifrelemek için kullanılan anahtar çiftine bağlı olduğunu unutmayın. Özgün şifreleme sertifikasının (veya eşdeğerinin) konu tabanlı bildirimle eşleştiğinden ve uygulamayı barındırabilecek kümenin her düğümüne karşılık gelen özel anahtarı da dahil olmak üzere yüklendiğinden emin olmanız gerekir. Konu tabanlı bildirimle eşleşen ve özgün şifreleme sertifikasıyla aynı anahtar çiftinden oluşturulan tüm zaman geçerli sertifikalar eşdeğer kabul edilir.

Uygulama örneklerine uygulama gizli dizileri ekleme

İdeal olarak, farklı ortamlara dağıtım mümkün olduğunca otomatik olmalıdır. Bu, derleme ortamında gizli dizi şifrelemesi gerçekleştirilerek ve uygulama örnekleri oluşturulurken şifrelenmiş gizli dizilerin parametre olarak sağlanmasıyla gerçekleştirilebilir.

Settings.xml geçersiz kılınabilir parametreler kullanma

Settings.xml yapılandırma dosyası, uygulama oluşturma zamanında sağlanabilen geçersiz kılınabilir parametrelere izin verir. Bir parametre için MustOverride değer sağlamak yerine özniteliğini kullanın:

<?xml version="1.0" encoding="utf-8" ?>
<Settings xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2011/01/fabric">
  <Section Name="MySettings">
    <Parameter Name="MySecret" IsEncrypted="true" Value="" MustOverride="true" />
  </Section>
</Settings>

Settings.xml'daki değerleri geçersiz kılmak için, ApplicationManifest.xml'de hizmet için bir geçersiz kılma parametresi bildirin:

<ApplicationManifest ... >
  <Parameters>
    <Parameter Name="MySecret" DefaultValue="" />
  </Parameters>
  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="Stateful1Pkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides>
      <ConfigOverride Name="Config">
        <Settings>
          <Section Name="MySettings">
            <Parameter Name="MySecret" Value="[MySecret]" IsEncrypted="true" />
          </Section>
        </Settings>
      </ConfigOverride>
    </ConfigOverrides>
  </ServiceManifestImport>

Artık değer, uygulamanın bir örneğini oluştururken uygulama parametresi olarak belirtilebilir. Uygulama örneği oluşturma işlemi, derleme işleminde kolay tümleştirme için PowerShell kullanılarak betik oluşturulabilir veya C# dilinde yazılabilir.

PowerShell kullanılarak parametresi komutuna New-ServiceFabricApplicationkarma tablo olarak sağlanır:

New-ServiceFabricApplication -ApplicationName fabric:/MyApp -ApplicationTypeName MyAppType -ApplicationTypeVersion 1.0.0 -ApplicationParameter @{"MySecret" = "I6jCCAeYCAxgFhBXABFxzAt ... gNBRyeWFXl2VydmjZNwJIM="}

C# kullanıldığında, uygulama parametreleri içinde ApplicationDescription olarak NameValueCollectionbelirtilir:

FabricClient fabricClient = new FabricClient();

NameValueCollection applicationParameters = new NameValueCollection();
applicationParameters["MySecret"] = "I6jCCAeYCAxgFhBXABFxzAt ... gNBRyeWFXl2VydmjZNwJIM=";

ApplicationDescription applicationDescription = new ApplicationDescription(
    applicationName: new Uri("fabric:/MyApp"),
    applicationTypeName: "MyAppType",
    applicationTypeVersion: "1.0.0",
    applicationParameters: applicationParameters)
);

await fabricClient.ApplicationManager.CreateApplicationAsync(applicationDescription);

Hizmet kodundan şifrelenmiş gizli dizilerin şifresini çözme

Parametrelere ve ortam değişkenlerine erişmeye yönelik API'ler, şifrelenmiş değerlerin kolay şifre çözmesini sağlar. Şifrelenmiş dize şifreleme için kullanılan sertifika hakkında bilgi içerdiğinden, sertifikayı el ile belirtmeniz gerekmez. Sertifikanın yalnızca hizmetin üzerinde çalıştığı düğüme yüklenmesi gerekir.

// Access decrypted parameters from Settings.xml
ConfigurationPackage configPackage = FabricRuntime.GetActivationContext().GetConfigurationPackageObject("Config");
bool MySecretIsEncrypted = configPackage.Settings.Sections["MySettings"].Parameters["MySecret"].IsEncrypted;
if (MySecretIsEncrypted)
{
    SecureString MySecretDecryptedValue = configPackage.Settings.Sections["MySettings"].Parameters["MySecret"].DecryptValue();
}

// Access decrypted environment variables from ServiceManifest.xml
// Note: you do not have to call any explicit API to decrypt the environment variable.
string MyEnvVariable = Environment.GetEnvironmentVariable("MyEnvVariable");

Sonraki adımlar