KeyVaultReference-támogatás Azure-alapú Service Fabric-alkalmazásokhoz

A felhőalkalmazások létrehozásakor gyakori kihívás a titkos kódok biztonságos elosztása és kezelése az alkalmazások számára. A Service Fabric KeyVaultReference támogatása megkönnyíti a használatát. A konfigurálás után hivatkozhat a Key Vaultban az alkalmazásdefinícióban tárolt titkos kód URL-címére, és a Service Fabric kezeli a titkos kód beolvasását és az alkalmazás aktiválását. A szolgáltatás "SF által felügyelt" verziójának használatakor a Service Fabric figyelheti a Key Vaultot is, és automatikusan aktiválhatja a működés közbeni alkalmazásparaméter-frissítéseket, amint a titkos kulcsok forognak a tárolóban.

Titkos kulcsok szolgáltatásának lehetőségei a Service Fabricben lévő alkalmazásoknak

A titkos kódok Service Fabric-alkalmazásokba való továbbításának klasszikus módja a titkosított paraméterek deklarálása volt. Ez azt jelentette, hogy titkos kulcsokat titkosított egy titkosítási tanúsítványon, és ezeket a titkosított titkos kulcsokat átadta az alkalmazásnak. Ennek a módszernek néhány hátránya van: a titkosítási tanúsítvány kezelésének szükségessége, a titkos kódok felfedése az üzembe helyezési folyamatban, valamint az üzembe helyezett alkalmazáshoz csatolt titkos kulcsok metaadatainak láthatóságának hiánya. Hasonlóképpen, a titkos kulcsok elforgatásához alkalmazástelepítésre van szükség. Ha nem önálló fürtöt futtat, többé nem javasoljuk a titkosított paraméterek használatát.

Egy másik lehetőség a titkos tár referenciáinak használata. Ez a felület lehetővé teszi az alkalmazás titkos kulcsainak központi kezelését, az üzembe helyezett titkos kódok metaadatainak jobb láthatóságát, és lehetővé teszi a titkosítási tanúsítvány központi kezelését. Egyes szolgáltatások az önálló Service Fabric-fürtök futtatásakor előnyben részesíthetik ezt a titkos kódkezelési stílust.

A mai javaslat az, hogy lehetőség szerint csökkentse a titkos kódokra való támaszkodást a Service Fabric-alkalmazások felügyelt identitásainak használatával. A felügyelt identitások használatával közvetlenül hitelesíthetők az Azure Storage-ban, az Azure SQL-ben és egyebekben. Ez azt jelenti, hogy a Microsoft Entra-hitelesítést támogató Azure-szolgáltatások elérésekor nincs szükség külön hitelesítő adatok kezelésére.

Ha nem lehet felügyelt identitást használni ügyfélként, javasoljuk a KeyVaultReferences használatát. A Key Vault közvetlen eléréséhez a Felügyelt identitás helyett a KeyVaultReferencest kell használnia. A KeyVaultReferences segít növelni az alkalmazás rendelkezésre állását, mert kényszeríti, hogy titkos módosítások történjenek a működés közbeni frissítések során. Emellett jobban skálázható, mivel a titkos kulcsok gyorsítótárazva vannak, és a fürtön belülről lesznek kiszolgálva. Ha az alkalmazás jelenleg titkosított paramétereket használ, az alkalmazás kódjában csak minimális módosítás szükséges a KeyVaultReferences használatához. Az alkalmazás továbbra is számíthat arra, hogy egyetlen titkos kulcsot fog létrehozni, és hogy a titkos kód a folyamat teljes élettartama alatt ugyanaz legyen.

