Központi titkosszolgálat az Azure Service Fabricben

A Központi titkos kódtár (CSS) egy Olyan Service Fabric-rendszerszolgáltatás, amely a fürtön belüli titkos kulcsokat védi. A CSS megkönnyíti az SF-alkalmazások titkos kulcsainak kezelését, így nincs szükség titkosított paraméterekre.

A központi titkosszolgálat egy tartós, fürtön belüli titkos kódgyorsítótár; A CSS-ben tárolt titkos kódok inaktív állapotban vannak titkosítva egy ügyfél által biztosított titkosítási tanúsítványra. A CSS ügyfél API-kat biztosít a titkos kódok kezeléséhez, amelyek elérhetők a fürtként hitelesítő entitások vagy a fürt rendszergazdai felhasználója számára. A Service Fabric futtatókörnyezeti alkalmazásmodell integrálható a CSS-sel, így az alkalmazásparaméterek CSS-titkos referenciákként való deklarálása engedélyezve van.

A CSS fontos szerepet játszik a KeyVault titkos URI-ként deklarált alkalmazástitkok kiépítésében is, az Azure-ban üzembe helyezett Service Fabric-alkalmazások felügyelt identitásával együtt.

A központi titkosszolgálat nem helyettesíti a dedikált, külső titkoskód-kezelő szolgáltatást, például az Azure Key Vault.

Megjegyzés

Ha a CSS-t 7.1-nél korábbi verziót futtató SF-fürtön aktiválja . CU3, az aktiválás sikertelen lehet, és a CSS-t véglegesen nem kifogástalan állapotban hagyhatja, ha a fürt Windows-hitelesítésre van konfigurálva, vagy ha EncryptionCertificateThumbprint helytelenül van deklarálva, vagy ha a megfelelő tanúsítvány nincs telepítve. Mindkét esetben célszerű a fürtöt a 7.1-esnél újabb SF-futtatókörnyezeti verzióra frissíteni. CU3 a folytatás előtt.

Központi titkos kódok szolgáltatás engedélyezése

A Központi titkos kódszolgáltatás engedélyezéséhez frissítse a fürtkonfigurációt az alábbiak szerint. Javasoljuk, hogy a fürttanúsítványtól eltérő titkosítási tanúsítványt használjon. Ezt a tanúsítványt minden csomóponton telepíteni kell.

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

Megjegyzés

A Service Fabric 8.0-s verziójában bevezetett "DeployedState" konfigurációs beállítás az előnyben részesített mechanizmus a CSS engedélyezéséhez vagy letiltásához; ezt a függvényt a korábbi verziókban az "IsEnabled" konfigurációs beállítás szolgálta, amely már elavultnak minősül.

Központi titkosszolgálati titkosszolgálati modell

A Central Secret Service API két típust tesz elérhetővé: a titkos erőforrást és a titkos verziót. A titkos erőforrás típusa fogalmilag egy adott célra használt titkos kód verzióinak családját jelöli; Ilyenek például a következők: kapcsolati sztring, jelszó, végponttanúsítvány. A titkos erőforrástípus objektumai az adott titkos kódhoz társított metaadatokat, különösen a típust, a tartalomtípust és a leírást tartalmazzák. A titkos verzió típusa a társított titkos kód egy adott példányát jelöli, és tárolja a titkos egyszerű szöveget (titkosított); A fenti példákat folytatva a titkos verzió tartalmazza az aktuális jelszóértéket, a hónap végéig érvényes tanúsítványobjektumot stb. A titkos kódok megújítása után új titkos verziókat kell létrehozni (és hozzá kell adni a CSS-hez).

A modell formalizálása során a css-implementációban implementált és kikényszerített szabályok a következők:

  • Egy titkos erőforrás nulla vagy több verzióval rendelkezhet
  • Minden titkos verzió egy adott titkos erőforrás gyermeke; egy verzió csak egy szülőerőforrással rendelkezhet
  • Az egyes titkos kódverziók törölhetők anélkül, hogy az hatással lenne ugyanannak a titkos kódnak más verzióira
  • Egy titkos erőforrás törlése az összes verzió törlését okozza
  • A titkos verzió értéke nem módosítható

Titkos erőforrás deklarálása

Titkos erőforrást a REST API használatával hozhat létre.

Megjegyzés

Ha a fürt HttpGateway-tanúsítvány nélkül használja a Windows-hitelesítést, a REST-kérés nem biztonságos HTTP-csatornán keresztül lesz elküldve. Ha engedélyezni szeretné a TLS-t ehhez a csatornához, a fürtdefiníciót frissíteni kell egy http-átjárókiszolgáló tanúsítványának megadásához.

Ha titkos erőforrást supersecret szeretne létrehozni a REST API használatával, küldjön PUT kérést a következőnek: https://<clusterfqdn>:19080/Resources/Secrets/supersecret?api-version=6.4-preview. Titkos erőforrás létrehozásához fürttanúsítvány vagy rendszergazdai ügyféltanúsítvány használatával kell hitelesítenie magát.

$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

A titkos kód értékének beállítása

A titkos kód értékének beállításához használja az alábbi szkriptet a REST API-val.

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

A titkos kód értékének vizsgálata

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

Titkos kód használata az alkalmazásban

