Azure Cost Analysis Ingeschakeld

💼 Management Samenvatting

Azure Cost Analysis biedt organisaties gedetailleerde inzichten in hun clouduitgaven, waardoor zij kunnen identificeren waar kosten vandaan komen, trends kunnen analyseren en kostenoptimalisatie kunnen uitvoeren. Deze functionaliteit vormt de basis voor effectief financieel beheer en transparantie in de cloud.

Aanbeveling
IMPLEMENTEREN VOOR TRANSPARANTIE
Risico zonder
Low
Risk Score
4/10
Implementatie
3u (tech: 1u)
Van toepassing op:
Azure Subscriptions

Zonder gedetailleerde kostenanalyse lopen organisaties het risico om in het duister te tasten over hun clouduitgaven. Het ontbreken van inzicht maakt het onmogelijk om te identificeren welke services, resourcegroepen of projecten de meeste kosten genereren, waardoor kostenoptimalisatie onmogelijk wordt. Budgetoverschrijdingen worden pas ontdekt wanneer de factuur arriveert, zonder mogelijkheid om proactief in te grijpen. Daarnaast ontbreekt het zonder kostenanalyse aan transparantie naar stakeholders en management over waar publieke middelen aan worden besteed. Het onvermogen om kosten toe te wijzen aan specifieke afdelingen of projecten belemmert verantwoordelijkheidsverantwoording en maakt het onmogelijk om gefundeerde beslissingen te nemen over resourceallocatie. Bovendien kunnen ongebruikelijke kostenpatronen die kunnen wijzen op beveiligingsincidenten zoals cryptomining of misbruik van accounts, niet worden gedetecteerd zonder gedetailleerde kostenanalyse. Met Azure Cost Analysis beschikken organisaties over uitgebreide tools om hun clouduitgaven te analyseren en te begrijpen. De functionaliteit maakt het mogelijk om kosten te filteren en te groeperen op basis van verschillende dimensies, waaronder service, resourcegroep, tag, locatie en tijdsperiode. Deze flexibiliteit stelt organisaties in staat om kosten te analyseren op het niveau dat het meest relevant is voor hun specifieke behoeften, of het nu gaat om het identificeren van de duurste services binnen een abonnement of het analyseren van kosten per afdeling via tags. Daarnaast biedt Cost Analysis historische trends en prognoses die organisaties helpen om toekomstige uitgaven te voorspellen en budgetten te plannen. De functionaliteit maakt het ook mogelijk om kosten te exporteren naar Excel of CSV voor verdere analyse, waardoor organisaties hun eigen rapportages en dashboards kunnen ontwikkelen die aansluiten bij hun specifieke rapportagevereisten.

PowerShell Modules Vereist
Primary API: Azure API
Connection: Connect-AzAccount
Required Modules: Az.CostManagement

Implementatie

