如何检查密钥库中是否存在给定名称的密钥?

Yod*_*oda 5 azure azure-cli azure-keyvault

我有一个名为 keyvault 的密钥库myKeyVault,里面可能有一个名为 的密钥myKey。我正在阅读 Azure CLI 的文档:https://learn.microsoft.com/en-us/cli/azure/keyvault/key ?view=azure-cli-latest#az_keyvault_key_list 但我不知道如何检查如果给定名称的键确实存在。

如果我同意的话:

az keyvault key show --vault-name myKeyVault --name keythatdoesntexist 我确实收到 ResourceNotFoundError: (KeyNotFound) 错误,但我需要的是如果密钥存在则获取 true 或 false。

小智 5

虽然上述方法可能有效,但它是通过检查null失败命令返回的值来完成的az keyvault show <none existent secret>,我相信以下是处理这种情况的更好方法,特别是在自动化基础设施发布管道中

# get Command Line Args
keyVaultName=$1
secretName=$2

# Check if secret exists
secret_exists=$(az keyvault secret list --vault-name $keyVaultName --query "contains([].id, 'https://$keyVaultName.vault.azure.net/secrets/$secretName')")


if [ $secret_exists == true ]; then
    echo "Secret '$secretName' exists! fetching..."
    secret_val=$(az keyvault secret show --name $secretName --vault-name $keyVaultName --query "value")
    echo "##vso[task.setvariable variable=ssh_value]$secret_val"
else
    echo "Secret '$secretName' do not exist! creating..."
    ssh-keygen  -f ~/.ssh/id_rsa_infra -q -P ""
    ssh_value=$(<~/.ssh/id_rsa_infra.pub)
    echo "##vso[task.setvariable variable=ssh_value]$ssh_value"
    az keyvault secret set --vault-name $keyVaultName --name $secretName -f ~/.ssh/id_rsa_infra.pub >/dev/null
fi
Run Code Online (Sandbox Code Playgroud)


kri*_*shg 1

没有直接的“如果存在”API。但一种简单的方法是仅捕获az keyvault key show --vault-name myKeyVault --name keythatdoesntexist变量中的输出并检查null. 下面的例子是在 powershell 中。

$key = az keyvault key show --vault-name myKeyVault --name keythatdoesntexist
if ($key -ne $null) {
  write-host 'Exists'
}
else {
  write-host 'Does not exist'
}
Run Code Online (Sandbox Code Playgroud)