Centrální tajná služba v Azure Service Fabric

Centrální tajná služba (CSS), označovaná také jako Centrální úložiště tajných kódů, je systémová služba Service Fabric určená k ochraně tajných kódů v clusteru. Css usnadňuje správu tajných kódů pro aplikace SF a eliminuje nutnost spoléhat se na šifrované parametry.

Centrální tajná služba je odolná replikovaná mezipaměť tajných kódů v clusteru. Tajné kódy uložené v šablonách stylů CSS se šifrují v neaktivním uloženém šifrovacím certifikátu poskytnutém zákazníkem. Šablony stylů CSS poskytují klientská rozhraní API pro správu tajných kódů, která jsou přístupná pro entity ověřující se jako cluster nebo pro uživatele správce clusteru. Aplikační model modulu runtime Service Fabric se integruje se službou CSS a umožňuje deklarovat parametry aplikace jako odkazy na tajné kódy CSS.

Css také pomáhá zřizovat tajné kódy aplikací deklarované jako identifikátory URI tajného klíče KeyVault v kombinaci se spravovanou identitou pro aplikace Service Fabric nasazené v Azure.

Služba Central Secret Service nemá být náhradou za vyhrazenou externí službu správy tajných kódů, jako je Azure Key Vault.

Poznámka

Při aktivaci šablon stylů CSS v clusteru SF s verzí starší než 7.1 CU3, aktivace může selhat a ponechat css v trvale špatném stavu, pokud je cluster nakonfigurovaný pro ověřování Systému Windows nebo pokud EncryptionCertificateThumbprint je nesprávně deklarován nebo není nainstalovaný odpovídající certifikát. V obou případech je vhodné upgradovat cluster na verzi modulu runtime SF novější než 7.1. CU3, než budete pokračovat.

Povolení Služby centrálních tajných klíčů

Pokud chcete povolit službu Central Secret Service, aktualizujte konfiguraci clusteru, jak je popsáno níže. Doporučujeme použít šifrovací certifikát, který se liší od certifikátu clusteru. Tento certifikát musí být nainstalovaný na všech uzlech.

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

Poznámka

Upřednostňovaným mechanismem pro povolení nebo zakázání šablon stylů CSS je nastavení konfigurace "DeployedState", které bylo zavedeno ve službě Service Fabric verze 8.0. tato funkce byla v předchozích verzích obsluhována nastavením konfigurace IsEnabled, které je nyní považováno za zastaralé.

Model tajných kódů centrální tajné služby

Rozhraní API služby Central Secret Service zveřejňuje dva typy: prostředek tajného kódu a verzi tajného kódu. Typ prostředku tajného kódu představuje koncepčně řadu verzí jednoho tajného klíče používaného pro konkrétní účel; Mezi příklady patří připojovací řetězec, heslo a certifikát koncového bodu. Objekt typu prostředku tajného kódu obsahuje metadata přidružená k ho tajnému kódu, konkrétně druh, typ obsahu a popis. Typ verze tajného kódu představuje konkrétní instanci přidruženého tajného klíče a ukládá tajný kód ve formátu prostého textu (šifrované); Verze tajného kódu obsahuje aktuální hodnotu hesla, objekt certifikátu platný do konce měsíce atd. Po obnovení těchto tajných kódů by se měly vytvořit nové verze tajných kódů (a přidat je do šablon stylů CSS).

Při formalizaci modelu jsou následující pravidla implementovaná a vynucovaná v implementaci šablon stylů CSS:

  • Tajný prostředek může mít nula nebo více verzí.
  • Každá verze tajného kódu je podřízená určitému tajnému prostředku. Verze může mít pouze jeden nadřazený prostředek.
  • Jednotlivá verze tajného kódu může být odstraněna, aniž by to mělo vliv na jiné verze stejného tajného kódu.
  • Odstranění tajného prostředku způsobí odstranění všech jeho verzí.
  • Hodnota verze tajného kódu je neměnná.

Deklarace prostředku tajného kódu

Tajný prostředek můžete vytvořit pomocí rozhraní REST API.

Poznámka

Pokud cluster používá ověřování Windows bez certifikátu HttpGateway, odešle se požadavek REST přes nezabezpečený kanál HTTP. Pokud chcete pro tento kanál povolit protokol TLS, je potřeba aktualizovat definici clusteru a zadat certifikát serveru brány HTTP.

Pokud chcete vytvořit supersecret tajný prostředek pomocí rozhraní REST API, vytvořte požadavek PUT na https://<clusterfqdn>:19080/Resources/Secrets/supersecret?api-version=6.4-previewadresu . K vytvoření prostředku tajného kódu budete muset použít certifikát clusteru nebo klientský certifikát správce.

$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

Nastavení hodnoty tajného kódu

Pomocí následujícího skriptu nastavte hodnotu tajného klíče pomocí rozhraní REST API.

$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>

Prozkoumání hodnoty tajného kódu

Invoke-WebRequest -CertificateThumbprint <ClusterCertThumbprint> -Method POST -Uri "https:<clusterfqdn>/Resources/Secrets/supersecret/values/ver1/list_value?api-version=6.4-preview"

Použití tajného kódu v aplikaci