Azure Cost Analysis is een ingebouwde functionaliteit binnen Azure Portal die organisaties uitgebreide tools biedt om hun clouduitgaven te analyseren en te begrijpen. De functionaliteit is automatisch beschikbaar voor alle Azure-abonnementen en vereist geen aanvullende configuratie om te activeren. Cost Analysis biedt verschillende weergaven en analyses die organisaties helpen om hun kosten te begrijpen, waaronder een kostenoverzicht dat toont hoeveel er is uitgegeven binnen een bepaalde tijdsperiode, kosten per service die inzicht geven in welke Azure-services de meeste kosten genereren, en kosten per resourcegroep die aantonen hoe kosten zijn verdeeld over verschillende projecten of toepassingen. Een belangrijk onderdeel van Cost Analysis is de mogelijkheid om kosten te filteren en te groeperen op basis van verschillende dimensies. Organisaties kunnen kosten filteren op abonnement, resourcegroep, service, locatie, tag en tijdsperiode, waardoor zij kosten kunnen analyseren op het niveau dat het meest relevant is voor hun specifieke vraag of behoefte. Deze flexibiliteit maakt het mogelijk om bijvoorbeeld te identificeren welke services de meeste kosten genereren binnen een specifieke resourcegroep, of om kosten te analyseren per afdeling door gebruik te maken van tags. Daarnaast kunnen organisaties kosten groeperen op basis van meerdere dimensies tegelijkertijd, waardoor complexe analyses mogelijk zijn die dieper inzicht geven in kostenpatronen en trends. Cost Analysis biedt ook historische trendanalyse die organisaties helpt om te begrijpen hoe hun uitgaven zich ontwikkelen over tijd. Deze trends kunnen worden gevisualiseerd in grafieken die kosten over dagen, weken, maanden of jaren tonen, waardoor organisaties seizoensgebonden variaties, groeitrends en anomalieën kunnen identificeren. Daarnaast biedt Cost Analysis prognosefunctionaliteit die gebruikmaakt van machine learning om toekomstige uitgaven te voorspellen op basis van historische data. Deze prognoses helpen organisaties om budgetten te plannen en om proactief maatregelen te nemen wanneer kosten naar verwachting zullen stijgen. Een waardevolle functie van Cost Analysis is de mogelijkheid om kosten te exporteren naar verschillende formaten, waaronder Excel en CSV. Deze exportfunctionaliteit maakt het mogelijk om kostendata te gebruiken voor verdere analyse in externe tools, voor het opstellen van rapportages voor management of stakeholders, of voor het integreren met andere systemen voor financiële planning en budgetbeheer. Daarnaast kunnen organisaties aangepaste weergaven en rapporten opslaan binnen Cost Analysis, waardoor veelgebruikte analyses snel toegankelijk zijn zonder dat filters en groeperingen telkens opnieuw moeten worden geconfigureerd. Cost Analysis maakt ook gebruik van kostenallocatie via tags, waardoor organisaties kosten kunnen toewijzen aan specifieke afdelingen, projecten, kostenplaatsen of andere organisatie-eenheden. Door consistente tagstructuren te gebruiken kunnen organisaties een gedetailleerd beeld krijgen van hoe kosten zijn verdeeld binnen de organisatie, wat essentieel is voor verantwoordelijkheidsverantwoording en budgetbeheer. Tags maken het mogelijk om kosten te analyseren op basis van organisatorische dimensies die verder gaan dan de technische indeling in abonnementen en resourcegroepen, waardoor Cost Analysis aansluit bij de manier waarop organisaties zijn gestructureerd en hoe verantwoordelijkheden zijn verdeeld.

Vereisten

  1. Azure-abonnement met actieve resources
  2. Toegang tot Azure Portal met de rol Cost Management Reader of hoger
  3. Optioneel: Azure Cost Management API-toegang voor automatisering

Implementatie

Gebruik PowerShell-script cost-analysis-enabled.ps1 (functie Invoke-Implementation) – Implementeren.

Monitoring

Gebruik PowerShell-script cost-analysis-enabled.ps1 (functie Invoke-Monitoring) – Controleren.

Compliance en Naleving

Remediatie

Gebruik PowerShell-script cost-analysis-enabled.ps1 (functie Invoke-Remediation) – Herstellen.

Compliance & Frameworks

Automation

Gebruik het onderstaande PowerShell script om deze security control te monitoren en te implementeren. Het script bevat functies voor zowel monitoring (-Monitoring) als remediation (-Remediation).

