gpt4 book ai didi

azure - 如何在 Azure Functions/应用程序中的连接字符串的一部分中引用 key 保管库 secret

转载 作者:行者123 更新时间:2023-12-03 01:35:41 25 4
gpt4 key购买 nike

我正在 Azure 函数的应用设置中设置服务总线的连接字符串。目前,我将整个连接字符串存储在 Key Vault 中,并在应用程序设置中引用 Key Vault secret 。效果很好。但我试图做的但没有成功的事情是仅存储服务总线 key ,而不是将整个连接字符串存储在 key 保管库中。

我尝试将连接字符串连接到门户中的 KeyVault 引用应用程序设置,如下所示

Endpoint=sb://xxxxx.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="217249405344456042424452526a44581c616c4842534e524e47550f6a44587740544d55" rel="noreferrer noopener nofollow">[email protected]</a>(SecretUri=xxxx.vault.azure.net/secrets/yyyy/zzzzz)

但这不起作用。

我需要进行这种分离的原因是,我想轮换 key 保管库中的 key ,但如果整个连接字符串都存储在 key 保管库中,我就无法执行此操作。

更新1:

将连接字符串拆分为多个应用程序设置键可以解决此问题,但这会限制我使用服务总线触发的 azure 函数的能力,这些函数需要运行中应用程序设置中的完整连接字符串键的名称方法签名如下

public static void Run(
[ServiceBusTrigger("myqueue", AccessRights.Manage, Connection = "ServiceBusConnection")]
string myQueueItem
ILogger log)

更新2:

到目前为止,我所做的工作是在我的自动化 Powershell 中使用正则表达式来仅替换连接字符串的 SharedAccessKey 部分,我希望我能采取更简洁的方法。这样,我只对连接字符串使用一个应用程序设置。它有效,但我对此不太满意。

这是我在自动化 Runbook 中使用的代码:

$azureAutomationConnectionName = "AzureRunAsConnection"
$servicePrincipalConnection = Get-AutomationConnection -Name $azureAutomationConnectionName

Add-AzureRmAccount -ServicePrincipal -TenantId $servicePrincipalConnection.TenantId -ApplicationId $servicePrincipalConnection.ApplicationId -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint

$resourceGroupName = 'XXXX'
$serviceBusName = 'XXXX'
$serviceBusAccessPolicyName = 'RootManageSharedAccessKey'
$keyVaultName = 'XXXX'
$keyVaultSecretKey = 'XXXX'

$currentSecret = (Get-AzureKeyVaultSecret -VaultName $keyVaultName -Name $keyVaultSecretKey).SecretValueText

# Regenerate the Service Bus Primary Key
New-AzureRmServiceBusKey -ResourceGroupName $resourceGroupName -Namespace $serviceBusName -Name $serviceBusAccessPolicyName -RegenerateKey PrimaryKey

# Get the newly regenerated Primary Key
$newPrimaryKey = (Get-AzureRmServiceBusKey -ResourceGroupName $resourceGroupName -Namespace $serviceBusName -Name $serviceBusAccessPolicyName).PrimaryKey

# The secret is storing the entire connection string. We want to replace the SharedAccessKey Only
$newSecretStr = $currentSecret -replace 'SharedAccessKey=[^;]*', ([string]::Format('SharedAccessKey={0}',$newPrimaryKey))

# Convert the Primary Key to Secure String
$newSecureSecretStr = ConvertTo-SecureString $newSecretStr -AsPlainText -Force

# Update the Secret Value in the Key Vault
Set-AzureKeyVaultSecret -VaultName $keyVaultName -Name $keyVaultSecretKey -SecretValue $newSecureSecretStr

最佳答案

我认为你不能这样做,只需使用语法 @Microsoft.KeyVault(...) 的应用程序设置即可将被识别为Key Vault Reference。否则,它只会被识别为普通字符串,而不会出现屏幕截图中的后半部分。

就您而言,解决方法是将服务总线连接字符串存储为两个独立的应用程序设置,当您使用它时,通过代码将它们拼接在一起。

例如,一个是 Endpoint=sb://xxxxx.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=,另一个是 @Microsoft.KeyVault(SecretUri= xxxx.vault.azure.net/secrets/yyyy/zzzzz)。您也可以将第一个作为 secret 存储在 keystore 中,这取决于您。

enter image description here

关于azure - 如何在 Azure Functions/应用程序中的连接字符串的一部分中引用 key 保管库 secret ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58280666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com