Central Secrets Store in Azure Service FabricCentral Secrets Store in Azure Service Fabric

In diesem Artikel wird beschrieben, wie Sie den Central Secrets Store (CSS) in Azure Service Fabric zum Erstellen von Geheimnissen in Service Fabric-Anwendungen verwenden.This article describes how to use Central Secrets Store (CSS) in Azure Service Fabric to create secrets in Service Fabric applications. CSS ist ein lokaler Geheimnisspeichercache, der verwendet wird, um vertrauliche Daten wie Kennwörter, Token und Schlüssel im Arbeitsspeicher verschlüsselt zu speichern.CSS is a local secret store cache that keeps sensitive data, such as a password, tokens, and keys, encrypted in memory.

Aktivieren von Central Secrets StoreEnable Central Secrets Store

Fügen Sie Ihrer Clusterkonfiguration das folgende Skript unter fabricSettings hinzu, um CSS zu aktivieren.Add the following script to your cluster configuration under fabricSettings to enable CSS. Es wird empfohlen, ein anderes Zertifikat als ein Clusterzertifikat für CSS zu verwenden.We recommend that you use a certificate other than a cluster certificate for CSS. Stellen Sie sicher, dass das Verschlüsselungszertifikat auf allen Knoten installiert ist und dass NetworkService über Leseberechtigung für den privaten Schlüssel des Zertifikats verfügt.Make sure the encryption certificate is installed on all nodes and that NetworkService has read permission to the certificate's private key.

  "fabricSettings": 
  [
      ...
  {
      "name":  "CentralSecretService",
      "parameters":  [
              {
                  "name":  "IsEnabled",
                  "value":  "true"
              },
              {
                  "name":  "MinReplicaSetSize",
                  "value":  "3"
              },
              {
                  "name":  "TargetReplicaSetSize",
                  "value":  "3"
              },
               {
                  "name" : "EncryptionCertificateThumbprint",
                  "value": "<thumbprint>"
               }
              ,
              ],
          },
          ]
   }
      ...
   ]

Deklarieren der GeheimnisressourceDeclare a secret resource

Sie können eine Geheimnisressource mit der Azure Resource Manager-Vorlage oder mit der REST-API erstellen.You can create a secret resource by using either the Azure Resource Manager template or the REST API.

Verwenden von Resource ManagerUse Resource Manager

Verwenden Sie die folgende Vorlage, um Resource Manager zum Erstellen der Geheimnisressource zu verwenden.Use the following template to use Resource Manager to create the secret resource. Die Vorlage erstellt eine supersecret-Geheimnisressource, doch es ist noch kein Wert für die Geheimnisressource festgelegt.The template creates a supersecret secret resource, but no value is set for the secret resource yet.

   "resources": [
      {
        "apiVersion": "2018-07-01-preview",
        "name": "supersecret",
        "type": "Microsoft.ServiceFabricMesh/secrets",
        "location": "[parameters('location')]", 
        "dependsOn": [],
        "properties": {
          "kind": "inlinedValue",
            "description": "Application Secret",
            "contentType": "text/plain",
          }
        }
      ]

Verwenden der REST-APIUse the REST API

Um eine supersecret-Geheimnisressource mit der Rest-API zu erstellen, nehmen Sie eine PUT-Anforderung an https://<clusterfqdn>:19080/Resources/Secrets/supersecret?api-version=6.4-preview vor.To create a supersecret secret resource by using the REST API, make a PUT request to https://<clusterfqdn>:19080/Resources/Secrets/supersecret?api-version=6.4-preview. Sie benötigen das Clusterzertifikat oder das Administratorclientzertifikat, um eine Geheimnisressource zu erstellen.You need the cluster certificate or admin client certificate to create a secret resource.

Invoke-WebRequest  -Uri https://<clusterfqdn>:19080/Resources/Secrets/supersecret?api-version=6.4-preview -Method PUT -CertificateThumbprint <CertThumbprint>

Festlegen des GeheimniswertsSet the secret value

Verwenden der Resource Manager-VorlageUse the Resource Manager template

Verwenden Sie die folgende Resource Manager-Vorlage, um die Geheimnisressource zu erstellen und festzulegen.Use the following Resource Manager template to create and set the secret value. Mit dieser Vorlage wird der Geheimniswert für die supersecret-Geheimnisressource als Version ver1 festgelegt.This template sets the secret value for the supersecret secret resource as version ver1.

  {
  "parameters": {
  "supersecret": {
      "type": "string",
      "metadata": {
        "description": "supersecret value"
      }
   }
  },
  "resources": [
    {
      "apiVersion": "2018-07-01-preview",
        "name": "supersecret",
        "type": "Microsoft.ServiceFabricMesh/secrets",
        "location": "[parameters('location')]", 
        "dependsOn": [],
        "properties": {
          "kind": "inlinedValue",
            "description": "Application Secret",
            "contentType": "text/plain",
        }
    },
    {
      "apiVersion": "2018-07-01-preview",
      "name": "supersecret/ver1",
      "type": "Microsoft.ServiceFabricMesh/secrets/values",
      "location": "[parameters('location')]",
      "dependsOn": [
        "Microsoft.ServiceFabricMesh/secrets/supersecret"
      ],
      "properties": {
        "value": "[parameters('supersecret')]"
      }
    }
  ],

Verwenden der REST-APIUse the REST API

Verwenden Sie das folgende Skript, um die REST-API zum Festlegen des Geheimniswerts zu verwenden.Use the following script to use the REST API to set the secret value.

$Params = @{"properties": {"value": "mysecretpassword"}}
Invoke-WebRequest -Uri https://<clusterfqdn>:19080/Resources/Secrets/supersecret/values/ver1?api-version=6.4-preview -Method PUT -Body $Params -CertificateThumbprint <ClusterCertThumbprint>

Verwenden des Geheimnisses in Ihrer AnwendungUse the secret in your application

Führen Sie die folgenden Schritte aus, um das Geheimnis in Ihrer Service Fabric Anwendung zu verwenden.Follow these steps to use the secret in your Service Fabric application.

  1. Fügen Sie in der Datei settings.xml einen Abschnitt mit dem folgenden Codeausschnitt hinzu.Add a section in the settings.xml file with the following snippet. Beachten Sie dabei, dass der Wert das Format {secretname:version} aufweist.Note here that the value is in the format {secretname:version}.

      <Section Name="testsecrets">
       <Parameter Name="TopSecret" Type="SecretsStoreRef" Value="supersecret:ver1"/
      </Section>
    
  2. Importieren Sie den Abschnitt in ApplicationManifest.xml.Import the section in ApplicationManifest.xml.

      <ServiceManifestImport>
        <ServiceManifestRef ServiceManifestName="testservicePkg" ServiceManifestVersion="1.0.0" />
        <ConfigOverrides />
        <Policies>
          <ConfigPackagePolicies CodePackageRef="Code">
            <ConfigPackage Name="Config" SectionName="testsecrets" EnvironmentVariableName="SecretPath" />
            </ConfigPackagePolicies>
        </Policies>
      </ServiceManifestImport>
    

    Die Umgebungsvariable SecretPath verweist auf das Verzeichnis, in dem alle Geheimnisse gespeichert sind.The environment variable SecretPath will point to the directory where all secrets are stored. Jeder unter dem Abschnitt testsecrets aufgeführte Parameter wird in einer separaten Datei gespeichert.Each parameter listed under the testsecrets section is stored in a separate file. Die Anwendung kann das Geheimnis jetzt wie folgt verwenden:The application can now use the secret as follows:

    secretValue = IO.ReadFile(Path.Join(Environment.GetEnvironmentVariable("SecretPath"),  "TopSecret"))
    
  3. Binden Sie die Geheimnisse in einen Container ein.Mount the secrets to a container. Die einzige Änderung, die Sie vornehmen müssen, um die Geheimnisse im Container verfügbar zu machen, besteht im specify eines Bereitstellungspunkts in <ConfigPackage>.The only change required to make the secrets available inside the container is to specify a mount point in <ConfigPackage>. Der folgende Codeausschnitt ist die geänderte Datei ApplicationManifest.xml.The following snippet is the modified ApplicationManifest.xml.

    <ServiceManifestImport>
        <ServiceManifestRef ServiceManifestName="testservicePkg" ServiceManifestVersion="1.0.0" />
        <ConfigOverrides />
        <Policies>
          <ConfigPackagePolicies CodePackageRef="Code">
            <ConfigPackage Name="Config" SectionName="testsecrets" MountPoint="C:\secrets" EnvironmentVariableName="SecretPath" />
            <!-- Linux Container
             <ConfigPackage Name="Config" SectionName="testsecrets" MountPoint="/mnt/secrets" EnvironmentVariableName="SecretPath" />
            -->
          </ConfigPackagePolicies>
        </Policies>
      </ServiceManifestImport>
    

    Geheimnisse stehen unter dem Bereitstellungspunkt in Ihrem Container zur Verfügung.Secrets are available under the mount point inside your container.

  4. Sie können das Geheimnis an eine Prozessumgebungsvariable binden, indem Sie Type='SecretsStoreRef angeben.You can bind a secret to a process environment variable by specifying Type='SecretsStoreRef. Der folgende Codeausschnitt ist ein Beispiel dafür, wie Sie supersecret (Version ver1) an die Umgebungsvariable MySuperSecret in ServiceManifest.xml binden.The following snippet is an example of how to bind the supersecret version ver1 to the environment variable MySuperSecret in ServiceManifest.xml.

    <EnvironmentVariables>
      <EnvironmentVariable Name="MySuperSecret" Type="SecretsStoreRef" Value="supersecret:ver1"/>
    </EnvironmentVariables>
    

Nächste SchritteNext steps

Erfahren Sie mehr über Anwendungs- und Dienstsicherheit.Learn more about application and service security.