PowerShell
<# ================================================================================ AZURE POWERSHELL SCRIPT - Nederlandse Baseline voor Veilige Cloud ================================================================================ .SYNOPSIS Azure Cost Analysis Enabled .DESCRIPTION Controleert of Azure Cost Analysis beschikbaar is en correct wordt gebruikt. .NOTES Filename: cost-analysis-enabled.ps1 Author: Nederlandse Baseline voor Veilige Cloud Version: 1.0 Related JSON: content/azure/cost-management/cost-analysis-enabled.json #> #Requires -Version 5.1 #Requires -Modules Az.Accounts, Az.CostManagement [CmdletBinding()] param( [Parameter()] [switch]$Monitoring, [Parameter()] [switch]$Remediation, [Parameter()] [switch]$Revert, [Parameter()] [switch]$WhatIf ) $ErrorActionPreference = 'Stop' $script:PolicyName = "Azure Cost Analysis Enabled" # ============================================================================ # FUNCTIONS # ============================================================================ function Connect-RequiredServices { <# .SYNOPSIS Maakt verbinding met benodigde Azure-services #> try { if (-not (Get-AzContext)) { Write-Host "Verbinden met Azure..." -ForegroundColor Cyan Connect-AzAccount | Out-Null } $context = Get-AzContext Write-Host "Verbonden met: $($context.Account.Id) - Subscription: $($context.Subscription.Name)" -ForegroundColor Green } catch { Write-Error "Kan geen verbinding maken met Azure: $_" throw } } function Test-CostAnalysisAccess { <# .SYNOPSIS Test of Cost Analysis toegankelijk is #> try { $subscriptions = Get-AzSubscription -ErrorAction SilentlyContinue if (-not $subscriptions) { return @{ IsCompliant = $false Message = "Geen abonnementen gevonden of geen toegang" } } $accessibleSubscriptions = 0 foreach ($sub in $subscriptions) { Set-AzContext -SubscriptionId $sub.Id | Out-Null try { # Test of Cost Management API toegankelijk is $query = @{ type = "ActualCost" timeframe = "TheLastMonth" dataset = @{ granularity = "Monthly" aggregation = @{ totalCost = @{ name = "PreTaxCost" function = "Sum" } } } } $result = Invoke-AzRestMethod -Path "/subscriptions/$($sub.Id)/providers/Microsoft.CostManagement/query?api-version=2023-03-01" -Method POST -Payload ($query | ConvertTo-Json -Depth 10) -ErrorAction SilentlyContinue if ($result.StatusCode -eq 200) { $accessibleSubscriptions++ } } catch { # API kan beperkt zijn, maar Cost Analysis in portal is altijd beschikbaar # We beschouwen dit als compliant als er abonnementen zijn } } return @{ IsCompliant = $true TotalSubscriptions = $subscriptions.Count AccessibleSubscriptions = $accessibleSubscriptions Message = "Cost Analysis is beschikbaar voor $($subscriptions.Count) abonnement(en)" } } catch { return @{ IsCompliant = $false Message = "Fout bij testen van Cost Analysis toegang: $_" } } } function Get-CostAnalysisPermissions { <# .SYNOPSIS Controleert of gebruikers de juiste rechten hebben #> try { $subscriptions = Get-AzSubscription -ErrorAction SilentlyContinue $results = @() foreach ($sub in $subscriptions) { Set-AzContext -SubscriptionId $sub.Id | Out-Null try { # Check voor Cost Management Reader rol $roleAssignments = Get-AzRoleAssignment -Scope "/subscriptions/$($sub.Id)" -ErrorAction SilentlyContinue | Where-Object { $_.RoleDefinitionName -in @("Cost Management Reader", "Cost Management Contributor", "Owner", "Contributor") } $results += @{ SubscriptionName = $sub.Name SubscriptionId = $sub.Id HasAccess = ($roleAssignments.Count -gt 0) RoleAssignments = $roleAssignments.Count } } catch { $results += @{ SubscriptionName = $sub.Name SubscriptionId = $sub.Id HasAccess = $false Error = $_.Exception.Message } } } return $results } catch { Write-Warning "Kan rechten niet controleren: $_" return @() } } # ============================================================================ # STANDARD FUNCTIONS # ============================================================================ function Invoke-Implementation { <# .SYNOPSIS Implementeert de configuratie #> [CmdletBinding()] param() Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "$script:PolicyName - Implementatie" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan Invoke-Remediation } function Invoke-Monitoring { <# .SYNOPSIS Controleert de huidige configuratie status #> [CmdletBinding()] param() Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "$script:PolicyName" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan try { Connect-RequiredServices # Test Cost Analysis toegang $accessTest = Test-CostAnalysisAccess Write-Host "`nToegang tot Cost Analysis:" -ForegroundColor Yellow Write-Host " Status: $($accessTest.Message)" -ForegroundColor $(if ($accessTest.IsCompliant) { "Green" } else { "Yellow" }) if ($accessTest.TotalSubscriptions) { Write-Host " Abonnementen: $($accessTest.TotalSubscriptions)" -ForegroundColor Cyan } # Check permissions Write-Host "`nRechten controle:" -ForegroundColor Yellow $permissions = Get-CostAnalysisPermissions if ($permissions.Count -gt 0) { foreach ($perm in $permissions) { $status = if ($perm.HasAccess) { "OK" } else { "Waarschuwing" } $color = if ($perm.HasAccess) { "Green" } else { "Yellow" } Write-Host " $($perm.SubscriptionName): $status" -ForegroundColor $color if ($perm.RoleAssignments) { Write-Host " Roltoewijzingen: $($perm.RoleAssignments)" -ForegroundColor Gray } } } # Instructions Write-Host "`nAzure Cost Analysis is automatisch beschikbaar voor alle abonnementen." -ForegroundColor Cyan Write-Host "`nAanbevolen acties:" -ForegroundColor Yellow Write-Host " 1. Open Azure Portal > Cost Management + Billing > Cost analysis" -ForegroundColor Gray Write-Host " 2. Configureer aangepaste weergaven voor veelgebruikte analyses" -ForegroundColor Gray Write-Host " 3. Zorg voor consistente tagstructuur voor kostenallocatie" -ForegroundColor Gray Write-Host " 4. Voer wekelijkse kostenreviews uit" -ForegroundColor Gray Write-Host " 5. Controleer of gebruikers de rol Cost Management Reader hebben" -ForegroundColor Gray if ($accessTest.IsCompliant) { Write-Host "`nSTATUS: COMPLIANT" -ForegroundColor Green Write-Host "Cost Analysis is beschikbaar en toegankelijk." -ForegroundColor Green exit 0 } else { Write-Host "`nSTATUS: WAARSCHUWING" -ForegroundColor Yellow Write-Host "Controleer toegangsrechten en abonnementconfiguratie." -ForegroundColor Yellow exit 1 } } catch { Write-Host "`nERROR: $_" -ForegroundColor Red exit 2 } } function Invoke-Remediation { <# .SYNOPSIS Herstelt de configuratie naar de gewenste staat #> [CmdletBinding()] param() Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "$script:PolicyName - Remediatie" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan try { Connect-RequiredServices Write-Host "`nAzure Cost Analysis is automatisch beschikbaar." -ForegroundColor Cyan Write-Host "Geen technische configuratie vereist." -ForegroundColor Cyan Write-Host "`nAanbevolen stappen voor effectief gebruik:" -ForegroundColor Yellow Write-Host " 1. Verifieer toegangsrechten:" -ForegroundColor Gray Write-Host " - Gebruikers hebben rol 'Cost Management Reader' nodig" -ForegroundColor Gray Write-Host " - Voor exports: rol 'Cost Management Contributor' of hoger" -ForegroundColor Gray Write-Host "`n 2. Configureer in Azure Portal:" -ForegroundColor Gray Write-Host " - Navigeer naar: Cost Management + Billing > Cost analysis" -ForegroundColor Gray Write-Host " - Maak aangepaste weergaven aan voor veelgebruikte analyses" -ForegroundColor Gray Write-Host " - Configureer filters op service, resourcegroep, tags" -ForegroundColor Gray Write-Host "`n 3. Tagstructuur:" -ForegroundColor Gray Write-Host " - Ontwikkel consistente tagstructuur (afdeling, project, kostenplaats)" -ForegroundColor Gray Write-Host " - Pas tags toe op alle resources voor kostenallocatie" -ForegroundColor Gray Write-Host " - Overweeg Azure Policy voor automatische tagtoepassing" -ForegroundColor Gray Write-Host "`n 4. Processen:" -ForegroundColor Gray Write-Host " - Voer wekelijkse kostenreviews uit" -ForegroundColor Gray Write-Host " - Monitor kostenprognoses en trends" -ForegroundColor Gray Write-Host " - Onderzoek anomalieën direct" -ForegroundColor Gray Write-Host "`nRemediatie voltooid. Gebruik -Monitoring om status te controleren." -ForegroundColor Green exit 0 } catch { Write-Host "`nERROR: $_" -ForegroundColor Red exit 2 } } function Invoke-Revert { <# .SYNOPSIS Keert de configuratie terug #> [CmdletBinding()] param() Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "$script:PolicyName - Revert" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan Write-Host "`nCost Analysis kan niet worden uitgeschakeld." -ForegroundColor Yellow Write-Host "De functionaliteit is altijd beschikbaar in Azure Portal." -ForegroundColor Yellow Write-Host "`nOm toegang te beperken:" -ForegroundColor Cyan Write-Host " - Verwijder Cost Management Reader/Contributor rollen" -ForegroundColor Gray Write-Host " - Beperk toegang tot specifieke abonnementen" -ForegroundColor Gray exit 0 } # ============================================================================ # MAIN EXECUTION # ============================================================================ try { if ($Revert) { Invoke-Revert } elseif ($Monitoring) { Invoke-Monitoring } elseif ($Remediation) { Invoke-Remediation } else { Write-Host "`nGebruik: -Monitoring | -Remediation | -Revert" -ForegroundColor Yellow Write-Host "`nVoorbeelden:" -ForegroundColor Cyan Write-Host " .\cost-analysis-enabled.ps1 -Monitoring" -ForegroundColor Gray Write-Host " .\cost-analysis-enabled.ps1 -Remediation" -ForegroundColor Gray } } catch { Write-Host "`nFATAL ERROR: $_" -ForegroundColor Red exit 2 } finally { Write-Host "`n========================================" -ForegroundColor Cyan }