Előfeltételek

  • Felügyelt identitás Service Fabric-alkalmazásokhoz

    A Service Fabric KeyVaultReference támogatása egy alkalmazás felügyelt identitásával hívja le a titkos kulcsokat az alkalmazás nevében. Az alkalmazást ARM-en keresztül kell üzembe helyeznie, és hozzá kell rendelnie egy felügyelt identitást. Kövesse ezt a dokumentumot az alkalmazás felügyelt identitásának engedélyezéséhez.

  • Központi titkos kódok tárolója (CSS).

    A Központi titkos kódok tárolója (CSS) a Service Fabric titkosított helyi titkos kódok gyorsítótára. Ez a funkció CSS használatával védi és megőrzi a titkos kulcsokat a Key Vaultból való lekérés után. A rendszerszolgáltatás engedélyezéséhez a KeyVaultReferences használatához van szükség. Kövesse ezt a dokumentumot a CSS engedélyezéséhez és konfigurálásához.

  • Az alkalmazás felügyelt identitás-hozzáférési engedélyének megadása a Key Vaulthoz

    Erre a dokumentumra hivatkozva megtudhatja, hogyan biztosíthat felügyelt identitás hozzáférést a Key Vaulthoz. Azt is vegye figyelembe, hogy ha rendszer által hozzárendelt felügyelt identitást használ, a felügyelt identitás csak az alkalmazás üzembe helyezése után jön létre. Ez versenyfeltételeket hozhat létre, amikor az alkalmazás megpróbál hozzáférni a titkos kódhoz, mielőtt az identitás hozzáférést kapna a tárolóhoz. A rendszer által hozzárendelt identitás neve a következő lesz {cluster name}/{application name}/{service name}: .

KeyVaultReferences vs. Managed KeyVaultReferences

A KeyVaultReferences alapgondolata az, hogy az alkalmazásparaméter értékét nem titkos kulcsként állítja be, hanem a Key Vault URL-címére állítja, amelyet az alkalmazás aktiválásakor a titkos érték fog feloldani. A Key Vaultban például https://my.vault.azure.net/secrets/MySecret/ egyetlen titkos kód több verzióval is rendelkezhet, példáulhttps://my.vault.azure.net/secrets/MySecret/<oid1>.<oid2> KeyVaultReference használata esetén az értéknek verziószámozott hivatkozásnak (https://my.vault.azure.net/secrets/MySecret/<oid1>) kell lennie. Ha például a tárolóban elforgatja a titkos kulcsot, <oid2>aktiválnia kell egy alkalmazásfrissítést az új hivatkozásra. ManagedKeyVaultReference használata esetén az értéknek verzió nélküli hivatkozásnakhttps://my.vault.azure.net/secrets/MySecret/ () kell lennie. A Service Fabric feloldja a legújabb példányt <oid1> , és ezzel a titkos kóddal aktiválja az alkalmazást. Ha a tárolóban lévő titkos kulcsot a következőre <oid2>forgatja, a Service Fabric automatikusan elindít egy alkalmazásparaméter-frissítést, hogy <oid2> az Ön nevében lépjen át.

Megjegyzés:

A Service Fabric-alkalmazások KeyVaultReference (verziószámozott titkos kulcsok) támogatása általánosan elérhető a Service Fabric 7.2 CU5-ös verziójától kezdve. Javasoljuk, hogy a funkció használata előtt frissítsen erre a verzióra.

Megjegyzés:

A Service Fabric-alkalmazások felügyelt KeyVaultReference (verzió nélküli titkos kulcsok) támogatása általánosan elérhető a Service Fabric 9.0-s verziójától kezdve.

KeyVaultReferences használata az alkalmazásban

A KeyVaultReferences felhasználható

Környezeti változóként

<EnvironmentVariables>
      <EnvironmentVariable Name="MySecret" Type="KeyVaultReference" Value="<KeyVaultURL>"/>
</EnvironmentVariables>
string secret =  Environment.GetEnvironmentVariable("MySecret");

Fájlként csatlakoztatva a tárolóhoz

  • Szakasz hozzáadása a settings.xml fájlhoz

    Paraméter definiálása MySecret típussal KeyVaultReference és értékkel <KeyVaultURL>

    <Section Name="MySecrets">
        <Parameter Name="MySecret" Type="KeyVaultReference" Value="<KeyVaultURL>"/>
    </Section>
    
  • Az ApplicationManifest.xml új szakaszának hivatkozása a következőben: <ConfigPackagePolicies>

    <ServiceManifestImport>
        <Policies>
        <IdentityBindingPolicy ServiceIdentityRef="MyServiceMI" ApplicationIdentityRef="MyApplicationMI" />
        <ConfigPackagePolicies CodePackageRef="Code">
            <!--Linux container example-->
            <ConfigPackage Name="Config" SectionName="MySecrets" EnvironmentVariableName="SecretPath" MountPoint="/var/secrets"/>
            <!--Windows container example-->
            <!-- <ConfigPackage Name="Config" SectionName="dbsecrets" EnvironmentVariableName="SecretPath" MountPoint="C:\secrets"/> -->
        </ConfigPackagePolicies>
        </Policies>
    </ServiceManifestImport>
    
  • A szolgáltatáskód titkos kulcsainak felhasználása

    A felsorolt <Section Name=MySecrets> paraméterek mindegyike egy fájl lesz a EnvironmentVariable SecretPath által mutatott mappában. Az alábbi C#-kódrészlet bemutatja, hogyan olvasható be a MySecret az alkalmazásból.

    string secretPath = Environment.GetEnvironmentVariable("SecretPath");
    using (StreamReader sr = new StreamReader(Path.Combine(secretPath, "MySecret"))) 
    {
        string secret =  sr.ReadToEnd();
    }
    

    Megjegyzés:

    A MountPoint szabályozza azt a mappát, amelyben a titkos értékeket tartalmazó fájlok csatlakoztatva lesznek.

