Sdílet prostřednictvím


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 rámci 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ě stylů CSS se šifrují v klidovém stavu na šifrovací certifikát spravovaný zákazníkem nebo clusterem. Šablony stylů CSS poskytují klientská rozhraní API pro správu tajných kódů, přístupná entitám, které se ověřují jako cluster, nebo uživateli správce clusteru. Aplikační model modulu runtime Service Fabric se integruje se šablonou stylů CSS a umožňuje deklaraci parametrů aplikace jako tajných odkazů CSS.

Šablony stylů CSS také slouží ke zřizování tajných kódů aplikací deklarovaných jako identifikátory URI tajných kódů KeyVault v kombinaci se spravovanou identitou pro aplikace Service Fabric nasazené v Azure.

Centrální tajná služba není určená jako náhrada za vyhrazenou externí službu pro správu tajných kódů, jako je Azure Key Vault.

Poznámka:

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

Povolení služby Centrální tajné kódy

Pokud chcete povolit službu Centrálního tajného klíče, aktualizujte konfiguraci clusteru, jak je popsáno níže.

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

Poznámka:

Před aktualizací Service Fabric verze 10.1 CU4 je nutné zřídit pro výpočet certifikátu, který css použije k šifrování úložiště. Musí být nainstalován na všech uzlech a jeho kryptografický otisk SHA-1 se deklaruje pomocí parametru nastavení infrastruktury EncryptionCertificateThumbprint v části CentralSecretService. Doporučujeme použít šifrovací certifikát, který se liší od certifikátu clusteru. Od verze 10.1 CU4 platí, že pokud se toto nastavení nepředá, šablony stylů CSS pro šifrování ve výchozím nastavení použijí certifikát spravovaný clusterem. Existující nasazení šablon stylů CSS je možné přesunout do certifikátu spravovaného clusterem odebráním deklarace kryptografického otisku v upgradu.

Poznámka:

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

Model tajných kódů služby Central Secret Service

Rozhraní API centrální tajné služby 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 kódu používaného pro konkrétní účel; Mezi příklady patří: připojovací řetězec, heslo, certifikát koncového bodu. Objekt typu prostředku tajného kódu obsahuje metadata spojená s tímto tajným kódem, konkrétně druhem, typem obsahu a popisem. Typ verze tajného kódu představuje konkrétní instanci přidruženého tajného klíče a uloží tajný prostý text (šifrovaný); Pokračujeme v příkladech výše, verze tajného kódu obsahuje aktuální hodnotu hesla, objekt certifikátu platný až 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).

Formalizace modelu, následující jsou pravidla implementovaná a vynucována v implementaci CSS:

  • Prostředek tajného kódu může mít nulovou nebo více verzí.
  • Každá verze tajného kódu je podřízeným prostředkem určitého tajného kódu; 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 tajného prostředku

Prostředek tajného kódu můžete vytvořit pomocí rozhraní REST API.

Poznámka:

Pokud cluster používá ověřování systému Windows bez certifikátu HttpGateway, požadavek REST se odešle 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-preview. 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 kódu 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 tajný kód ze šablon stylů CSS využívat 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ý klíč CSS, postupujte takto:

  1. Do souboru settings.xml přidejte oddíl 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. Jedinou změnou potřebnou k zpřístupnění tajných kódů uvnitř kontejneru je specify přípojný bod v <ConfigPackage>kontejneru . 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='SecretsStoreRef. Následující fragment kódu je příkladem vytvoření vazby supersecret verze ver1 k proměnné 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ář, kde 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ě certifikátu šifrování centrální tajné služby

Tyto pokyny platí v případě, že máte šablony stylů CSS nakonfigurované s vlastním šifrovacím certifikátem deklarovaným pomocí EncryptionCertificateThumbprint. Pokud používáte možnost přihlašovacích údajů spravovaných clusterem, cluster spravuje životní cyklus přihlašovacích údajů a nevyžaduje se žádná akce.

Je důležité si uvědomit, že certifikáty zůstávají platné pro dešifrování nad rámec jejich vypršení 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 neodeberte nebo pokračujte ve zřizování předchozího šifrovacího certifikátu.
  2. Spusťte upgrade konfigurace clusteru a změňte hodnotu EncryptionCertificateThumbprint kryptografického otisku SHA-1 nového certifikátu. Po dokončení upgradu začne šablony stylů CSS znovu šifrovat svůj stávající obsah na nový šifrovací certifikát. 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 ke všem tajným kódům chráněným novým certifikátem je asynchronní, je důležité, aby předchozí šifrovací certifikát zůstal nainstalovaný na všech uzlech a k dispozici pro šablony stylů CSS.

Odebrání centrální tajné služby z clusteru

Bezpečné odebrání služby Centrálního tajného kódu 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, která 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 žádné osamocené závislosti na šabloně stylů CSS. Tato funkce je k dispozici od SF verze 8.0 dále.

Krok 1: Aktualizace stavu nasazení šablon stylů CSS na odebrání

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

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

Jakmile služba centrálního tajného klíče vstoupí do nasazeného stavu Removing, odmítne všechna příchozí volání rozhraní API tajného kódu, 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é jsou v tomto okamžiku stále závislé na šabloně stylů CSS, budou přecházet do stavu Upozornění. Pokud k tomu dojde, měl by se upgrade na nasazený stav Removing vrátit zpět. Pokud už upgrade proběhl úspěšně, měl by se zahájit nový upgrade a změnit šablony stylů CSS zpět na DeployedState = Enabled. Pokud centrální tajná služba obdrží požadavek v nasazeném stavu Removing, vrátí kód HTTP 401 (neautorizováno) a umístí se do stavu upozornění.

Krok 2: Aktualizace stavu nasazení šablon stylů CSS na zakázáno

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

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

Služba Centrálního tajného klíče by už neměla běžet v clusteru a nebude k dispozici v seznamu systémových služeb. Obsah šablon stylů CSS je nenávratně ztracen.

Další kroky