Megosztás a következőn keresztül:


Titkos kulcs elforgatásának automatizálása egy hitelesítési hitelesítő adatokat használó erőforrások esetében

Az Azure-szolgáltatások hitelesítésének legjobb módja egy felügyelt identitás használata, de vannak olyan forgatókönyvek, amelyekben ez nem megoldás. Ezekben az esetekben hozzáférési kulcsokat vagy titkos kulcsokat használnak. Rendszeresen forgassa el a hozzáférési kulcsokat vagy titkos kulcsokat.

Ez az oktatóanyag bemutatja, hogyan automatizálható a titkos kulcsok rendszeres rotálása olyan adatbázisok és szolgáltatások esetében, amelyek egy hitelesítési hitelesítő adatokat használnak. Ez az oktatóanyag az Azure Event Grid-értesítés által aktivált függvény használatával elforgatja az Azure Key Vaultban tárolt SQL Server-jelszavakat:

Forgatási megoldás diagramja

  1. Harminc nappal a titkos kód lejárati dátuma előtt a Key Vault közzéteszi a "közel lejárati" eseményt az Event Gridben.
  2. Az Event Grid ellenőrzi az esemény-előfizetéseket, és HTTP POST használatával hívja meg az eseményre előfizetett függvényalkalmazás-végpontot.
  3. A függvényalkalmazás megkapja a titkos adatokat, létrehoz egy új véletlenszerű jelszót, és létrehoz egy új verziót a titkos kódhoz az új jelszóval a Key Vaultban.
  4. A függvényalkalmazás frissíti az SQL Servert az új jelszóval.

Feljegyzés

A 3. és a 4. lépés között eltérés lehet. Ez idő alatt a Key Vault titkos kulcsa nem tud hitelesíteni az SQL Serveren. Ha valamelyik lépés meghiúsul, az Event Grid két órán keresztül újrapróbálkozza.

Előfeltételek

Ha nem rendelkezik meglévő Key Vault- és SQL Server-kiszolgálóval, használja ezt az üzembehelyezési hivatkozást:

Az

  1. Az Erőforráscsoport területen válassza az Új létrehozása lehetőséget. Adjon nevet a csoportnak, ebben az oktatóanyagban akvrotation-t használunk.
  2. Az SQL Admin Login (SQL-rendszergazdai bejelentkezés) mezőbe írja be az SQL-rendszergazda bejelentkezési nevét.
  3. Válassza az Áttekintés + létrehozás lehetőséget.
  4. Válassza a Létrehozás elemet

Erőforráscsoport létrehozása

Most már rendelkezik egy Key Vault- és egy SQL Server-példánysal. Ezt a beállítást az Azure CLI-ben az alábbi parancs futtatásával ellenőrizheti:

az resource list -o table -g akvrotation

Az eredmény a következő kimenetnek fog kinézni:

Name                     ResourceGroup         Location    Type                               Status
-----------------------  --------------------  ----------  ---------------------------------  --------
akvrotation-kv           akvrotation      eastus      Microsoft.KeyVault/vaults
akvrotation-sql          akvrotation      eastus      Microsoft.Sql/servers
akvrotation-sql/master   akvrotation      eastus      Microsoft.Sql/servers/databases
akvrotation-sql2         akvrotation      eastus      Microsoft.Sql/servers
akvrotation-sql2/master  akvrotation      eastus      Microsoft.Sql/servers/databases

SQL Server jelszóforgató függvény létrehozása és üzembe helyezése

Fontos

Ehhez a sablonhoz a kulcstartónak, az SQL Servernek és az Azure-függvénynek ugyanabban az erőforráscsoportban kell lennie.

Ezután hozzon létre egy függvényalkalmazást rendszer által felügyelt identitással a többi szükséges összetevő mellett, és telepítse az SQL Server jelszóforgató függvényeit

