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 binnen een cluster te beveiligen. CSS vereenvoudigt het beheer van geheimen voor SF-toepassingen, waardoor u niet hoeft te vertrouwen op versleutelde parameters.
Central Secret Service is een duurzame, gerepliceerde in-cluster geheime cache; geheimen die zijn opgeslagen in CSS worden in rust versleuteld naar een door de klant verstrekt of door een cluster beheerd versleutelingscertificaat. CSS biedt client-API's voor geheimbeheer, toegankelijk voor entiteiten die verifiëren als het cluster of een gebruiker van een clusterbeheerder. Het Service Fabric Runtime-toepassingsmodel kan worden geïntegreerd met CSS, waardoor de declaratie van toepassingsparameters als CSS-geheime verwijzingen wordt toegestaan.
CSS is ook een instrument voor het inrichten van toepassingsgeheimen die zijn gedeclareerd als KeyVault-geheime URI's, in combinatie met Managed Identity voor Door Azure geïmplementeerde Service Fabric-toepassingen.
Central Secret Service is niet bedoeld als vervanging voor een toegewezen, externe service voor geheimenbeheer, zoals Azure Key Vault.
Notitie
Bij het activeren van CSS op een SF-cluster met een versie ouder dan 7.1. CU3, activering kan mislukken en CSS in een permanent beschadigde status laten als het cluster is geconfigureerd voor Windows-verificatie of als EncryptionCertificateThumbprint
het onjuist is gedeclareerd of het bijbehorende certificaat niet is geïnstalleerd. In beide gevallen is het raadzaam om het cluster te upgraden naar een sf-runtimeversie hoger dan 7.1. CU3 voordat u doorgaat.
Central Secrets Service inschakelen
Als u Central Secret Service wilt inschakelen, werkt u de clusterconfiguratie bij zoals hieronder wordt beschreven.
{
"fabricSettings": [
{
"name": "CentralSecretService",
"parameters": [
{
"name": "DeployedState",
"value": "enabled"
},
{
"name": "MinReplicaSetSize",
"value": "1"
},
{
"name": "TargetReplicaSetSize",
"value": "3"
}
]
}
]
}
Notitie
Vóór Service Fabric versie 10.1 CU4 is het noodzakelijk om het rekencertificaat in te richten dat CSS zal gebruiken voor het versleutelen van het archief. Deze moet op alle knooppunten worden geïnstalleerd en de SHA-1-vingerafdruk moet worden gedeclareerd met behulp van de fabric-instellingsparameter EncryptionCertificateThumbprint onder sectie CentralSecretService. U wordt aangeraden een versleutelingscertificaat te gebruiken dat verschilt van uw clustercertificaat. Vanaf 10.1 CU4, als deze instelling niet wordt doorgegeven, gebruikt CSS standaard een door een cluster beheerd certificaat voor versleuteling. Een bestaande CSS-implementatie kan worden verplaatst naar het door het cluster beheerde certificaat door de vingerafdrukdeclaratie in een upgrade te verwijderen.
Notitie
De configuratie-instelling 'DeployedState', geïntroduceerd in Service Fabric versie 8.0, is het voorkeursmechanisme om CSS in of uit te schakelen. Deze functie is geleverd in eerdere versies door de configuratie-instelling IsEnabled, die nu als verouderd wordt beschouwd.
Centraal geheimenservicemodel
De CENTRAL Secret Service-API bevat twee typen: geheime resource en geheime versie. Het type geheime resource vertegenwoordigt conceptueel een familie van versies van één geheim dat voor een specifiek doel wordt gebruikt; voorbeelden zijn: een verbindingsreeks, een wachtwoord, een eindpuntcertificaat. Een object van het geheime resourcetype bevat metagegevens die aan dat geheim zijn gekoppeld, met name soort, inhoudstype en beschrijving. Het type geheime versie vertegenwoordigt een bepaald exemplaar van het bijbehorende geheim en slaat de geheime tekst zonder opmaak op (versleuteld); Verdergaand met de bovenstaande voorbeelden bevat een geheime versie de huidige wachtwoordwaarde, een certificaatobject geldig tot het einde van de maand, enzovoort. Bij het vernieuwen van deze geheimen moeten nieuwe geheime versies worden geproduceerd (en toegevoegd aan CSS).
Formaliseren van het model 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 onderliggend element van een bepaalde geheime resource; een versie heeft mogelijk slechts één bovenliggende resource
- Een afzonderlijke geheime versie kan worden verwijderd, zonder dat dit van invloed is op andere versies van hetzelfde geheim
- Als u een geheime resource verwijdert, worden alle versies ervan verwijderd
- De waarde van een geheime versie is onveranderbaar
Een geheime resource declareren
U kunt een geheime resource maken met behulp van de REST API.
Notitie
Als het cluster Gebruikmaakt van Windows-verificatie zonder een HttpGateway-certificaat, wordt de REST-aanvraag verzonden via een niet-beveiligd HTTP-kanaal. Als u TLS voor dit kanaal wilt inschakelen, moet de clusterdefinitie worden bijgewerkt om een http-gatewayservercertificaat op te geven.
Als u een supersecret
geheime resource wilt maken met behulp van de REST API, moet u een PUT-aanvraag indienen bij https://<clusterfqdn>:19080/Resources/Secrets/supersecret?api-version=6.4-preview
. U moet zich verifiëren met behulp van een clustercertificaat of een beheerdersclientcertificaat 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 te gebruiken 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 van CSS gebruiken door het te declareren als een omgevingsvariabele of door een pad op te geven waarin de geheime tekst zonder opmaak moet worden geserialiseerd. Volg deze stappen om te verwijzen naar een CSS-geheim:
- Voeg een sectie toe aan het settings.xml-bestand met het volgende fragment. 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: Koppel de geheimen aan een container. De enige wijziging die nodig is om de geheimen in de container beschikbaar te maken, is naar specify
een koppelpunt in <ConfigPackage>
.
Het volgende codefragment 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 koppelpunt in uw container.
Voorbeeld 2: Een geheim binden aan een omgevingsvariabele voor een proces door op te Type='SecretsStoreRef
geven. Het volgende codefragment is een voorbeeld van het binden van de supersecret
versie ver1
aan de omgevingsvariabele MySuperSecret
in ServiceManifest.xml.
<EnvironmentVariables>
<EnvironmentVariable Name="MySuperSecret" Type="SecretsStoreRef" Value="supersecret:ver1"/>
</EnvironmentVariables>
De omgevingsvariabele SecretPath
verwijst naar de map waarin alle geheimen worden opgeslagen. Elke parameter die in de testsecrets
sectie wordt vermeld, wordt opgeslagen in een afzonderlijk bestand. De toepassing kan nu het geheim als volgt gebruiken:
secretValue = IO.ReadFile(Path.Join(Environment.GetEnvironmentVariable("SecretPath"), "TopSecret"))
Het versleutelingscertificaat van de centrale geheime service roteren
Deze richtlijnen zijn in het geval dat u CSS hebt geconfigureerd met uw eigen versleutelingscertificaat, gedeclareerd met behulp van EncryptionCertificateThumbprint
. Als u de optie voor door het cluster beheerde referentie gebruikt, beheert het cluster de levenscyclus van de referentie en is er geen actie nodig.
Het is belangrijk te weten dat certificaten geldig blijven voor ontsleuteling na de vervaldatum. Op dit moment raden we u aan om eerdere versleutelingscertificaten na rotatie in te richten om de kans op een vergrendeling te verminderen. Voor het roteren van het CSS-versleutelingscertificaat zijn de volgende stappen vereist:
- Richt het nieuwe certificaat in op elk knooppunt van het cluster. Verwijder op dit moment het vorige versleutelingscertificaat niet of ga verder met het inrichten van het vorige versleutelingscertificaat.
- Start een upgrade van de clusterconfiguratie om de waarde van
EncryptionCertificateThumbprint
de SHA-1-vingerafdruk van het nieuwe certificaat te wijzigen. Na het voltooien van de upgrade begint CSS de bestaande inhoud opnieuw te versleutelen naar het nieuwe versleutelingscertificaat. Alle geheimen die na dit punt aan CSS worden toegevoegd, worden rechtstreeks versleuteld naar het nieuwe versleutelingscertificaat. Aangezien de convergentie van alle geheimen die door het nieuwe certificaat worden beveiligd asynchroon is, is het belangrijk dat het vorige versleutelingscertificaat op alle knooppunten wordt geïnstalleerd en beschikbaar is voor CSS.
Central Secret Service verwijderen uit uw cluster
Voor het veilig verwijderen van Central Secret Service uit een cluster zijn twee upgrades vereist. De eerste upgrade schakelt CSS uit, terwijl de tweede upgrade de service verwijdert uit de clusterdefinitie, waaronder de permanente verwijdering van de inhoud. Dit proces met twee fasen voorkomt onbedoelde verwijdering van de service en helpt ervoor te zorgen dat er tijdens het verwijderingsproces geen zwevende afhankelijkheden van CSS zijn. Deze functie is beschikbaar vanaf SF versie 8.0.
Stap 1: CSS DeployedState bijwerken om te verwijderen
Clusterdefinitie upgraden van "IsEnabled" = "true"
of naar "DeployedState" = "enabled"
{
"name": "DeployedState",
"value": "removing"
}
Zodra Central Secret Service de geïmplementeerde status Removing
heeft bereikt, worden alle binnenkomende GEHEIME API-aanroepen geweigerd, ongeacht of er directe REST-aanroepen zijn of via activeringen van services die SecretStoreRefs of KeyVaultReferences bevatten. Alle toepassingen of onderdelen in het cluster die op dit moment nog steeds afhankelijk zijn van CSS, krijgen de waarschuwingsstatus. Als dit het geval is, moet de upgrade naar de geïmplementeerde status Removing
worden teruggedraaid. Als deze upgrade al is geslaagd, moet er een nieuwe upgrade worden gestart om CSS weer te wijzigen in DeployedState = Enabled
.
Als Central Secret Service een aanvraag ontvangt in de geïmplementeerde status Removing
, retourneert deze HTTP-code 401 (niet geautoriseerd) en wordt de status Waarschuwing weergegeven.
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 is onherstelbaar verloren gegaan.
Volgende stappen
- Meer informatie over toepassings- en servicebeveiliging.
- Maak kennis met Managed Identity voor Service Fabric-toepassingen.
- De functionaliteit van CSS uitbreiden met KeyVaultReferences