Tárolóadattár jelszavára való hivatkozásként

 <Policies>
      <ContainerHostPolicies CodePackageRef="Code">
        <RepositoryCredentials AccountName="MyACRUser" Type="KeyVaultReference" Password="<KeyVaultURL>"/>
      </ContainerHostPolicies>

Felügyelt KeyVaultReferences használata az alkalmazásban

Először engedélyeznie kell a titkos kódok monitorozását a fürtdefiníció frissítésével, hogy hozzáadja a EnableSecretMonitoring beállítást a többi szükséges CSS-konfiguráció mellett:

"fabricSettings": [
    {
        "name": "CentralSecretService",     
        "parameters": [
            {
                "name": "EnableSecretMonitoring",
                "value": "true"
            },
            {
                "name":  "DeployedState",
                "value":  "enabled"
            },
            {
                "name" : "EncryptionCertificateThumbprint",
                "value": "<thumbprint>"
            },
            {
                "name":  "MinReplicaSetSize",
                "value":  "<size>"
            },
            {
                "name":  "TargetReplicaSetSize",
                "value":  "<size>"
            }
        ]
    }
],

Megjegyzés:

Az alapértelmezett érték a jövőben is előfordulhat true

A fürtfrissítés befejezése után a felhasználói alkalmazás frissíthető. Bárhol használható KeyVaultReference, a ManagedKeyVaultReference is használható, például:

    <Section Name="MySecrets">
        <Parameter Name="MySecret" Type="ManagedKeyVaultReference" Value="[MySecretReference]"/>
    </Section>

A ManagedKeyVaultReferences megadásának elsődleges különbsége, hogy az alkalmazástípus-jegyzékben nem lehet őket keményen kódolni. Ezeket alkalmazásszintű paraméterekként kell deklarálni, továbbá felül kell őket bírálni az ARM-alkalmazásdefinícióban.

Íme egy részlet egy jól formázott jegyzékből

<?xml version="1.0" encoding="utf-8"?>
<ApplicationManifest ApplicationTypeName="MyAppType" ApplicationTypeVersion="1.0.0">
  <Parameters>
    <Parameter Name="MySecretReference" DefaultValue="" />
  </Parameters>
  <ServiceManifestImport>
    <EnvironmentOverrides CodePackageRef="Code">
      <EnvironmentVariable Name="MySecret" Value="[MySecretReference]" Type="ManagedKeyVaultReference" />
    </EnvironmentOverrides>
    <Policies>
      <IdentityBindingPolicy ServiceIdentityRef="MySvcIdentity" ApplicationIdentityRef="MyAppIdentity" />
    </Policies>
  </ServiceManifestImport>
  <Principals>
    <ManagedIdentities>
      <ManagedIdentity Name="MyAppIdentity" />
    </ManagedIdentities>
  </Principals>
</ApplicationManifest>

és az alkalmazáserőforrás-definíció egy részlete:

{
    "type": "Microsoft.ServiceFabric/clusters/applications",
    "name": "MyApp",
    "identity": {
        "type" : "userAssigned",
        "userAssignedIdentities": {
            "[variables('userAssignedIdentityResourceId')]": {}
        }
    },
    "properties": {
        "parameters": {
            "MySecretReference": "https://my.vault.azure.net/secrets/MySecret/"
        },
        "managedIdentities": [
            {
            "name" : "MyAppIdentity",
            "principalId" : "<guid>"
            }
        ]
    }
}

Mind a ManagedKeyVaultReference alkalmazásparaméterként való deklarálása, mind pedig a paraméter üzembe helyezésekor történő felülírása szükséges ahhoz, hogy a Service Fabric sikeresen kezelje az üzembe helyezett titkos kulcs életciklusát.

Következő lépések