CredHygiene/CredHygiene.ps1
Set-StrictMode -Version Latest function New-AzSKTrackedCredential { <# .SYNOPSIS This command would help to set alert on expiring credentials. .DESCRIPTION This command would help to set alert on expiring credentials. .PARAMETER SubscriptionId Provide the subscription id. .PARAMETER CredentialLocation Provide the credential location. .PARAMETER CredentialName Provide the credential name. .PARAMETER CredentialGroup Provide the credential group. .PARAMETER RotationInterval Provide the rotation interval. .PARAMETER Comment Provide the comment for the credential. .LINK https://aka.ms/azskossdocs #> Param( [Parameter(Mandatory = $true, ParameterSetName = "Custom", Position=0, HelpMessage = "Provide the subscription id")] [string] [ValidateNotNullOrEmpty()] [Alias("s")] $SubscriptionId, [Parameter(Mandatory = $true, ParameterSetName = "Custom", Position=1, HelpMessage = "Provide the credential location")] [ValidateSet("Custom", "AppService", "KeyVault")] [string] [Alias("cl")] $CredentialLocation, [Parameter(Mandatory = $true, ParameterSetName = "Custom", Position=2, HelpMessage = "Provide the credential name")] [string] [Alias("cn")] $CredentialName, [Parameter(Mandatory = $true, ParameterSetName = "Custom", HelpMessage = "Provide the rotation interval in days")] [int] [Alias("rint")] $RotationIntervalInDays, [Parameter(Mandatory = $true, ParameterSetName = "Custom", HelpMessage = "Provide the next expiry due in days")] [int] [Alias("nexp")] $NextExpiryInDays, [Parameter(Mandatory = $false, ParameterSetName = "Custom", HelpMessage = "Provide the credential group for alert")] [string] [Alias("cgp")] $CredentialGroup, [Parameter(Mandatory = $true, ParameterSetName = "Custom", HelpMessage = "Provide the comment for the credential")] [string] [Alias("cmt")] $Comment ) Begin { [CommandHelper]::BeginCommand($MyInvocation); [AzListenerHelper]::RegisterListeners(); } Process { try { $cred = [CredHygiene]::new($SubscriptionId, $PSCmdlet.MyInvocation); if($cred){ $cred.credName = $CredentialName $cred.credLocation = $CredentialLocation while($RotationIntervalInDays -le 0){ Write-Host 'Rotation interval (in days) should be greater than 0' $RotationIntervalInDays = Read-Host 'Enter rotation interval (> 0 days)' } $cred.rotationInt = $RotationIntervalInDays if($NextExpiryInDays -lt 0){ $NextExpiryInDays = 0; } $cred.nextExpiry = $NextExpiryInDays $cred.comment = $Comment $cred.InvokeFunction($cred.NewAlert, @($CredentialLocation,$CredentialGroup)) } } catch { [EventBase]::PublishGenericException($_); } } End { [AzListenerHelper]::UnregisterListeners(); } } function Get-AzSKTrackedCredential { <# .SYNOPSIS This command would help to list expiring credentials. .DESCRIPTION This command would help to list expiring credentials. .PARAMETER SubscriptionId Provide the subscription id. .PARAMETER CredentialName Provide the credential name. .PARAMETER DetailedView Switch for detailed metadata information about the credential. .LINK https://aka.ms/azskossdocs #> Param( [Parameter(Mandatory = $true, HelpMessage = "Provide the subscription id")] [string] [Alias("s")] $SubscriptionId, [Parameter(Mandatory = $false, HelpMessage = "Provide the credential name")] [string] [Alias("cn")] $CredentialName, [Parameter(Mandatory = $false, HelpMessage = "Switch for printing detailed information about the credential.")] [switch] [Alias("dtl")] $DetailedView ) Begin { [CommandHelper]::BeginCommand($MyInvocation); [AzListenerHelper]::RegisterListeners(); } Process { try { $cred = [CredHygiene]::new($SubscriptionId, $PSCmdlet.MyInvocation); if($cred){ if($CredentialName){ $cred.InvokeFunction($cred.GetAlert, @($CredentialName,$DetailedView)) } else { $cred.InvokeFunction($cred.GetAlert, @($null,$DetailedView)) } } } catch { [EventBase]::PublishGenericException($_); } } End { [AzListenerHelper]::UnregisterListeners(); } } function Remove-AzSKTrackedCredential { <# .SYNOPSIS This command would help to delete the expiration details of the credential. .DESCRIPTION This command would help to delete the expiration details of the credential. .PARAMETER SubscriptionId Provide the subscription id. .PARAMETER CredentialName Provide the credential name. .LINK https://aka.ms/azskossdocs #> Param( [Parameter(Mandatory = $true, HelpMessage = "Provide the subscription id")] [string] [Alias("s")] $SubscriptionId, [Parameter(Mandatory = $true, HelpMessage = "Provide the credential name")] [string] [Alias("cn")] $CredentialName, [Parameter(Mandatory = $false, HelpMessage = "Switch for removing credential metadata without further user consent.")] [switch] [Alias("f")] $Force ) Begin { [CommandHelper]::BeginCommand($MyInvocation); [AzListenerHelper]::RegisterListeners(); } Process { try { $cred = [CredHygiene]::new($SubscriptionId, $PSCmdlet.MyInvocation); if($cred){ if($Force){ $cred.InvokeFunction($cred.RemoveAlert, @($CredentialName, $true)) } else { $cred.InvokeFunction($cred.RemoveAlert, @($CredentialName, $false)) } } } catch { [EventBase]::PublishGenericException($_); } } End { [AzListenerHelper]::UnregisterListeners(); } } function Update-AzSKTrackedCredential { <# .SYNOPSIS This command would help to update the alert on expiring credentials. .DESCRIPTION This command would help to update the alert on expiring credentials. .PARAMETER SubscriptionId Provide the subscription id. .PARAMETER CredentialName Provide the credential name. .PARAMETER CredentialGroup Provide the credential group. .PARAMETER RotationInterval Provide the rotation interval. .PARAMETER Comment Provide the comment for the credential. .LINK https://aka.ms/azskossdocs #> Param( [Parameter(Mandatory = $true, HelpMessage = "Provide the subscription id")] [string] [Alias("s")] $SubscriptionId, [Parameter(Mandatory = $true, HelpMessage = "Provide the credential name")] [string] [Alias("cn")] $CredentialName, [Parameter(Mandatory = $false, HelpMessage = "Provide the rotation interval in days")] [int] [Alias("rint")] $RotationIntervalInDays, [Parameter(Mandatory = $false, HelpMessage = "Provide the credential group for alert")] [string] [Alias("cgp")] $CredentialGroup, [Parameter(Mandatory = $false, HelpMessage = "Switch for rotating credential at source.")] [switch] [Alias("rlu")] $ResetLastUpdate, [Parameter(Mandatory = $false, HelpMessage = "Switch for rotating credential at source.")] [switch] [Alias("uc")] $UpdateCredential, [Parameter(Mandatory = $true, HelpMessage = "Provide the comment for the credential")] [string] [Alias("cmt")] $Comment ) Begin { [CommandHelper]::BeginCommand($MyInvocation); [AzListenerHelper]::RegisterListeners(); } Process { try { $cred = [CredHygiene]::new($SubscriptionId, $PSCmdlet.MyInvocation); if($cred){ $updatecred = $false; $resetcred = $false; if($UpdateCredential){ $updatecred = $true; } if($ResetLastUpdate){ $resetcred = $true; } while($RotationIntervalInDays -lt 0){ Write-Host 'Rotation interval (in days) should be greater than 0' $RotationIntervalInDays = Read-Host 'Enter rotation interval (> 0 days)' } $cred.InvokeFunction($cred.UpdateAlert, @($CredentialName,$RotationIntervalInDays,$CredentialGroup,$updatecred,$resetcred,$Comment)) } } catch { [EventBase]::PublishGenericException($_); } } End { [AzListenerHelper]::UnregisterListeners(); } } function New-AzSKTrackedCredentialGroup { <# .SYNOPSIS This command would help to update the alert on expiring credentials. .DESCRIPTION This command would help to update the alert on expiring credentials. .PARAMETER SubscriptionId Provide the subscription id. .PARAMETER AlertEmail Provide the email id for alert. .LINK https://aka.ms/azskossdocs #> Param( [Parameter(Mandatory = $true, HelpMessage = "Provide the subscription id")] [string] [Alias("s")] $SubscriptionId, [Parameter(Mandatory = $true, HelpMessage = "Provide the email id for alert")] [string] [Alias("aem")] $AlertEmail ) Begin { [CommandHelper]::BeginCommand($MyInvocation); [ListenerHelper]::RegisterListeners(); } Process { try { $cred = [CredHygiene]::new($SubscriptionId, $PSCmdlet.MyInvocation); if($cred){ $cred.InvokeFunction($cred.InstallAlert, @($AlertEmail)) } } catch { [EventBase]::PublishGenericException($_); } } End { [ListenerHelper]::UnregisterListeners(); } } |