Titkosított titkos kódok kezelése a Service Fabric-alkalmazásokban

Ez az útmutató végigvezeti a titkos kódok Service Fabric-alkalmazásokban való kezelésének lépésein. A titkos kódok lehetnek bizalmas információk, például a tárkapcsolati sztringek, jelszavak vagy más értékek, amelyeket nem szabad egyszerű szövegben kezelni.

A titkosított titkos kódok Service Fabric-alkalmazásokban való használata három lépésből áll:

  • Állítson be egy titkosítási tanúsítványt, és titkosítsa a titkos kulcsokat.
  • Titkosított titkos kulcsok megadása egy alkalmazásban.
  • Titkosított titkos kódok visszafejtése a szolgáltatáskódból.

Titkosítási tanúsítvány beállítása és titkos kódok titkosítása

A titkosítási tanúsítvány beállítása és a titkos kódok titkosítására való használata Windows és Linux rendszeren változhat.

Titkosított titkos kódok megadása egy alkalmazásban

Az előző lépés azt ismerteti, hogyan titkosíthat titkos kulcsokat egy tanúsítvánnyal, és hogyan hozhat létre egy base-64 kódolású sztringet egy alkalmazásban való használatra. Ez az alap-64 kódolású sztring megadható titkosított paraméterként egy szolgáltatás Settings.xml vagy egy szolgáltatás ServiceManifest.xml titkosított környezeti változójaként .

Adjon meg egy titkosított paramétert a szolgáltatás Settings.xml konfigurációs fájljában, amelynek attribútuma a IsEncrypted következő: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>

Adjon meg egy titkosított környezeti változót a szolgáltatás ServiceManifest.xml fájljában, amelynek attribútuma a Type következő:Encrypted

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

A titkos kulcsokat a Service Fabric-alkalmazásnak is tartalmaznia kell, ha meg kell adnia egy tanúsítványt az alkalmazásjegyzékben. Adjon hozzá egy SecretsCertificate elemet a ApplicationManifest.xml , és adja hozzá a kívánt tanúsítvány ujjlenyomatát.

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

Megjegyzés

Amikor aktivál egy olyan alkalmazást, amely egy SecretsCertificate értéket ad meg, a Service Fabric megkeresi az egyező tanúsítványt, és megadja az alkalmazás által futtatott identitást a tanúsítvány titkos kulcsának teljes engedélyekkel. A Service Fabric emellett figyeli a tanúsítvány módosításait, és ennek megfelelően alkalmazza újra az engedélyeket. A köznapi névvel deklarált tanúsítványok változásainak észleléséhez a Service Fabric egy rendszeres feladatot futtat, amely megkeresi az összes egyező tanúsítványt, és összehasonlítja az ujjlenyomatok gyorsítótárazott listájával. Új ujjlenyomat észlelésekor az azt jelenti, hogy az adott tulajdonos tanúsítványa megújult. A feladat percenként egyszer fut a fürt minden csomópontján.

Bár a SecretsCertificate lehetővé teszi a tulajdonosalapú deklarációkat, vegye figyelembe, hogy a titkosított beállítások az ügyfélen a beállítás titkosításához használt kulcspárhoz vannak kötve. Győződjön meg arról, hogy az eredeti titkosítási tanúsítvány (vagy azzal egyenértékű) megegyezik a tulajdonosalapú deklarációval, és hogy telepítve van az alkalmazás üzemeltetésére képes fürt minden csomópontján, beleértve a megfelelő titkos kulcsot is. A tulajdonosalapú deklarációnak megfelelő és az eredeti titkosítási tanúsítványsal azonos kulcspárból létrehozott összes érvényes tanúsítvány egyenértékűnek minősül.

Alkalmazás titkos kulcsainak injektálása alkalmazáspéldányokba

Ideális esetben a különböző környezetekben való üzembe helyezésnek a lehető legautomizálhatónak kell lennie. Ez úgy valósítható meg, hogy titkos titkosítást végez egy buildkörnyezetben, és paraméterekként adja meg a titkosított titkos kódokat az alkalmazáspéldányok létrehozásakor.

Felülírható paraméterek használata Settings.xml

A Settings.xml konfigurációs fájl lehetővé teszi az alkalmazás létrehozásakor megadható felülírható paramétereket. Használja az MustOverride attribútumot a paraméter értékének megadása helyett:

<?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>

A Settings.xml értékeinek felülbírálásához deklaráljon egy felülbírálási paramétert a szolgáltatáshoz a 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>

Most az érték megadható alkalmazásparaméterként az alkalmazás példányának létrehozásakor. Az alkalmazáspéldányok létrehozása szkriptelhető a PowerShell használatával, vagy C#-ban írható a buildelési folyamat egyszerű integrációja érdekében.

A PowerShell használatával a paraméter kivonattáblaként lesz megadva a New-ServiceFabricApplication parancsnak:

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

A C# használatával az alkalmazásparaméterek a ApplicationDescription következő formátumban NameValueCollectionvannak megadva:

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);

Titkosított titkos kódok visszafejtése a szolgáltatáskódból

A paraméterek és környezeti változók elérésére szolgáló API-k lehetővé teszik a titkosított értékek egyszerű visszafejtését. Mivel a titkosított sztring információkat tartalmaz a titkosításhoz használt tanúsítványról, nem kell manuálisan megadnia a tanúsítványt. A tanúsítványt csak azon a csomóponton kell telepíteni, amelyen a szolgáltatás fut.

// 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");

Következő lépések