Dela via


Distribuera programhemligheter till ett Service Fabric-hanterat kluster

Hemligheter kan vara känslig information, till exempel lagring anslutningssträng, lösenord eller andra värden som inte ska hanteras i oformaterad text. Vi rekommenderar att du använder Azure Key Vault för att hantera nycklar och hemligheter för Service Fabric-hanterade kluster och utnyttja det för den här artikeln. Att använda hemligheter i ett program är dock molnplattformsoberoende för att tillåta att program distribueras till ett kluster som finns var som helst.

Det rekommenderade sättet att hantera tjänstkonfigurationsinställningar är via tjänstkonfigurationspaket. Konfigurationspaket är versionshanterade och uppdaterbara via hanterade löpande uppgraderingar med hälsoverifiering och automatisk återställning. Detta rekommenderas för global konfiguration eftersom det minskar risken för ett globalt tjänststopp. Krypterade hemligheter är inget undantag. Service Fabric har inbyggda funktioner för kryptering och dekryptering av värden i ett konfigurationspaket Inställningar.xml fil med hjälp av certifikatkryptering.

Följande diagram illustrerar det grundläggande flödet för hemlig hantering i ett Service Fabric-program:

översikt över hemlig hantering

Det finns fyra huvudsteg i det här flödet:

  1. Hämta ett datachiffreringscertifikat.
  2. Installera certifikatet i klustret.
  3. Kryptera hemliga värden när du distribuerar ett program med certifikatet och mata in dem i en tjänsts Inställningar.xml konfigurationsfil.
  4. Läs krypterade värden från Inställningar.xml genom att dekryptera med samma kodningscertifikat.

Azure Key Vault används här som en säker lagringsplats för certifikat och som ett sätt att få certifikat installerade på de Service Fabric-hanterade klusternoderna i Azure.

Ett exempel på hur du implementerar programhemligheter finns i Hantera programhemligheter.

Alternativt stöder vi även KeyVaultReference. Service Fabric KeyVaultReference-stöd gör det enkelt att distribuera hemligheter till dina program genom att referera till URL:en för hemligheten som lagras i Key Vault

Skapa ett datachiffreringscertifikat

Om du vill skapa ett eget nyckelvalv och konfigurera certifikat följer du anvisningarna från Azure Key Vault med hjälp av Azure CLI, PowerShell, Portal med mera.

Kommentar

Nyckelvalvet måste vara aktiverat för malldistribution för att beräkningsresursprovidern ska kunna hämta certifikat från det och installera det på klusternoder.

Installera certifikatet i klustret

Det här certifikatet måste installeras på varje nod i klustret och Service Fabric-hanterade kluster gör det enkelt. Den hanterade klustertjänsten kan skicka versionsspecifika hemligheter till noderna för att installera hemligheter som inte ändras ofta som att installera en privat rotcertifikatutfärdare till noderna. För de flesta produktionsarbetsbelastningar föreslår vi att du använder KeyVault-tillägget. Tillägget för den virtuella Key Vault-datorn ger automatisk uppdatering av certifikat som lagras i ett Azure-nyckelvalv jämfört med en statisk version.

För hanterade kluster behöver du tre värden, två från Azure Key Vault och ett som du bestämmer dig för för det lokala butiksnamnet på noderna.

Parametrar:

  • Source Vault: Det här är
    • t.ex. /subscriptions/{subscriptionid}/resourceGroups/myrg1/providers/Microsoft.KeyVault/vaults/mykeyvault1
  • Certificate URL: Det här är den fullständiga key vault-hemliga identifieraren och är skiftlägeskänslig och oföränderlig
  • Certificate Store: Det här är det lokala certifikatarkivet på noderna där certifikatet ska placeras
    • certifikatarkivets namn på noderna, t.ex. "MY"

Service Fabric-hanterade kluster har stöd för två metoder för att lägga till versionsspecifika hemligheter till dina noder.

  1. Portal när det första klustret skapas endast Infoga värden ovanifrån i det här området:

indata för portalhemligheter

  1. Azure Resource Manager under skapande eller när som helst
{
  "apiVersion": "2021-05-01",
  "type": "Microsoft.ServiceFabric/managedclusters/nodetypes",
  "properties": {
    "vmSecrets": [
      {
        "sourceVault": {
          "id": "/subscriptions/{subscriptionid}/resourceGroups/myrg1/providers/Microsoft.KeyVault/vaults/mykeyvault1"
        },
        "vaultCertificates": [
          {
            "certificateStore": "MY",
            "certificateUrl": "https://mykeyvault1.vault.azure.net/certificates/{certificatename}/{secret-version}"
          }
        ]
      }
    ]
  }
}