A függvényalkalmazáshoz az alábbi összetevők szükségesek:

  • Egy Azure-alkalmazás szolgáltatáscsomag
  • Függvényalkalmazás SQL-jelszóforgató függvényekkel eseményindítóval és HTTP-eseményindítóval
  • A függvényalkalmazás-eseményindítók kezeléséhez szükséges tárfiók
  • A függvényalkalmazás identitásának hozzáférési szabályzata a Key Vault titkos kulcsainak eléréséhez
  • Event Grid-esemény-előfizetés a SecretNearExpiry eseményhez
  1. Válassza ki az Azure-sablon üzembehelyezési hivatkozását:

    Az

  2. Az Erőforráscsoport listában válassza az akvrotation lehetőséget.

  3. Az SQL Server nevére írja be az SQL Server nevét a elforgatni kívánt jelszóval

  4. Írja be a kulcstartó nevét a Key Vault névbe

  5. A függvényalkalmazás nevére írja be a függvényalkalmazás nevét

  6. A titkos kódnévbe írja be a titkos kód nevét, ahol a jelszó tárolása történik

  7. Az adattár URL-címében írja be a GitHub helyének függvénykódját (https://github.com/Azure-Samples/KeyVault-Rotation-SQLPassword-Csharp.git)

  8. Válassza az Áttekintés + létrehozás lehetőséget.

  9. Válassza a Létrehozás lehetőséget.

Válassza a Véleményezés+létrehozás lehetőséget

Az előző lépések elvégzése után rendelkezni fog egy tárfiók, egy kiszolgálófarm és egy függvényalkalmazás. Ezt a beállítást az Azure CLI-ben az alábbi parancs futtatásával ellenőrizheti:

az resource list -o table -g akvrotation

Az eredmény a következő kimenethez hasonlóan fog kinézni:

Name                     ResourceGroup         Location    Type                               Status
-----------------------  --------------------  ----------  ---------------------------------  --------
akvrotation-kv           akvrotation       eastus      Microsoft.KeyVault/vaults
akvrotation-sql          akvrotation       eastus      Microsoft.Sql/servers
akvrotation-sql/master   akvrotation       eastus      Microsoft.Sql/servers/databases
cfogyydrufs5wazfunctions akvrotation       eastus      Microsoft.Storage/storageAccounts
akvrotation-fnapp        akvrotation       eastus      Microsoft.Web/serverFarms
akvrotation-fnapp        akvrotation       eastus      Microsoft.Web/sites
akvrotation-fnapp        akvrotation       eastus      Microsoft.insights/components

További információ arról, hogyan hozhat létre függvényalkalmazást, és hogyan használhat felügyelt identitást a Key Vault eléréséhez: Függvényalkalmazás létrehozása az Azure Portalról, felügyelt identitás használata az App Service-hez és az Azure Functionshöz, valamint Key Vault hozzáférési szabályzat hozzárendelése az Azure Portal használatával.

Rotációs függvény

Az előző lépésben üzembe helyezett függvény egy esemény használatával aktiválja a titkos kulcsok forgását a Key Vault és az SQL-adatbázis frissítésével.

Függvény eseményindító eseménye

Ez a függvény beolvassa az eseményadatokat, és futtatja a rotációs logikát:

public static class SimpleRotationEventHandler
{
   [FunctionName("AKVSQLRotation")]
   public static void Run([EventGridTrigger]EventGridEvent eventGridEvent, ILogger log)
   {
      log.LogInformation("C# Event trigger function processed a request.");
      var secretName = eventGridEvent.Subject;
      var secretVersion = Regex.Match(eventGridEvent.Data.ToString(), "Version\":\"([a-z0-9]*)").Groups[1].ToString();
      var keyVaultName = Regex.Match(eventGridEvent.Topic, ".vaults.(.*)").Groups[1].ToString();
      log.LogInformation($"Key Vault Name: {keyVaultName}");
      log.LogInformation($"Secret Name: {secretName}");
      log.LogInformation($"Secret Version: {secretVersion}");

      SecretRotator.RotateSecret(log, secretName, keyVaultName);
   }
}

Titkos kulcs rotálási logikája

Ez a rotációs módszer beolvassa az adatbázis adatait a titkos kódból, létrehozza a titkos kód új verzióját, és frissíti az adatbázist az új titkos kóddal:

    public class SecretRotator
    {
		private const string CredentialIdTag = "CredentialId";
		private const string ProviderAddressTag = "ProviderAddress";
		private const string ValidityPeriodDaysTag = "ValidityPeriodDays";

		public static void RotateSecret(ILogger log, string secretName, string keyVaultName)
        {
            //Retrieve Current Secret
            var kvUri = "https://" + keyVaultName + ".vault.azure.net";
            var client = new SecretClient(new Uri(kvUri), new DefaultAzureCredential());
            KeyVaultSecret secret = client.GetSecret(secretName);
            log.LogInformation("Secret Info Retrieved");

            //Retrieve Secret Info
            var credentialId = secret.Properties.Tags.ContainsKey(CredentialIdTag) ? secret.Properties.Tags[CredentialIdTag] : "";
            var providerAddress = secret.Properties.Tags.ContainsKey(ProviderAddressTag) ? secret.Properties.Tags[ProviderAddressTag] : "";
            var validityPeriodDays = secret.Properties.Tags.ContainsKey(ValidityPeriodDaysTag) ? secret.Properties.Tags[ValidityPeriodDaysTag] : "";
            log.LogInformation($"Provider Address: {providerAddress}");
            log.LogInformation($"Credential Id: {credentialId}");

            //Check Service Provider connection
            CheckServiceConnection(secret);
            log.LogInformation("Service  Connection Validated");
            
            //Create new password
            var randomPassword = CreateRandomPassword();
            log.LogInformation("New Password Generated");

            //Add secret version with new password to Key Vault
            CreateNewSecretVersion(client, secret, randomPassword);
            log.LogInformation("New Secret Version Generated");

            //Update Service Provider with new password
            UpdateServicePassword(secret, randomPassword);
            log.LogInformation("Password Changed");
            log.LogInformation($"Secret Rotated Successfully");
        }
}

A teljes kódot a GitHubon találja.

Titkos kulcs hozzáadása a Key Vaulthoz

Állítsa be a hozzáférési szabályzatot úgy, hogy titkos kulcsok kezelésére vonatkozó engedélyeket adjon a felhasználóknak:

az keyvault set-policy --upn <email-address-of-user> --name akvrotation-kv --secret-permissions set delete get list

Hozzon létre egy új titkos kulcsot, amely tartalmazza az SQL Server erőforrás-azonosítóját, az SQL Server bejelentkezési nevét és a titkos kód érvényességi időtartamát napokban. Adja meg a titkos kód nevét, az SQL Database kezdeti jelszavát (a "Simple123" példában), és adjon meg egy holnapra beállított lejárati dátumot.

$tomorrowDate = (get-date).AddDays(+1).ToString("yyy-MM-ddThh:mm:ssZ")
az keyvault secret set --name sqlPassword --vault-name akvrotation-kv --value "Simple123" --tags "CredentialId=sqlAdmin" "ProviderAddress=<sql-database-resource-id>" "ValidityPeriodDays=90" --expires $tomorrowDate

A titkos kód rövid lejárati dátummal történő létrehozása 15 percen belül közzétesz egy SecretNearExpiry eseményt, ami aktiválja a függvényt a titkos kód elforgatásához.

Tesztelés és ellenőrzés

Annak ellenőrzéséhez, hogy a titkos kulcs elforgatva lett-e, lépjen a Key Vault>titkos kulcsai közé:

Képernyőkép a Key Vault > titkos kulcskulcsaihoz való hozzáférésről.

Nyissa meg az sqlPassword titkos kódot, és tekintse meg az eredeti és elforgatott verziókat:

Ugrás a titkos kódokra

Webalkalmazás létrehozása

Az SQL-hitelesítő adatok ellenőrzéséhez hozzon létre egy webalkalmazást. Ez a webalkalmazás lekéri a titkos kulcsot a Key Vaultból, kinyeri az SQL-adatbázis adatait és hitelesítő adatait a titkos kódból, és teszteli a kapcsolatot az SQL Serverrel.

A webalkalmazáshoz az alábbi összetevők szükségesek:

  • Webalkalmazás rendszer által felügyelt identitással
  • Hozzáférési szabályzat a Key Vault titkos kulcsokhoz való hozzáféréséhez webalkalmazás által felügyelt identitáson keresztül
  1. Válassza ki az Azure-sablon üzembehelyezési hivatkozását:

    Az

  2. Válassza ki az akvrotation erőforráscsoportot.

  3. Az SQL Server nevére írja be az SQL Server nevét a elforgatni kívánt jelszóval

  4. Írja be a kulcstartó nevét a Key Vault névbe

  5. A titkos kódnévbe írja be a titkos kód nevét, ahol a jelszó tárolása történik

  6. Az adattár URL-címében írja be a webalkalmazás gitHub-helyét (https://github.com/Azure-Samples/KeyVault-Rotation-SQLPassword-Csharp-WebApp.git)

  7. Válassza az Áttekintés + létrehozás lehetőséget.

  8. Válassza a Létrehozás lehetőséget.

A webalkalmazás megnyitása

Nyissa meg az üzembe helyezett alkalmazás URL-címét:

'https://akvrotation-app.azurewebsites.net/'

Amikor az alkalmazás megnyílik a böngészőben, megjelenik a Generált titkos kód érték és az adatbázishoz csatlakoztatott igaz érték.

További információ