Azure Dashboard jako pomocná ruka pro Azure Governance

Blog

 
 Vukašin Terzić

Pokud chceme udržet naše prostředí Azure čisté, konzistentní, nákladově efektivní a zabezpečené, musíme použít některé techniky správy. Někdy můžeme použít restriktivnější přístup, někdy můžeme uživatelům poskytnout více svobody a spoléhat se na to, že budou dodržovat předem stanovená pravidla. Nebo se můžeme spoléhat pouze na Infrastructure-As-A-Code, kdy všechno nasazujeme pomocí předdefinovaných šablon nebo blueprintů. Zkušenost z praxe potvrzuje, že bychom neměli očekávat, že uživatelé budou číst design dokumenty před každou změnou, kterou provedou. Můžeme vytvořit skvělé dokumenty Azure Governance Design a vše dokonale popsat, uživatelé však tento dokument neotevřou pokaždé, když se pokusí nasadit nový zdroj. To znamená, že vše, co není omezené nebo předem definované, se pravděpodobně v určitém okamžiku pokazí.

Na druhou stranu přísnější omezení zmohou způsobit frustraci uživatelů. Pokud neznají zásady pojmenování, požadované Tagy nebo povolené Azure Regiony, pokusí se to uhodnout. Azure Policy poté zablokuje vytvoření prostředku a uživatelé se budou pokoušet dešifrovat chybovou hlášku, aby zjistili, co přesně bylo zakázané a jaké jsou povolené hodnoty.

Abychom uživatelům usnadnili přístup k dokumentaci, můžeme vytvořit vlastní Azure Dashboard, který obsahuje pravidla Azure Governance a zpřístupnit ho všem uživatelům. Díky tomu uživatelé nebudou muset složitě hledat dokumentaci a všechny potřebné informace budou mít k dispozici na několik kliknutí. Přímo v Azure Portálu. V praxi se ukázalo, že toto funguje výjimečně dobře.

Azure Governance Dashboard

Všechny tyto informace a mnohé další již pravděpodobně budou existovat na vašem centrálním webu podpory IT, nebo v dokumentaci prostředí. Klíčový rozdíl zde však je, že uživatelé je mohou rychle najít, aniž by museli opouštět portál Azure.

Takový Azure Dashboard bude v každé organizaci jiný. Pro lepší představu, jak by mohl vypadat, uvádím několik příkladů, co lze vložit.

Hodiny – časové pásmo používané v Azure je UTC. Mít čas na řídicím panelu může být užitečné, zejména pokud pracujete v prostředích s více časovými pásmy. Zamezí to nutnosti přepočítávání času například když plánujeme odstávku.

Odkazy na dokumentaci prostředí – můžeme zde umístit odkazy na úplnou dokumentaci prostředí, aby se k ní uživatel mohl dostat bez nutnosti hledání

Organizační struktura Azure – pokud máme více než jednu subskripci, pak je vhodné zde umístit tabulky popisující různé subskripce a co do nich patří. Stejné platí i pro Management Groups. V případě složitějšího prostředí, kromě tabulky můžeme vložit i diagram.

Diagram Description automatically generated with medium confidence

Azure Regiony – Jednoduchá tabulka se seznam Azure regionů, které v organizaci využíváme a popisem do jakého regionu patří.

Zásady pojmenovávání resourců – Toto je pravděpodobně tabulka, kterou uživatelé budou chtít vidět nejčastěji. Uživatelé si nemohou pamatovat jmennou konvenci pro každý typ Azure prostředku. Zde bychom měli mít tabulku popisující námi zvolenou jmennou konvenci pro všechny typy prostředků. Ukázalo se, že pokud jí uživatel bude mít k dispozici na par kliknutí, nebude muset vymýšlet nebo si snažit vzpomenout, ale radši se podívá. Pomůže to uživatelům, a zároveň to pomůže udržet názvy konzistentní napřič prostředím.

Azure Tags – Tabulka popisující Azure Tagy, příklady hodnot a jestli se jedná o povinné nebo nepovinné Tagy.

Další informace, které mohou být užitečné a uživatele je často potřebují:

  • Specifické požadavky na vytváření prostředků (například které velikosti virtuálních počítačů používáme pro jaký typ serverů, jaké typy disků využívat, a tak podobně)
  • Virtuální sítě a Subnety. Popis naznačující, co kam patří.
  • Popis sdílených nebo centralizovaných služeb, jako jsou LogAnalytics Workspaces, Backups a jiné.
  • V případě složitějšího uspořádání prostředí nebo jednotlivých aplikací zde můžeme zahrnout i High-Level Diagramy. To uživatelům usnadňuje pochopit strukturu Subskripci, co je s čím spojeno a jak ta prostředí mezi sebou komunikuji. My správci a architekti prostředí to máme zobrazeno ve své hlavě a chápeme to, ale takový diagram je velmi užitečný pro uživatele nebo dodavatele třetích stran.

