我对 Vault 和 PowerShell 非常陌生,我需要连接到 Vault 并使用 PowerShell 获取密钥。
这是我的代码
$Vault_Address = 'xxx'
$VAULT_ROOT = $Vault_Address + '/v1'
$VAULT_LOGIN_APPROLE = $VAULT_ROOT+'/auth/approle/login'
$VAULT_KV_PATH = $VAULT_ROOT+'/xx/xx/xx'
$RoleID = 'default'
$SecretID = 'default'
#Set env variable for vault address
$ENV:VAULT_ADDR = $Vault_Address
function Get-Vault
{
[CmdletBinding()]
[Alias()]
[OutputType([PSCustomObject])]
Param
(
# Server Address
[Parameter(Position=0)]
[String]
$Address = $env:VAULT_ADDR,
# Client token
[Parameter(Position=1)]
[String]
$Token = $env:VAULT_TOKEN
)
[PSCustomObject]@{'uri'= $Address + $prefix
'auth_header' = @{'X-Vault-Token'=$Token}
} |
Write-Output
}
让我向您展示什么对我有用,希望它能帮助您或其他人。
假设在您连接到
https://vault.domain/ui/vault/secrets?namespace=myVaultNamespace
的 UI 上并且您有一个秘密引擎 kvSecretEngine
,其中包含路径为 PROD
的键值秘密:
$namespace = "myVaultNamespace"
$mountpoint = "kvSecretEngine"
$vaultpath = "PROD"
$headers = @{
'Accept' = 'application/json'
'X-Vault-Namespace' = $namespace
'X-Vault-Token' = $vault_token
}
$uri = "https://vault.domain/v1/$mountpoint/$vaultpath"
$response = Invoke-RestMethod -Method Get -Headers $headers -Uri $uri
$secret = $response.data
$secret
将包含一个包含所有秘密键值的 JSON。
希望有帮助。
不过,老话题了:出于某种原因,在某些情况下,您必须使用下面的语句让您的客户端使用 TLS1.2。如果不这样做,您可能会遇到 TLS 异常。只需将其放在您执行操作的行上方即可
Invoke-RestMethod
(或您正在使用的任何 cmdlet):
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12