Share via


Versleutelde geheimen beheren in Service Fabric-toepassingen

Deze handleiding begeleidt u bij het beheren van geheimen in een Service Fabric-toepassing. Geheimen kunnen gevoelige informatie zijn, zoals opslag verbindingsreeks s, wachtwoorden of andere waarden die niet mogen worden verwerkt in tekst zonder opmaak.

Het gebruik van versleutelde geheimen in een Service Fabric-toepassing omvat drie stappen:

  • Stel een versleutelingscertificaat in en versleutel geheimen.
  • Geef versleutelde geheimen op in een toepassing.
  • Versleutelde geheimen ontsleutelen uit servicecode.

Een versleutelingscertificaat instellen en geheimen versleutelen

Het instellen van een versleutelingscertificaat en het gebruik ervan voor het versleutelen van geheimen varieert tussen Windows en Linux.

Versleutelde geheimen opgeven in een toepassing

In de vorige stap wordt beschreven hoe u een geheim versleutelt met een certificaat en een met base 64 gecodeerde tekenreeks produceert voor gebruik in een toepassing. Deze met base 64 gecodeerde tekenreeks kan worden opgegeven als een versleutelde parameter in de Settings.xml van een service of als een versleutelde omgevingsvariabele in de ServiceManifest.xml van een service.

Geef een versleutelde parameter op in het Settings.xml configuratiebestand van uw service met het IsEncrypted kenmerk ingesteld op 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>

Geef een versleutelde omgevingsvariabele op in het ServiceManifest.xml-bestand van uw service met het Type kenmerk ingesteld opEncrypted:

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

De geheimen moeten ook worden opgenomen in uw Service Fabric-toepassing door een certificaat op te geven in het toepassingsmanifest. Voeg een SecretsCertificate-element toe aan ApplicationManifest.xml en voeg de vingerafdruk van het gewenste certificaat toe.

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

Notitie

Bij het activeren van een toepassing die een SecretsCertificate opgeeft, vindt Service Fabric het overeenkomende certificaat en verleent de toepassing de identiteit die de toepassing uitvoert onder volledige machtigingen voor de persoonlijke sleutel van het certificaat. Service Fabric controleert ook het certificaat op wijzigingen en past de machtigingen dienovereenkomstig opnieuw toe. Service Fabric voert een periodieke taak uit om wijzigingen te detecteren voor certificaten die zijn gedeclareerd met een algemene naam, waarmee alle overeenkomende certificaten worden gevonden en vergeleken met een lijst met vingerafdrukken in de cache. Wanneer er een nieuwe vingerafdruk wordt gedetecteerd, betekent dit dat een certificaat van dat onderwerp is vernieuwd. De taak wordt eenmaal per minuut uitgevoerd op elk knooppunt van het cluster.

Hoewel secretsCertificate op onderwerp gebaseerde declaraties toestaat, moet u er rekening mee houden dat de versleutelde instellingen zijn gekoppeld aan het sleutelpaar dat is gebruikt om de instelling op de client te versleutelen. U moet ervoor zorgen dat het oorspronkelijke versleutelingscertificaat (of een equivalent) overeenkomt met de declaratie op basis van het onderwerp en dat het is geïnstalleerd, inclusief de bijbehorende persoonlijke sleutel, op elk knooppunt van het cluster waarop de toepassing kan worden gehost. Alle tijd geldige certificaten die overeenkomen met de declaratie op basis van het onderwerp en gebouwd op basis van hetzelfde sleutelpaar als het oorspronkelijke versleutelingscertificaat, worden beschouwd als equivalenten.

Toepassingsgeheimen in toepassingsexemplaren injecteren

In het ideale geval moet de implementatie naar verschillende omgevingen zo geautomatiseerd mogelijk worden. Dit kan worden bereikt door geheime versleuteling uit te voeren in een buildomgeving en de versleutelde geheimen op te geven als parameters bij het maken van toepassingsexemplaren.

Overschrijfbare parameters gebruiken in Settings.xml

Het Settings.xml configuratiebestand staat overschrijfbare parameters toe die kunnen worden opgegeven tijdens het maken van de toepassing. Gebruik het MustOverride kenmerk in plaats van een waarde op te geven voor een parameter:

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

Als u waarden in Settings.xml wilt overschrijven, declareert u een onderdrukkingsparameter voor de service in 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>

De waarde kan nu worden opgegeven als een toepassingsparameter bij het maken van een exemplaar van de toepassing. Het maken van een toepassingsexemplaren kan worden gescript met behulp van PowerShell of geschreven in C#, voor eenvoudige integratie in een buildproces.

Met Behulp van PowerShell wordt de parameter als een hash-tabel aan de New-ServiceFabricApplication opdracht geleverd:

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

Met C# worden toepassingsparameters opgegeven in een 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);

Versleutelde geheimen ontsleutelen uit servicecode

De API's voor toegang tot parameters en omgevingsvariabelen maken eenvoudige ontsleuteling van versleutelde waarden mogelijk. Omdat de versleutelde tekenreeks informatie bevat over het certificaat dat wordt gebruikt voor versleuteling, hoeft u het certificaat niet handmatig op te geven. Het certificaat moet alleen worden geïnstalleerd op het knooppunt waarop de service wordt uitgevoerd.

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

Volgende stappen