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

Bu kılavuz, Service Fabric uygulamasında gizli dizileri yönetme adımlarında size yol gösterir. Gizli diziler depolama bağlantı dizesi, 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:

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

Ş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 gizli diziyi sertifikayla şifrelemeyi ve bir uygulamada kullanılmak üzere base-64 kodlanmış bir dize oluşturmayı açıklar. Bu temel 64 kodlu 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 özniteliği olarak Type 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 belirtilerek Service Fabric uygulamanıza da eklenmelidir. ApplicationManifest.xml 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ği 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 izleri listesiyle karşılaştıran düzenli bir görev çalıştırır. Yeni bir parmak izi algılandığında, bu 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, bir derleme ortamında gizli dizi şifrelemesi gerçekleştirerek ve uygulama örnekleri oluştururken şifrelenmiş gizli dizileri parametre olarak sağlayarak gerçekleştirilebilir.

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

Settings.xml yapılandırma dosyası, uygulama oluşturma zamanında sağlanabilen geçersiz kılınabilir parametrelere izin verir. MustOverride Bir parametre için 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 değerleri geçersiz kılmak için, ApplicationManifest.xml içinde 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. Derleme işleminde kolay tümleştirme için uygulama örneği oluşturma işlemi PowerShell kullanılarak betik oluşturulabilir veya C# dilinde yazılabilir.

PowerShell kullanılarak parametresi komutuna New-ServiceFabricApplication karma 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 şifrelenmesini 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