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.
- Bir şifreleme sertifikası ayarlayın ve Windows kümelerinde gizli dizileri şifreleyin.
- Linux kümelerinde bir şifreleme sertifikası ayarlayın ve gizli dizileri şifreleyin.
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-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 NameValueCollection
belirtilir:
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
- Service Fabric Gizli Dizi Deposu
- Uygulama ve hizmet güvenliği hakkında daha fazla bilgi edinin