Aplikace může využívat tajný kód ze šablon stylů CSS tak, že ho deklaruje jako proměnnou prostředí, nebo zadáním cesty, kde se má tajný prostý text serializovat. Pokud chcete odkazovat na tajný kód CSS, postupujte následovně:

  1. Přidejte oddíl do souborusettings.xml s následujícím fragmentem kódu. Všimněte si, že hodnota je ve formátu {secretname:version}.
     <Section Name="testsecrets">
      <Parameter Name="TopSecret" Type="SecretsStoreRef" Value="supersecret:ver1"/
     </Section>
  1. Naimportujte oddíl v 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>

Příklad 1: Připojte tajné kódy ke kontejneru. Jediná změna potřebná k zpřístupnění tajných kódů v kontejneru je přípojný specify bod v nástroji <ConfigPackage>. Následující fragment kódu je upravený 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>

Tajné kódy jsou k dispozici pod přípojným bodem uvnitř kontejneru.

Příklad 2: Vytvoření vazby tajného klíče k proměnné prostředí procesu zadáním Type='SecretsStoreRefpříkazu . Následující fragment kódu je příkladem vytvoření vazby supersecret verze ver1 na proměnnou MySuperSecret prostředí v ServiceManifest.xml.

   <EnvironmentVariables>
     <EnvironmentVariable Name="MySuperSecret" Type="SecretsStoreRef" Value="supersecret:ver1"/>
   </EnvironmentVariables>

Proměnná SecretPath prostředí bude odkazovat na adresář, ve kterém jsou uloženy všechny tajné kódy. Každý parametr uvedený v oddílu testsecrets je uložen v samostatném souboru. Aplikace teď může tajný kód používat následujícím způsobem:

secretValue = IO.ReadFile(Path.Join(Environment.GetEnvironmentVariable("SecretPath"),  "TopSecret"))

Obměně šifrovacího certifikátu Centrální tajné služby

Je důležité si uvědomit, že certifikáty zůstávají platné pro dešifrování i po vypršení jejich platnosti. V tuto chvíli doporučujeme pokračovat ve zřizování minulých šifrovacích certifikátů po obměně, aby se snížila pravděpodobnost uzamčení. Obměně šifrovacího certifikátu CSS vyžaduje následující kroky:

  1. Zřiďte nový certifikát pro každý uzel clusteru. V tuto chvíli neodebídejte předchozí šifrovací certifikát ani nepokračujte ve zřizování.
  2. Spusťte upgrade konfigurace clusteru a změňte hodnotu EncryptionCertificateThumbprint na kryptografický otisk SHA-1 nového certifikátu. Po dokončení upgradu začne služba CSS znovu šifrovat svůj stávající obsah do nového šifrovacího certifikátu. Všechny tajné kódy přidané do šablon stylů CSS po tomto bodu budou zašifrovány přímo do nového šifrovacího certifikátu. Vzhledem k tomu, že konvergence k tomu, aby byly všechny tajné kódy chráněné novým certifikátem, je asynchronní, je důležité, aby předchozí šifrovací certifikát zůstal nainstalovaný na všech uzlech a dostupný pro šablony stylů CSS.

Odebrání služby Central Secret Service z clusteru

Bezpečné odebrání centrální tajné služby z clusteru vyžaduje dva upgrady. První upgrade funkčně zakáže šablony stylů CSS, zatímco druhý upgrade odebere službu z definice clusteru, což zahrnuje trvalé odstranění jejího obsahu. Tento dvoufázový proces zabraňuje náhodnému odstranění služby a pomáhá zajistit, aby během procesu odebrání nebyly na css žádné osamocené závislosti. Tato funkce je dostupná od verze 8.0 SF.

Krok 1: Aktualizace css DeployedState na odebrání

Upgrade definice clusteru z "IsEnabled" = "true" nebo z "DeployedState" = "enabled" na

{
    "name":  "DeployedState",
    "value":  "removing"
}

Jakmile služba Central Secret Service přejde do nasazeného stavu Removing, odmítne všechna příchozí volání rozhraní API tajných kódů, ať už přímá volání REST, nebo prostřednictvím aktivací služeb, které zahrnují SecretStoreRefs nebo KeyVaultReferences. Všechny aplikace nebo komponenty v clusteru, které v tuto chvíli stále závisejí na šabloně stylů CSS, přejdou do stavu Upozornění. Pokud k tomu dojde, upgrade do nasazeného stavu Removing by se měl vrátit zpět. Pokud už upgrade proběhl úspěšně, měl by se zahájit nový upgrade, který změní šablony stylů CSS zpět na DeployedState = Enabled. Pokud služba Central Secret Service obdrží požadavek v nasazeném stavu Removing, vrátí kód HTTP 401 (neautorizováno) a uvede se do stavu upozornění.

Krok 2: Aktualizace css DeployedState na zakázáno

Upgrade definice clusteru z "DeployedState" = "removing" na

{
    "name":  "DeployedState",
    "value":  "disabled"
}

Služba Central Secret Service by už neměla být spuštěná v clusteru a nebude v seznamu systémových služeb. Obsah šablon stylů CSS je nenávratně ztracen.

Další kroky