Služba centrálního tajného klíče v Azure Service Fabric
služba Central secret (CSS), označovaná také jako úložiště centrálních tajných klíčů, je Service Fabric systémová služba určená k ochraně tajných kódů v rámci clusteru. CSS usnadňuje správu tajných kódů pro SF aplikace a eliminuje nutnost spoléhat na zašifrované parametry.
Služba centrálního tajného klíče je trvalá a replikovaná tajná mezipaměť v clusteru. tajné kódy uložené v šablonách CSS jsou v klidovém stavu zašifrované na certifikát pro šifrování od zákazníka. Šablony stylů CSS poskytují klientská rozhraní API pro správu tajných klíčů, která jsou dostupná pro entity, které se ověřují jako cluster nebo uživatel s oprávněními správce clusteru. model aplikace Service Fabric runtime se integruje s CSS a umožňuje deklaraci parametrů aplikace jako tajné odkazy css.
CSS je také instrumentální při zřizování aplikačních tajných klíčů deklarovaných jako identifikátory uri tajného klíče trezoruv kombinaci se spravovanou identitou pro aplikace Service Fabric nasazené v Azure.
Služba centrálního tajného klíče není náhradou za vyhrazenou externí službu pro správu tajných kódů, jako je například 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 opustit šablonu stylů CSS v trvale stavu není v pořádku, pokud je cluster nakonfigurovaný pro Windows ověřování nebo pokud EncryptionCertificateThumbprint je nesprávně deklarovaný nebo není nainstalovaný odpovídající certifikát. V obou případech je vhodné upgradovat cluster na verzi SF runtime novější než 7,1. Než budete pokračovat, CU3.
Povolit službu centrálních tajných klíčů
Pokud chcete povolit službu centrálního tajného klíče, 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
nastavení konfigurace "DeployedState", představené v 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 "povoleno", která je nyní považována za zastaralou.
Tajný model služby centrální tajná služba
Rozhraní API služby Central tajných kódů zpřístupňuje dva typy: tajný prostředek a tajnou verzi. Typ tajného prostředku představuje koncepční, rodinu verzí jednoho tajného klíče, který se používá pro konkrétní účel; Mezi příklady patří: připojovací řetězec, heslo, certifikát koncového bodu. Objekt typu tajného prostředku obsahuje metadata přidružená k tomuto tajnému kódu, konkrétně druh, typ obsahu a popis. Typ tajné verze představuje konkrétní instanci svého přidruženého tajného kódu a ukládá tajný text do prostého textu (šifrovaný); v předchozích příkladech tajná verze obsahuje aktuální hodnotu hesla, objekt certifikátu je platný až do konce měsíce atd. Po obnovení těchto tajných kódů by se měly vytvářet nové tajné verze (a přidají se do šablon stylů CSS).
Formalizing modelu jsou následující pravidla implementována a vynutila v implementaci CSS:
- Prostředek tajného klíče může mít nula nebo více verzí.
- Každá tajná verze je podřízenou položkou konkrétního tajného prostředku; verze může mít jenom jeden nadřazený prostředek.
- Jednotlivou tajnou verzi je možné odstranit, aniž by to ovlivnilo jiné verze stejného tajného klíče.
- Odstranění tajného prostředku způsobí odstranění všech jeho verzí.
- Hodnota tajné verze je neměnná.
Úplnou sadu rozhraní API pro správu REST pro tajné prostředky najdete tadya v tajných verzích tady.
Deklarace tajného prostředku
Tajný prostředek můžete vytvořit pomocí REST API.
Poznámka
pokud cluster používá ověřování Windows bez certifikátu HttpGateway, je žádost REST odeslána přes nezabezpečený kanál HTTP. Pokud chcete pro tento kanál povolit protokol TLS, měla by se aktualizovat definice clusteru, aby se určil certifikát serveru brány http.
Pokud chcete vytvořit supersecret prostředek tajného kódu pomocí REST API, udělejte požadavek PUT na https://<clusterfqdn>:19080/Resources/Secrets/supersecret?api-version=6.4-preview . K vytvoření tajného prostředku se budete muset ověřit pomocí certifikátu clusteru nebo certifikátu klienta 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
Nastavte tajnou hodnotu.
Pomocí následujícího REST API skriptu nastavte tajnou hodnotu.
$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>
Prověřte tajnou hodnotu.
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 klíče v aplikaci
Aplikace může z šablon stylů CSS spotřebovat tajný kód tím, že ji deklaruje jako proměnnou prostředí nebo když zadáte cestu, kam se má serializovat tajný kód prostého textu. Použijte následující postup, chcete-li odkazovat na tajný kód CSS:
- Přidejte do souboru settings.xml 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>
- Importujte část 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řipojení tajných kódů ke kontejneru. Jediná změna nutná k zpřístupnění tajných kódů uvnitř kontejneru je specify bod připojení v <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 v kontejneru.
Příklad 2: vytvoření vazby tajného kódu 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é prostředí MySuperSecret v ServiceManifest.xml.
<EnvironmentVariables>
<EnvironmentVariable Name="MySuperSecret" Type="SecretsStoreRef" Value="supersecret:ver1"/>
</EnvironmentVariables>
Proměnná prostředí SecretPath bude ukazovat na adresář, ve kterém jsou uloženy všechny tajné kódy. Každý parametr uvedený v testsecrets oddílu je uložen v samostatném souboru. Aplikace teď může tajný klíč použít následujícím způsobem:
secretValue = IO.ReadFile(Path.Join(Environment.GetEnvironmentVariable("SecretPath"), "TopSecret"))
Otočení šifrovacího certifikátu služby Central Secret
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 po rotaci pokračovat ve zřizování minulých šifrovacích certifikátů, aby se snížila pravděpodobnost uzamčení. Otočení šifrovacího certifikátu CSS vyžaduje následující kroky:
- Zřídit nový certifikát pro každý uzel clusteru. V tuto chvíli neodstraňujte ani nepokračujte v zřizování předchozího šifrovacího certifikátu.
- Spusťte upgrade konfigurace clusteru a změňte hodnotu
EncryptionCertificateThumbprintna kryptografický otisk SHA-1 nového certifikátu. Po dokončení upgradu bude šablona stylů CSS začít znovu šifrovat stávající obsah do nového šifrovacího certifikátu. Všechny tajné kódy přidané do šablon stylů CSS po tomto okamžiku budou zašifrovány přímo do nového šifrovacího certifikátu. Vzhledem k tomu, že konvergence se všemi tajnými klíči chráněnými novým certifikátem je asynchronní, je důležité, aby předchozí certifikát šifrování zůstal nainstalovaný na všech uzlech a byl dostupný pro šablony stylů CSS.
Odebírá se služba centrálního tajného klíče z vašeho clusteru.
Sejf odebrání služby centrálního tajného klíče z clusteru vyžaduje dva upgrady. Při prvním upgradu dojde k zakázání šablon stylů CSS, zatímco druhý upgrade odebere službu z definice clusteru, což zahrnuje trvalé odstranění jejího obsahu. Tento dvoustupňový proces brání nechtěnému odstranění služby a pomáhá zajistit, že během procesu odebírání nejsou žádné osamocené závislosti na šablonách stylů CSS. Tato funkce je k dispozici z SF verze 8,0 dalšího.
Krok 1: aktualizace šablon stylů CSS DeployedState na odebrání
Upgrade definice clusteru z "IsEnabled" = "true" nebo z "DeployedState" = "enabled" na
{
"name": "DeployedState",
"value": "removing"
}
Jakmile služba centrálního tajného klíče vstoupí do nasazeného stavu Removing , odmítne všechna volání příchozích tajných klíčů rozhraní API, ať už 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 této chvíli pořád závislé na šablonách stylů CSS, budou přejít do stavu upozornění. V takovém případě by měl být upgrade na nasazený stav Removing vrácen zpět. Pokud byl upgrade již úspěšný, je třeba zahájit nový upgrade, aby bylo možné změnit šablonu stylů CSS zpět na DeployedState = Enabled . Pokud služba centrálního tajného klíče 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 šablon stylů CSS DeployedState na disabled
Upgradovat definici clusteru z "DeployedState" = "removing" na
{
"name": "DeployedState",
"value": "disabled"
}
Služba centrálního tajného klíče by již neměla běžet v clusteru a nebude k dispozici v seznamu systémových služeb. Obsah šablony stylů CSS je irretrievably ztraceno.
Další kroky
- Přečtěte si další informace o zabezpečení aplikací a služeb.
- zavedete se do spravované Identity pro aplikace Service Fabric.
- Rozbalení funkcí CSS pomocí KeyVaultReferences