SecretsManagementExtension/SecretsManagementExtension.psm1
if ($PSEdition -eq 'Desktop') { if (Get-Module -Name 'AWSPowerShell' -ListAvailable) { Import-Module -Name 'AWSPowerShell' -ErrorAction 'Stop' } elseif (Get-Module -Name 'AWSPowerShell.NetCore' -ListAvailable) { Import-Module -Name 'AWSPowerShell.NetCore' -ErrorAction 'Stop' } elseif (Get-Module -Name @('AWS.Tools.Common','AWS.Tools.SecretsManager') -ListAvailable) { Import-Module -Name @('AWS.Tools.Common','AWS.Tools.SecretsManager') -ErrorAction 'Stop' } else { throw 'One of the AWS Tools for PowerShell modules must be available for import.' } } else { if (Get-Module -Name 'AWSPowerShell.NetCore' -ListAvailable) { Import-Module -Name 'AWSPowerShell.NetCore' -ErrorAction 'Stop' } elseif (Get-Module -Name @('AWS.Tools.Common','AWS.Tools.SecretsManager') -ListAvailable) { Import-Module -Name @('AWS.Tools.Common','AWS.Tools.SecretsManager') -ErrorAction 'Stop' } else { throw 'One of the AWS Tools for PowerShell modules must be available for import.' } } function Get-AWSSecret { param ( [string] $Name ) if(Test-AWSSecret -Name $Name) { Get-SECSecretValue -SecretId $Name -ErrorAction Stop } } function Test-AWSSecret { param ( [string] $Name ) if(@(Get-SECSecretList -ErrorAction Stop| Where-Object{$_.Name -eq $Name}).Count -eq 1){ $true }else{ $false } } function Get-Secret { param ( [string] $Name, [hashtable] $AdditionalParameters ) if ([WildcardPattern]::ContainsWildcardCharacters($Name)) { throw "The Name parameter cannot contain wild card characters." } $awsSecret = $(Get-AWSSecret -Name $Name) if($awsSecret){ if($awsSecret.SecretBinary){ $Array = ($awsSecret.SecretBinary).ToArray() return @(,$Array) }else{ $json = $awsSecret.SecretString | ConvertFrom-Json if($json.PSType -eq "String"){ return $json.String }elseif($json.PSType -eq "SecureString"){ return ConvertTo-SecureString $json.SecureString -AsPlainText -Force }elseif($json.PSType -eq "PSCredential"){ $clearPassword = ConvertTo-SecureString $json.Password -AsPlainText -Force return New-Object System.Management.Automation.PSCredential ($json.UserName, $clearPassword) }elseif($json.PSType -eq "HashTable"){ $returnHT = @{} if($PSEdition -eq 'Desktop'){ $json.psobject.properties| Foreach-Object { $returnHT.Add($_.Name,$_.Value) } } else{ $returnHT = ConvertFrom-Json $awsSecret.SecretString -AsHashtable } $returnHT.Remove('PSType') return $returnHT } } } } function Set-Secret { param ( [string] $Name, [object] $Secret, [hashtable] $AdditionalParameters ) if(Get-AWSSecret -Name $Name){ Write-Error "Secret name, $Name, is already used in this vault." return $false } if ($Secret -is [PSCredential]){ $returnJson = @{ 'UserName'=$Secret.UserName; 'Password'=$Secret.GetNetworkCredential().Password 'PSType'='PSCredential' } | ConvertTo-Json }elseif($Secret -is [String]){ $returnJson = @{ 'String'=$Secret; 'PSType'='String' } | ConvertTo-Json }elseif($Secret -is [HashTable]){ $returnJson = $Secret | Add-Member -NotePropertyName PSType -NotePropertyValue 'HashTable' -PassThru | ConvertTo-json }elseif($Secret -is [Byte[]]){ $returnByteArray = $Secret }elseif($Secret -is [SecureString]){ $password = [System.Net.NetworkCredential]::new("", $Secret).Password $returnJson = @{ 'SecureString'=$password 'PSType'='SecureString' } | ConvertTo-Json }else{ Write-Error "Unsupported type passed, please use PSCredential,String,HashTable,SecureString or ByteArray." return $false } Try{ $newECSecretparams= @{ 'Name' = $Name 'ErrorAction' = 'Stop' } if($returnJson){ $newECSecretparams.Add('SecretString', $returnJson) }else{ $newECSecretparams.Add('SecretBinary', $returnByteArray) } New-SECSecret @newECSecretparams | Out-Null return $true } catch{ Write-Error $_ return $false } } function Remove-Secret { param ( [string] $Name, [hashtable] $AdditionalParameters ) if ([WildcardPattern]::ContainsWildcardCharacters($Name)) { throw "The Name parameter cannot contain wild card characters." } if(!(Get-AWSSecret -Name $Name)){ Write-Error "Secret name, $Name, does not exist." return $false } try{ Remove-SECSecret -SecretId $Name -ErrorAction Stop -Confirm:$false | Out-Null }Catch{ throw $_ return $false } return $true } function Get-SecretInfo { param( [string] $Filter, [hashtable] $AdditionalParameters ) if ([string]::IsNullOrEmpty($Filter)) { $Filter = "*" } Get-SECSecretList -ErrorAction Stop | Where-Object{$_.Name -like $Filter } | ForEach-Object{ $name = $_.Name $returnObject = [pscustomobject] @{ Name = $name } $awsSecret = $(Get-AWSSecret -Name $Name) if($awsSecret.SecretBinary){ $returnObject | Add-Member -NotePropertyName Value -NotePropertyValue 'ByteArray' }else{ $type = ((Get-AWSSecret -Name $Name).SecretString | ConvertFrom-Json).PsType $returnObject | Add-Member -NotePropertyName Value -NotePropertyValue $type } $ReturnObject } } |