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
- Fájlként csatlakoztatva a tárolóhoz
- Tárolóadattár jelszavára való hivatkozásként
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ípussalKeyVaultReference
é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
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: