functions/external-vaults/Set-TssExternalVaultSecretRemoteValue.ps1
|
function Set-TssExternalVaultSecretRemoteValue { <# .SYNOPSIS Set the value of an external vault secret in the external vault .DESCRIPTION Connect to the external vault (Azure Key Vault, AWS Secrets Manager, Google Secret Manager or HashiCorp Vault) and write a value to it for an external vault secret. Single mode bindings take -Value. Key/value map bindings take -Entries, one key per configured remote key. The server rejects the wrong shape for the binding. The request body is never written to Verbose or WhatIf output. .PARAMETER TssSession TssSession object created by New-TssSession for authentication .PARAMETER Id External vault secret ID .PARAMETER Entries Key/value pairs to write, for key/value map bindings: each key is a configured remote key, each value a string or SecureString .PARAMETER Value Value to write, for single mode bindings .EXAMPLE $session = New-TssSession -SecretServer https://alpha -Credential $ssCred Set-TssExternalVaultSecretRemoteValue -TssSession $session -Id 12 -Value (Read-Host -AsSecureString) Write a new value to the external vault for single mode external vault secret 12 .EXAMPLE $session = New-TssSession -SecretServer https://alpha -Credential $ssCred $newValue = Read-Host -AsSecureString Set-TssExternalVaultSecretRemoteValue -TssSession $session -Id 13 -Entries @{ username = 'svc-app'; credential = $newValue } Write the username and credential keys to the external vault for key/value map external vault secret 13 .LINK https://thycotic-ps.github.io/thycotic.secretserver/commands/external-vaults/Set-TssExternalVaultSecretRemoteValue .LINK https://github.com/thycotic-ps/thycotic.secretserver/blob/main/src/functions/external-vaults/Set-TssExternalVaultSecretRemoteValue.ps1 .NOTES Requires TssSession object returned by New-TssSession #> [CmdletBinding(SupportsShouldProcess)] [OutputType('Thycotic.PowerShell.ExternalVaults.SecretRemoteValue')] param ( [Parameter(Mandatory, ValueFromPipeline, Position = 0)] [Thycotic.PowerShell.Authentication.Session] $TssSession, [Parameter(Mandatory, ValueFromPipelineByPropertyName)] [Alias('ExternalVaultSecretId')] [int] $Id, [Parameter(Mandatory, ParameterSetName = 'Entries')] [hashtable] $Entries, [Parameter(Mandatory, ParameterSetName = 'Value')] [securestring] $Value ) begin { $tssParams = $PSBoundParameters $invokeParams = . $GetInvokeApiParams $TssSession } process { Get-TssInvocation $PSCmdlet.MyInvocation if ($tssParams.ContainsKey('TssSession') -and $TssSession.IsValidSession()) { Compare-TssVersion $TssSession '11.7.000000' $PSCmdlet.MyInvocation $uri = $TssSession.ApiUrl, 'external-vaults', 'vaults', 'secrets', $Id, 'remote-value' -join '/' $invokeParams.Uri = $uri $invokeParams.Method = 'POST' $body = @{ data = @{ } } switch ($PSCmdlet.ParameterSetName) { 'Entries' { $remoteEntries = @{ } foreach ($entryKey in $Entries.Keys) { $entryValue = $Entries[$entryKey] if ($entryValue -is [securestring]) { $entryValue = [System.Net.NetworkCredential]::new('', $entryValue).Password } $remoteEntries[[string]$entryKey] = [string]$entryValue } $body.data.Add('entries', $remoteEntries) } 'Value' { $body.data.Add('value', [System.Net.NetworkCredential]::new('', $Value).Password) } } $invokeParams.Body = $body | ConvertTo-Json -Depth 100 if ($PSCmdlet.ShouldProcess("External vault secret remote value: $Id", "$($invokeParams.Method) $uri (request body not shown: it carries sensitive values)")) { Write-Verbose "Performing the operation $($invokeParams.Method) $uri (request body not shown: it carries sensitive values)" try { $apiResponse = Invoke-TssApi @invokeParams $restResponse = . $ProcessResponse $apiResponse } catch { Write-Warning 'Issue with Set-TssExternalVaultSecretRemoteValue request' $err = $_ . $ErrorHandling $err } if ($restResponse) { [Thycotic.PowerShell.ExternalVaults.SecretRemoteValue](. $FilterTssResponse $restResponse ([Thycotic.PowerShell.ExternalVaults.SecretRemoteValue])) } } } else { Write-Warning 'No valid session found' } } } |