Central Secret Service i Azure Service Fabric
Central Secret Service (CSS), även kallat Central Secret Store, är en Service Fabric som är avsedd att skydda hemligheter i ett kluster. CSS underlättar hanteringen av hemligheter för SF-program, vilket eliminerar behovet av att förlita sig på krypterade parametrar.
Central Secret Service är en beständig, replikerad hemlig cache i klustret. hemligheter som lagras i CSS krypteras i vila till ett krypteringscertifikat som tillhandahålls av kunden. CSS tillhandahåller klient-API:er för hemlighetshantering, som är tillgängliga för entiteter som autentiserar som klustret eller en klusteradministratörsanvändare. Den Service Fabric programmodellen integreras med CSS, vilket gör det möjligt att deklaration av programparametrar som CSS-hemliga referenser.
CSS är också bra på att etablera programhemligheter deklarerade som KeyVault-hemliga URI:er, i kombination med hanterad identitet för Azure-distribuerade Service Fabric Applications.
Central Secret Service är inte avsedd att ersätta en dedikerad, extern tjänst för hemlighetshantering, till exempel Azure Key Vault.
Anteckning
När du aktiverar CSS på ett SF-kluster som kör en tidigare version än 7.1. CU3, aktiveringen kan misslyckas och låta CSS vara i ett permanent felaktigt tillstånd om klustret har konfigurerats för Windows-autentisering eller om har deklarerats felaktigt eller motsvarande certifikat EncryptionCertificateThumbprint inte har installerats. I båda fallen rekommenderar vi att du uppgraderar klustret till en SF-körningsversion som är senare än 7.1. CU3 innan du fortsätter.
Aktivera Central Secrets Service
Om du vill aktivera Central Secret Service uppdaterar du klusterkonfigurationen enligt beskrivningen nedan. Vi rekommenderar att du använder ett krypteringscertifikat som skiljer sig från ditt klustercertifikat. Det här certifikatet måste installeras på alla noder.
{
"fabricSettings": [
{
"name": "CentralSecretService",
"parameters": [
{
"name": "DeployedState",
"value": "enabled"
},
{
"name" : "EncryptionCertificateThumbprint",
"value": "<thumbprint>"
},
{
"name": "MinReplicaSetSize",
"value": "1"
},
{
"name": "TargetReplicaSetSize",
"value": "3"
}
]
}
]
}
Anteckning
Konfigurationsinställningen "DeployedState", som introducerades i Service Fabric version 8.0,är den bästa mekanismen för att aktivera eller inaktivera CSS. Den här funktionen betjänades i tidigare versioner av konfigurationsinställningen "IsEnabled", som nu anses vara föråldrad.
Central Secret Service-hemlighetsmodell
API:et central secret service exponerar två typer: hemlighetsresurs och hemlig version. Den hemliga resurstypen representerar begreppsmässigt en familj med versioner av en enskild hemlighet som används för ett specifikt syfte. exempel är: en anslutningssträng, ett lösenord och ett slutpunktscertifikat. Ett objekt av den hemliga resurstypen innehåller metadata som är associerade med hemligheten, särskilt typ, innehållstyp och beskrivning. Typ av hemlighetsversion representerar en viss instans av dess associerade hemlighet och lagrar hemligheten i klartext (krypterad); Om vi fortsätter med exemplen ovan innehåller en hemlig version det aktuella lösenordsvärdet, ett certifikatobjekt som är giltigt fram till slutet av månaden osv. När dessa hemligheter förnyas bör nya hemliga versioner skapas (och läggas till i CSS).
Formalisering av modellen är följande regler som implementeras och framtvingas i CSS-implementeringen:
- En hemlig resurs kan ha noll eller flera versioner
- Varje hemlig version är underordnad en viss hemlighetsresurs. en version kanske bara har en överordnad resurs
- En enskild hemlighetsversion kan tas bort, utan att andra versioner av samma hemlighet påverkas
- Om du tar bort en hemlig resurs tas alla dess versioner bort
- Värdet för en hemlig version kan inte ändras
En fullständig uppsättning REST-hanterings-API:er för hemliga resurser finns här,och för hemliga versioner, här.
Deklarera en hemlig resurs
Du kan skapa en hemlig resurs med hjälp av REST API.
Anteckning
Om klustret använder Windows utan ett HttpGateway-certifikat skickas REST-begäran via en oskyddad HTTP-kanal. Om du vill aktivera TLS för den här kanalen bör klusterdefinitionen uppdateras för att ange ett http gateway-servercertifikat.
Skapa en hemlig supersecret resurs med hjälp av REST API skicka en PUT-begäran till https://<clusterfqdn>:19080/Resources/Secrets/supersecret?api-version=6.4-preview . Du måste autentisera med hjälp av ett klustercertifikat eller ett administratörsklientcertifikat för att skapa en hemlig resurs.
$json = '{"properties": {"kind": "inlinedValue", "contentType": "text/plain", "description": "supersecret"}}'
Invoke-WebRequest -Uri https://<clusterfqdn>:19080/Resources/Secrets/supersecret?api-version=6.4-preview -Method PUT -CertificateThumbprint <CertThumbprint> -Body $json
Ange det hemliga värdet
Använd följande skript för att använda REST API för att ange det hemliga värdet.
$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>
Granska det hemliga värdet
Invoke-WebRequest -CertificateThumbprint <ClusterCertThumbprint> -Method POST -Uri "https:<clusterfqdn>/Resources/Secrets/supersecret/values/ver1/list_value?api-version=6.4-preview"
Använda hemligheten i ditt program
Ett program kan använda en hemlighet från CSS genom att deklarera den som en miljövariabel eller genom att ange en sökväg där klartext ska serialiseras. Följ dessa steg om du vill referera till en CSS-hemlighet:
- Lägg till ett avsnitt settings.xml filen med följande kodfragment. Observera att värdet har formatet {
secretname:version}.
<Section Name="testsecrets">
<Parameter Name="TopSecret" Type="SecretsStoreRef" Value="supersecret:ver1"/
</Section>
- Importera avsnittet i 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>
Exempel 1: Montera hemligheterna till en container. Den enda ändring som krävs för att göra hemligheterna tillgängliga i containern är specify en monteringspunkt i <ConfigPackage> .
Följande kodfragment är det ändrade 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>
Hemligheter är tillgängliga under monteringspunkten i containern.
Exempel 2: Binda en hemlighet till en processmiljövariabel genom att ange Type='SecretsStoreRef . Följande kodfragment är ett exempel på hur du binder supersecret versionen ver1 till miljövariabeln MySuperSecret i ServiceManifest.xml.
<EnvironmentVariables>
<EnvironmentVariable Name="MySuperSecret" Type="SecretsStoreRef" Value="supersecret:ver1"/>
</EnvironmentVariables>
Miljövariabeln SecretPath pekar på katalogen där alla hemligheter lagras. Varje parameter som anges under testsecrets avsnittet lagras i en separat fil. Programmet kan nu använda hemligheten på följande sätt:
secretValue = IO.ReadFile(Path.Join(Environment.GetEnvironmentVariable("SecretPath"), "TopSecret"))
Rotera krypteringscertifikatet för central hemlig tjänst
Det är viktigt att notera att certifikat fortfarande är giltiga för dekryptering efter att de har gått ut. För stunden rekommenderar vi att du fortsätter att etablera tidigare krypteringscertifikat efter rotation för att minska risken för utelåsning. Följande steg krävs för att rotera CSS-krypteringscertifikatet:
- Etablera det nya certifikatet till varje nod i klustret. För stunden ska du inte ta bort/fortsätta att etablera det tidigare krypteringscertifikatet.
- Starta en uppgradering av klusterkonfigurationen om du vill ändra
EncryptionCertificateThumbprintvärdet för till SHA-1-tumavtrycket för det nya certifikatet. När uppgraderingen är klar börjar CSS kryptera om det befintliga innehållet till det nya krypteringscertifikatet. Alla hemligheter som läggs till i CSS efter den här punkten krypteras direkt till det nya krypteringscertifikatet. Eftersom konvergensen med att skydda alla hemligheter av det nya certifikatet är asynkron är det viktigt att det tidigare krypteringscertifikatet förblir installerat på alla noder och är tillgängligt för CSS.
Ta bort Central Secret Service från klustret
Valv borttagning av Central Secret Service från ett kluster kräver två uppgraderingar. Den första uppgraderingen inaktiverar CSS, medan den andra uppgraderingen tar bort tjänsten från klusterdefinitionen, vilket innefattar permanent borttagning av dess innehåll. Den här tvåstegsprocessen förhindrar oavsiktlig borttagning av tjänsten och ser till att det inte finns några överblivna beroenden av CSS under borttagningsprocessen. Den här funktionen är tillgänglig från SF version 8.0 och senare.
Steg 1: Uppdatera CSS DeployedState till att ta bort
Uppgradera klusterdefinitionen "IsEnabled" = "true" från eller "DeployedState" = "enabled" från till
{
"name": "DeployedState",
"value": "removing"
}
När Central Secret Service har försatts i det distribuerade tillståndet avvisas alla inkommande API-anrop, oavsett om det är direkta REST-anrop eller via aktiveringar av tjänster som inkluderar Removing SecretStoreRefs eller KeyVaultReferences. Alla program eller komponenter i klustret som fortfarande är beroende av CSS i det här läget förlitar sig på varningstillstånd. Om detta inträffar ska uppgraderingen till distribuerat tillstånd återställas. Om uppgraderingen redan har lyckats, ska en ny uppgradering initieras för att ändra CSS tillbaka till Removing DeployedState = Enabled . Om Central Secret Service tar emot en begäran i distribuerat tillstånd returnerar den Removing HTTP-kod 401 (obehörig) och försätta sig i tillståndet Varning.
Steg 2: Uppdatera CSS DeployedState till inaktiverad
Uppgradera klusterdefinitionen "DeployedState" = "removing" från till
{
"name": "DeployedState",
"value": "disabled"
}
Central Secret Service bör inte längre köras i klustret och kommer inte att finnas i listan över systemtjänster. Innehållet i CSS går förlorat oåterkalleligt.
Nästa steg
- Läs mer om program- och tjänstsäkerhet.
- Get introduced to Managed Identity for Service Fabric Applications.
- Utöka CSS:s funktioner med KeyVaultReferences