Správa šifrovaných tajných kódů v aplikacích Service Fabric
Tato příručka vás provede postupem správy tajných kódů v aplikaci Service Fabric. Tajné kódy můžou být jakékoli citlivé informace, jako jsou připojovací řetězec úložiště, hesla nebo jiné hodnoty, které by neměly být zpracovávány ve formátu prostého textu.
Použití šifrovaných tajných kódů v aplikaci Service Fabric zahrnuje tři kroky:
- Nastavte šifrovací certifikát a zašifrujte tajné kódy.
- Zadejte šifrované tajné kódy v aplikaci.
- Dešifrujte šifrované tajné kódy z kódu služby.
Nastavení šifrovacího certifikátu a šifrování tajných kódů
Nastavení šifrovacího certifikátu a jeho použití k šifrování tajných kódů se liší mezi Windows a Linuxem.
- Nastavte šifrovací certifikát a zašifrujte tajné kódy v clusterech s Windows.
- Nastavte šifrovací certifikát a zašifrujte tajné kódy v clusterech s Linuxem.
Určení šifrovaných tajných kódů v aplikaci
Předchozí krok popisuje, jak zašifrovat tajný kód pomocí certifikátu a vytvořit řetězec kódovaný v base-64 pro použití v aplikaci. Tento řetězec s kódováním base-64 lze zadat jako šifrovaný parametr v Settings.xml služby nebo jako šifrovanou proměnnou prostředí v ServiceManifest.xml služby.
V konfiguračním souboru Settings.xml vaší služby zadejte šifrovaný parametr s atributem nastaveným IsEncrypted
na true
:
<?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>
Zadejte zašifrovanou proměnnou prostředí v souboru ServiceManifest.xml vaší služby s atributem nastaveným Type
na Encrypted
:
<CodePackage Name="Code" Version="1.0.0">
<EnvironmentVariables>
<EnvironmentVariable Name="MyEnvVariable" Type="Encrypted" Value="I6jCCAeYCAxgFhBXABFxzAt ... gNBRyeWFXl2VydmjZNwJIM=" />
</EnvironmentVariables>
</CodePackage>
Tajné kódy by také měly být součástí vaší aplikace Service Fabric zadáním certifikátu v manifestu aplikace. Přidejte element SecretsCertificate do ApplicationManifest.xml a zahrňte kryptografický otisk požadovaného certifikátu.
<ApplicationManifest … >
...
<Certificates>
<SecretsCertificate Name="MyCert" X509FindType="FindByThumbprint" X509FindValue="[YourCertThumbrint]"/>
</Certificates>
</ApplicationManifest>
Poznámka:
Po aktivaci aplikace, která určuje tajný certifikát, služba Service Fabric najde odpovídající certifikát a udělí identitě, kterou aplikace spouští, pod úplnými oprávněními k privátnímu klíči certifikátu. Service Fabric bude také monitorovat změny certifikátu a příslušná oprávnění znovu použít. Service Fabric spustí pravidelnou úlohu, která vyhledá všechny odpovídající certifikáty, a porovná je se seznamem kryptografických otisků uložených v mezipaměti. Když se zjistí nový kryptografický otisk, znamená to, že byl obnoven certifikát daného subjektu. Úloha se spustí jednou za minutu na každém uzlu clusteru.
Zatímco SecretsCertificate umožňuje deklarace založené na předmětu, mějte na paměti, že šifrovaná nastavení jsou svázaná s párem klíčů, který byl použit k šifrování nastavení v klientovi. Musíte zajistit, aby původní šifrovací certifikát (nebo ekvivalent) odpovídal deklaraci na základě subjektu a že je nainstalovaná, včetně odpovídajícího privátního klíče, na každém uzlu clusteru, který by mohl hostovat aplikaci. Všechny časově platné certifikáty odpovídající deklaraci založené na předmětu a vytvořené ze stejné dvojice klíčů jako původní šifrovací certifikát jsou považovány za ekvivalentní.
Vložení tajných kódů aplikací do instancí aplikací
V ideálním případě by nasazení do různých prostředí mělo být co nejvíce automatizované. Toho lze dosáhnout provedením šifrování tajných kódů v prostředí sestavení a poskytnutím šifrovaných tajných kódů jako parametrů při vytváření instancí aplikace.
Použití přepisovatelných parametrů v Settings.xml
Konfigurační soubor Settings.xml umožňuje přepisovatelné parametry, které lze poskytnout při vytváření aplikace. Místo zadání hodnoty parametru MustOverride
použijte atribut:
<?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>
Pokud chcete přepsat hodnoty v Settings.xml, deklarujte parametr přepsání služby v ApplicationManifest.xml:
<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>
Nyní lze hodnotu zadat jako parametr aplikace při vytváření instance aplikace. Vytvoření instance aplikace je možné skriptovat pomocí PowerShellu nebo napsat v jazyce C# pro snadnou integraci v procesu sestavení.
Pomocí PowerShellu New-ServiceFabricApplication
se parametr do příkazu zadává jako tabulka hash:
New-ServiceFabricApplication -ApplicationName fabric:/MyApp -ApplicationTypeName MyAppType -ApplicationTypeVersion 1.0.0 -ApplicationParameter @{"MySecret" = "I6jCCAeYCAxgFhBXABFxzAt ... gNBRyeWFXl2VydmjZNwJIM="}
Pomocí jazyka C# jsou parametry aplikace zadány jako ApplicationDescription
NameValueCollection
:
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);
Dešifrování šifrovaných tajných kódů z kódu služby
Rozhraní API pro přístup k parametrům a proměnným prostředí umožňují snadné dešifrování šifrovaných hodnot. Vzhledem k tomu, že šifrovaný řetězec obsahuje informace o certifikátu použitém k šifrování, nemusíte certifikát zadávat ručně. Certifikát musí být nainstalovaný jenom na uzlu, na kterém je služba spuštěná.
// 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");
Další kroky
- Úložiště tajných kódů Service Fabric
- Další informace o zabezpečení aplikací a služeb