Risico zonder implementatie

Risico zonder implementatie
Low: Zonder gedetailleerde kostenanalyse beschikken organisaties niet over inzicht in hun clouduitgaven, waardoor kostenoptimalisatie onmogelijk wordt en budgetoverschrijdingen pas worden ontdekt wanneer de factuur arriveert. Het ontbreken van transparantie belemmert verantwoordelijkheidsverantwoording en maakt het onmogelijk om gefundeerde beslissingen te nemen over resourceallocatie. Daarnaast kunnen ongebruikelijke kostenpatronen die kunnen wijzen op beveiligingsincidenten zoals cryptomining niet worden gedetecteerd zonder gedetailleerde kostenanalyse. Het risico wordt geclassificeerd als laag tot medium, omdat het primair gaat om financiële transparantie zonder directe beveiligingsimpact, hoewel kostenanalyse wel kan helpen bij het detecteren van beveiligingsincidenten.

Management Samenvatting

Azure Cost Analysis biedt gedetailleerde inzichten in clouduitgaven via filters, groeperingen en historische trends. De functionaliteit is automatisch beschikbaar voor alle Azure-abonnementen en vereist geen aanvullende configuratie om te activeren. Organisaties moeten wekelijkse kostenreviews uitvoeren, aangepaste weergaven configureren en een consistente tagstructuur ontwikkelen voor kostenallocatie. Cost Analysis vormt de basis voor effectief financieel beheer en transparantie in de cloud.