Central Secret Service in Azure Service Fabric
Central Secret Service (CSS), ook wel bekend als Central Secret Store, is een Service Fabric-systeemservice die is bedoeld om geheimen in een cluster te beveiligen. CSS vereent het beheer van geheimen voor SF-toepassingen, waardoor u niet meer hoeft te vertrouwen op versleutelde parameters.
Central Secret Service is een duurzame, gerepliceerde geheime cache in het cluster; geheimen die zijn opgeslagen in CSS, worden in rust versleuteld met een door de klant geleverd versleutelingscertificaat. CSS biedt client-API's voor geheimbeheer, die toegankelijk zijn voor entiteiten die zich als het cluster of een gebruiker met clusterbeheerders kunnen authenticeren. Het Service Fabric runtime-toepassingsmodel kan worden geïntegreerd met CSS, waardoor de declaratie van toepassingsparameters als CSS-geheime verwijzingen mogelijk is.
CSS is ook een belangrijke rol bij het inrichten van toepassingsgeheimen die zijn gedeclareerd als KeyVault-geheimeURI's, in combinatie met beheerde identiteit voor door Azure geïmplementeerde Service Fabric-toepassingen.
Central Secret Service is niet bedoeld als vervanging voor een speciale, externe geheimenbeheerservice, zoals Azure Key Vault.
Notitie
Bij het activeren van CSS op een SF-cluster met een eerdere versie dan 7.1. CU3,kan de activering mislukken en CSS een permanent slechte status geven als het cluster is geconfigureerd voor Windows-verificatie of als onjuist is gedeclareerd of als het bijbehorende certificaat niet EncryptionCertificateThumbprint is geïnstalleerd. In beide gevallen is het raadzaam om het cluster bij te werken naar een SF-runtimeversie die hoger is dan 7.1. CU3 voordat u doorgaat.
Central Secrets Service inschakelen
Als u Central Secret Service wilt inschakelen, moet u de clusterconfiguratie bijwerken zoals hieronder wordt beschreven. U wordt aangeraden een versleutelingscertificaat te gebruiken dat verschilt van uw clustercertificaat. Dit certificaat moet op alle knooppunten zijn geïnstalleerd.
{
"fabricSettings": [
{
"name": "CentralSecretService",
"parameters": [
{
"name": "DeployedState",
"value": "enabled"
},
{
"name" : "EncryptionCertificateThumbprint",
"value": "<thumbprint>"
},
{
"name": "MinReplicaSetSize",
"value": "1"
},
{
"name": "TargetReplicaSetSize",
"value": "3"
}
]
}
]
}
Notitie
De configuratie-instelling 'DeployedState', geïntroduceerd in Service Fabric versie 8.0,is het voorkeursmechanisme voor het in- of uitschakelen van CSS; Deze functie werd in eerdere versies gebruikt door de configuratie-instelling IsEnabled, die nu als verouderd wordt beschouwd.
Geheimmodel van centrale geheime service
De Central Secret Service-API maakt twee typen beschikbaar: geheime resource en geheime versie. Het resourcetype Geheim vertegenwoordigt conceptueel gezien een familie van versies van één geheim dat wordt gebruikt voor een specifiek doel; Voorbeelden zijn: een connection string, een wachtwoord, een eindpuntcertificaat. Een object van het brontype Geheim bevat metagegevens die zijn gekoppeld aan dat geheim, met name soort, inhoudstype en beschrijving. Het type geheime versie vertegenwoordigt een bepaald exemplaar van het bijbehorende geheim en slaat de geheime niet-versleutelde tekst op; als u doorgaat met de bovenstaande voorbeelden, bevat een geheime versie de huidige wachtwoordwaarde, een certificaatobject dat geldig is tot het einde van de maand, enzovoort. Bij het vernieuwen van deze geheimen moeten nieuwe geheime versies worden geproduceerd (en toegevoegd aan CSS).
Als u het model formaliseert, zijn de volgende regels geïmplementeerd en afgedwongen in de CSS-implementatie:
- Een geheime resource kan nul of meer versies hebben
- Elke geheime versie is een onderliggende bron van een bepaalde geheime resource; een versie mag slechts één bovenliggende resource hebben
- Een afzonderlijke geheime versie kan worden verwijderd, zonder dat dit van invloed is op andere versies van hetzelfde geheim
- Als u een geheime resource verwijderd, worden alle versies verwijderd
- De waarde van een geheime versie is onveranderbaar
De volledige set REST-beheer-API's voor geheime resources vindt u hieren voor geheime versies.
Een geheime resource declareer
U kunt een geheime resource maken met behulp van de REST API.
Notitie
Als het cluster gebruik maakt van Windows verificatie zonder een HttpGateway-certificaat, wordt de REST-aanvraag verzonden via een niet-beveiligde HTTP-kanaal. Als u TLS wilt inschakelen voor dit kanaal, moet de clusterdefinitie worden bijgewerkt om een http-gatewayservercertificaat op te geven.
Als u een geheime supersecret resource wilt maken met behulp van REST API, moet u een PUT-aanvraag indienen bij https://<clusterfqdn>:19080/Resources/Secrets/supersecret?api-version=6.4-preview . U moet verifiëren met behulp van een clustercertificaat of een beheerclientcertificaat om een geheime resource te maken.
$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
De geheime waarde instellen
Gebruik het volgende script om de REST API om de geheime waarde in te stellen.
$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>
De geheime waarde onderzoeken
Invoke-WebRequest -CertificateThumbprint <ClusterCertThumbprint> -Method POST -Uri "https:<clusterfqdn>/Resources/Secrets/supersecret/values/ver1/list_value?api-version=6.4-preview"
Het geheim in uw toepassing gebruiken
Een toepassing kan een geheim uit CSS gebruiken door het te declareren als een omgevingsvariabele of door een pad op te geven waar de geheime tekst zonder gegevens moet worden geseraliseerd. Volg deze stappen om te verwijzen naar een CSS-geheim:
- Voeg een sectie toe aan settings.xml bestand met het volgende codefragment. Houd er rekening mee dat de waarde de notatie {
secretname:version}heeft.
<Section Name="testsecrets">
<Parameter Name="TopSecret" Type="SecretsStoreRef" Value="supersecret:ver1"/
</Section>
- Importeer de sectie 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>
Voorbeeld 1: de geheimen aan een container monteren. De enige wijziging die is vereist om de geheimen beschikbaar te maken in de container is naar specify een bevestigingspunt in <ConfigPackage> .
Het volgende fragment is de gewijzigde 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>
Geheimen zijn beschikbaar onder het bevestigingspunt in uw container.
Voorbeeld 2: Bind een geheim aan een procesomgevingsvariabele door op te Type='SecretsStoreRef geven. Het volgende fragment is een voorbeeld van het verbinden van de versie met supersecret ver1 de omgevingsvariabele MySuperSecret in ServiceManifest.xml.
<EnvironmentVariables>
<EnvironmentVariable Name="MySuperSecret" Type="SecretsStoreRef" Value="supersecret:ver1"/>
</EnvironmentVariables>
De SecretPath omgevingsvariabele zal naar de map wijzen waarin alle geheimen worden opgeslagen. Elke parameter die in de sectie testsecrets wordt vermeld, wordt opgeslagen in een afzonderlijk bestand. De toepassing kan het geheim nu als volgt gebruiken:
secretValue = IO.ReadFile(Path.Join(Environment.GetEnvironmentVariable("SecretPath"), "TopSecret"))
Het versleutelingscertificaat van de centrale geheime service roteren
Het is belangrijk te weten dat certificaten geldig blijven voor ontsleuteling na de vervaldatum. Op dit moment raden we u aan om de inrichting van eerdere versleutelingscertificaten na rotatie voort te zetten, om de kans op een vergrendeling te verkleinen. Voor het roteren van het CSS-versleutelingscertificaat zijn de volgende stappen vereist:
- Het nieuwe certificaat inrichten voor elk knooppunt van het cluster. Verwijder op dit moment het vorige versleutelingscertificaat niet/ga door met het inrichten.
- Start een upgrade van de clusterconfiguratie om de waarde van te
EncryptionCertificateThumbprintwijzigen in de SHA-1-vingerafdruk van het nieuwe certificaat. Wanneer de upgrade is voltooid, wordt de bestaande inhoud opnieuw versleuteld met css naar het nieuwe versleutelingscertificaat. Alle geheimen die na dit punt aan CSS worden toegevoegd, worden rechtstreeks versleuteld met het nieuwe versleutelingscertificaat. Omdat de convergentie om alle geheimen die door het nieuwe certificaat worden beveiligd, asynchroon is, is het belangrijk dat het vorige versleutelingscertificaat op alle knooppunten blijft geïnstalleerd en beschikbaar is voor CSS.
Central Secret Service verwijderen uit uw cluster
Safe verwijderen van Central Secret Service uit een cluster vereist twee upgrades. Bij de eerste upgrade wordt CSS functioneel uitgeschakeld, terwijl bij de tweede upgrade de service uit de clusterdefinitie wordt verwijderd, waaronder de permanente verwijdering van de inhoud. Dit proces in twee fases voorkomt het onbedoeld verwijderen van de service en helpt ervoor te zorgen dat er geen zwevende afhankelijkheden op CSS zijn tijdens het verwijderingsproces. Deze functie is beschikbaar vanaf SF-versie 8.0.
Stap 1: CSS DeployedState bijwerken naar verwijderen
Clusterdefinitie upgraden "IsEnabled" = "true" van of van "DeployedState" = "enabled" naar
{
"name": "DeployedState",
"value": "removing"
}
Zodra Central Secret Service de geïmplementeerde status heeft, worden alle binnenkomende geheime API-aanroepen afgewezen, of het nu gaat om directe REST-aanroepen of via activeringen van services die Removing SecretStoreRefs of KeyVaultReferences bevatten. Toepassingen of onderdelen in het cluster die op dit moment nog steeds afhankelijk zijn van CSS, krijgen de status Waarschuwing. Als dit gebeurt, moet de upgrade naar de geïmplementeerde status worden teruggedraaid. Als deze upgrade al is geslaagd, moet er een nieuwe upgrade worden gestart om CSS weer te wijzigen in Removing DeployedState = Enabled . Als Central Secret Service een aanvraag ontvangt terwijl deze de status geïmplementeerd heeft, wordt Removing HTTP-code 401 (niet geautoriseerd) retourneert en krijgt deze de status Waarschuwing.
Stap 2: CSS DeployedState bijwerken naar uitgeschakeld
Clusterdefinitie upgraden van "DeployedState" = "removing" naar
{
"name": "DeployedState",
"value": "disabled"
}
Central Secret Service mag niet meer worden uitgevoerd in het cluster en is niet aanwezig in de lijst met systeemservices. De inhoud van CSS gaat onherstelbaar verloren.
Volgende stappen
- Meer informatie over toepassings- en servicebeveiliging.
- Maak kennis met Beheerde identiteit voor Service Fabric toepassingen.
- De functionaliteit van CSS uitbreiden met KeyVaultReferences