Kromě toho zde můžete umístit například firemní logo, kontaktní informace na Service Desk a další informace nebo odkazy týkající se společnosti. Ale zbytečně moc informací může taky škodit. Hlavním cílem takového Dashboardu je rychlá dohledatelnost správných informací ve chvíli, když deployujeme nové resources. Všechny ostatní informace by měly být na stránkách technické podpory.

Jak vytvořit Azure Dashboard pro Azure Governance

Vytváření Azure Dashboards je snadné. Všechno potřebné najdete v části Dashboards v Azure Portálu. Texty a obrázky je možné uložit do dlaždiček Markdown Tiles. Není nutné přepisovat celé dokumenty nebo tabulky z Wordu do Markdownu. Místo toho lze využít nástroje na konverzi. Dlaždičky pak můžeme aranžovat a přesouvat pode potřeby.

Nezapomeňte tento nový Azure Dashboard nasdílet uživatelům, aby k němu měli přístup.

Azure Dashboards je možné vytvořit i pomocí importu ze šablony. Níže naleznete JSON šablonu, pokud byste si import chtěli zkusit.

Graphical user interface, application, Word Description automatically generated


{
 "properties": {
  "lenses": {
   "0": {
​    "order": 0,
​    "parts": {
​     "0": {
​      "position": {
​       "x": 0,
​       "y": 0,
​       "colSpan": 4,
​       "rowSpan": 2
​      },
​      "metadata": {
​       "inputs": [],
​       "type": "Extension/Microsoft_AAD_IAM/PartType/OrganizationIdentityPart"
​      }
​     },
​     "1": {
​      "position": {
​       "x": 4,
​       "y": 0,
​       "colSpan": 2,
​       "rowSpan": 2
​      },
​      "metadata": {
​       "inputs": [],
​       "type": "Extension/HubsExtension/PartType/ClockPart",
​       "settings": {
​        "content": {
​         "settings": {
​          "timezoneId": "Pacific Standard Time",
​          "timeFormat": "h:mma",
​          "version": 1
​         }
​        }
​       }
​      }
​     },
​     "2": {
​      "position": {
​       "x": 6,
​       "y": 0,
​       "colSpan": 2,
​       "rowSpan": 2
​      },
​      "metadata": {
​       "inputs": [],
​       "type": "Extension/HubsExtension/PartType/ClockPart",
​       "settings": {
​        "content": {
​         "settings": {
​          "timezoneId": "Central Europe Standard Time",
​          "timeFormat": "h:mma",
​          "version": 1
​         }
​        }
​        }
​      }
​     },
​     "3": {
​      "position": {
​       "x": 8,
​       "y": 0,
​       "colSpan": 6,
​       "rowSpan": 2
​      },
​      "metadata": {
​       "inputs": [],
​       "type": "Extension/HubsExtension/PartType/MarkdownPart",
​       "settings": {
​        "content": {
​         "settings": {
​          "content": "<a href='#' target='_blank'>Azure Architecture Design</a>\n\n<a href='#' target='_blank'>Azure Governance Design</a>\n\n<a href='#' target='_blank'>Azure Migration Guide</a>\n",
​          "title": "Documentation Links:",
​          "subtitle": "",
​          "markdownSource": 1,
​          "markdownUri": null
​         }
​        }
​       }
​      }
​     },
​     "4": {
​      "position": {
​       "x": 0,
​       "y": 2,
​       "colSpan": 14,
​       "rowSpan": 6
​      },
​      "metadata": {
​       "inputs": [],
​       "type": "Extension/HubsExtension/PartType/MarkdownPart",
​       "settings": {
​        "content": {
​         "settings": {
​          "content": "<img width='1200' src='https://docs.microsoft.com/en-us/azure/architecture/reference-architectures/hybrid-networking/images/hub-spoke.png'/>",
​          "title": "Azure Architecture",
​          "subtitle": "",
​          "markdownSource": 1,
​          "markdownUri": null
​         }
​        }
​       }
​      }
​     },
​     "5": {
​      "position": {
​       "x": 0,
​       "y": 8,
​       "colSpan": 14,
​       "rowSpan": 1
​      },
​      "metadata": {
​       "inputs": [],
​       "type": "Extension/HubsExtension/PartType/MarkdownPart",
​       "settings": {
​         "content": {
​         "settings": {
​          "content": "<div style=\"line-height:50px;\"><span style='font-size:16px;font-weight:bold'>Azure Governance</div>",
​          "title": "",
​          "subtitle": "",
​          "markdownSource": 1,
​          "markdownUri": null
​         }
​        }
​       }
​      }
​     },
​     "6": {
​      "position": {
​       "x": 0,
​       "y": 9,
​       "colSpan": 5,
​       "rowSpan": 2
​      },
​      "metadata": {
​       "inputs": [],
​       "type": "Extension/HubsExtension/PartType/MarkdownPart",
​       "settings": {
​         "content": {
​         "settings": {
​          "content": "| **Region Priority** | **Region Name** | **Physical Location** |\n| --- | --- | --- |\n| Primary Region | | |\n| Secondary Region Pair | | |",
​          "title": "Regions",
​          "subtitle": "",
​          "markdownSource": 1,
​          "markdownUri": null
​         }
​        }
​       }
​      }
​     },
​     "7": {
​      "position": {
​       "x": 5,
​       "y": 9,
​       "colSpan": 9,
​       "rowSpan": 2
​      },
​      "metadata": {
​       "inputs": [],
​       "type": "Extension/HubsExtension/PartType/MarkdownPart",
​       "settings": {
​        "content": {
​         "settings": {
​          "content": "| **Subscription Name** | **Purpose** | **Management Group** |\n| --- | --- | --- |\n| SUB1 | Infrastructure resources, connectivity to Internet and On-Premises | MG1 |\n| SUB2 | Applications subscription | MG1 |",
​          "title": "Subscriptions",
​          "subtitle": "",
​          "markdownSource": 1,
​          "markdownUri": null
​         }
​        }
​       }
​      }
​     },
​     "8": {
​      "position": {
​       "x": 0,
​       "y": 11,
​       "colSpan": 14,
​       "rowSpan": 3
​      },
​      "metadata": {
​       "inputs": [],
​       "type": "Extension/HubsExtension/PartType/MarkdownPart",
​       "settings": {
​        "content": {
​         "settings": {
​          "content": "| **TAG** | **Values** | **Meaning** | **Implementation Type** |\n| --- | --- | --- | --- |\n| Technical-Contact | $Email | Identification who is responsible for the resource from the technical point and if it is running. | Required by Azure Policy on Resource Groups |\n| Business-Contact | $Email | Identification who is responsible for the product which is using the resource. | Required by Azure Policy on Resource Groups |\n| SLA | High, Medium, Low | Identification of business criticality of resources. | Default value will be assigned by Azure Policy if not specified. Default value: Low |",
​          "title": "TAGS",
​          "subtitle": "",
​          "markdownSource": 1,
​          "markdownUri": null
​         }
​        }
​       }
​      }
​     },
​     "9": {
​      "position": {
​       "x": 0,
​       "y": 14,
​       "colSpan": 14,
​       "rowSpan": 3
​      },
​      "metadata": {
​       "inputs": [],
​       "type": "Extension/HubsExtension/PartType/MarkdownPart",
​       "settings": {
​        "content": {
​         "settings": {
​          "content": "| **Resource Type** | **Naming convention** | **Example** |\n| --- | --- | --- |\n| **Organizational Structure** |\n| Management Group | MG-$Purpose | MG-Production |\n| Subscription | SUB-$Purpose | SUB-Connectivity |\n| Resource Group | rg-$purpose | rg-app01 |",
​          "title": "Resource Naming",
​          "subtitle": "",
​          "markdownSource": 1,
​          "markdownUri": null
​         }
​        }
​       }
​      }
​     }
​    }
   }
  },
  "metadata": {
   "model": {
​    "timeRange": {
​     "value": {
​      "relative": {
​       "duration": 24,
​       "timeUnit": 1
​      }
​     },
​     "type": "MsPortalFx.Composition.Configuration.ValueTypes.TimeRange"
​    },
​    "filterLocale": {
​     "value": "en-us"
​    },
​    "filters": {
​     "value": {
​      "MsPortalFx_TimeRange": {
​       "model": {
​        "format": "utc",
​        "granularity": "auto",
​        "relative": "24h"
​       },
​       "displayCache": {
​        "name": "UTC Time",
​        "value": "Past 24 hours"
​       },
​       "filteredPartIds": []
​      }
​     }
​    }
   }
  }
 },
 "name": "KPCS Governance Dashboard Example",
 "type": "Microsoft.Portal/dashboards",
 "location": "ENTER LOCATION",
 "tags": {
  "hidden-title": "KPCS Governance Dashboard Example"
 },
 "apiVersion": "2015-08-01-preview"
}
```powershell

Sdílej v médiích

Kontakt

Nenašli jste, co hledáte? Pošlete nám zprávu a zůstaneme s vámi ve spojení.

* Vyžadované pole

Osobní data použijeme pouze pro vypracování odpovědi na dotaz. Pravidla zpracování osobních údajů

map us
map eu