Az alkalmazások felhasználhatják a CSS titkos kódját úgy, hogy környezeti változóként deklarálják azt, vagy meghatároznak egy útvonalat, ahol a titkos egyszerű szöveget szerializálni kell. Kövesse az alábbi lépéseket egy CSS-titkos kódra való hivatkozáshoz:

  1. Vegyen fel egy szakaszt a settings.xml fájlba az alábbi kódrészlettel. Vegye figyelembe, hogy az érték {secretname:version} formátumban van.
     <Section Name="testsecrets">
      <Parameter Name="TopSecret" Type="SecretsStoreRef" Value="supersecret:ver1"/
     </Section>
  1. Importálja a szakaszt aApplicationManifest.xml.
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="testservicePkg" ServiceManifestVersion="1.0.0" />
<ConfigOverrides />
<Policies>
 <ConfigPackagePolicies CodePackageRef="Code">
   <ConfigPackage Name="Config" SectionName="testsecrets" EnvironmentVariableName="SecretPath" />
   </ConfigPackagePolicies>
</Policies>
</ServiceManifestImport>

1. példa: Csatlakoztassa a titkos kulcsokat egy tárolóhoz. A tárolóban specify a titkos kulcsok elérhetővé tétele csak a tároló csatlakoztatási pontjára <ConfigPackage>van szükség. A következő kódrészlet a módosított 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>

A titkos kódok a tároló csatlakoztatási pontja alatt érhetők el.

2. példa: Titkos kód kötése egy folyamatkörnyezeti változóhoz a Type='SecretsStoreRefmegadásával. Az alábbi kódrészlet egy példa arra, hogyan lehet a verziót supersecretver1 a környezeti változóhoz MySuperSecret kötni a ServiceManifest.xml.

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

A környezeti változó SecretPath arra a könyvtárra mutat, ahol az összes titkos kód található. A szakaszban felsorolt testsecrets összes paraméter külön fájlban van tárolva. Az alkalmazás mostantól az alábbi módon használhatja a titkos kódot:

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

A központi titkos kódszolgáltatás titkosítási tanúsítványának elforgatása

Fontos megjegyezni, hogy a tanúsítványok a lejáratuk után is érvényesek maradnak a visszafejtéshez. Jelenleg azt javasoljuk, hogy folytassa a korábbi titkosítási tanúsítványok kiépítését a rotáció után, hogy csökkentse a zárolás esélyét. A CSS-titkosítási tanúsítvány elforgatásához a következő lépések szükségesek:

  1. Az új tanúsítvány kiépítése a fürt minden csomópontjára. Jelenleg ne távolítsa el/folytassa az előző titkosítási tanúsítvány kiépítését.
  2. Indítsa el a fürtkonfiguráció frissítését az új tanúsítvány SHA-1 ujjlenyomatának EncryptionCertificateThumbprint módosításához. A frissítés befejezése után a CSS megkezdi a meglévő tartalom újratitkosítását az új titkosítási tanúsítványra. A CSS-hez a pont után hozzáadott összes titkos kód közvetlenül az új titkosítási tanúsítványra lesz titkosítva. Mivel az új tanúsítvány által védett titkos kulcsok konvergenciája aszinkron, fontos, hogy az előző titkosítási tanúsítvány minden csomóponton telepítve legyen, és elérhető legyen a CSS számára.

A Központi titkos kódszolgáltatás eltávolítása a fürtből

A központi titkosszolgálat fürtből való biztonságos eltávolításához két frissítés szükséges. Az első frissítés funkcionálisan letiltja a CSS-t, míg a második frissítés eltávolítja a szolgáltatást a fürtdefinícióból, amely magában foglalja a tartalom végleges törlését. Ez a kétfázisú folyamat megakadályozza a szolgáltatás véletlen törlését, és segít biztosítani, hogy az eltávolítási folyamat során ne legyenek árva függőségek a CSS-en. Ez a funkció az SF 8.0-s verziójától érhető el.

1. lépés: A CSS DeployedState frissítése eltávolításra

Fürtdefiníció frissítése a vagy a-ról "IsEnabled" = "true""DeployedState" = "enabled" a-ra

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

Miután a Központi titkosszolgálat belép az üzembe helyezett állapotba Removing, elutasítja az összes bejövő titkos API-hívást, legyen szó közvetlen REST-hívásokról vagy a SecretStoreRefs vagy KeyVaultReferences szolgáltatást tartalmazó szolgáltatások aktiválásáról. A fürt azon alkalmazásai vagy összetevői, amelyek jelenleg is a CSS-től függnek, Figyelmeztetés állapotba kerülnek. Ha ez történik, az üzembe helyezett állapotra Removing való frissítést vissza kell állítani; ha a frissítés már sikeres volt, új frissítést kell kezdeményezni, hogy a CSS-t visszaállítsa az DeployedState = Enabledértékre. Ha a központi titkosszolgálat az üzembe helyezett állapotban Removingkap egy kérést, a 401-ben (jogosulatlan) HTTP-kódot ad vissza, és figyelmeztetés állapotba helyezi magát.

2. lépés: CsS DeployedState frissítése letiltva

Fürtdefiníció "DeployedState" = "removing" frissítése

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

A központi titkosszolgálatnak már nem szabad a fürtben futnia, és nem fog szerepelni a rendszerszolgáltatások listájában. A CSS tartalma helyrehozhatatlanul elveszett.

Következő lépések