自动重新生成反映在 Azure Key Vault Secret 中的密钥

Posted

技术标签:

【中文标题】自动重新生成反映在 Azure Key Vault Secret 中的密钥【英文标题】:Auto re-generate of Keys reflected in Azure Key Vault Secret 【发布时间】:2019-12-26 02:56:32 【问题描述】:

我设法在“key1”和“key2”之间创建了自动重新生成过程,间隔为 1 天。

当密钥自动重新生成时,我将 Key1 作为 Key Vault 中的连接字符串作为机密,如何在 Key Vault 机密中反映该更改? Key Vault 在数据工厂管道中使用。

$servicePrincipal = Get-AzADServicePrincipal -ServicePrincipalName cfa8b339-82a2-471a-a3c9-0fc0be7a4093
New-AzRoleAssignment -ObjectId $servicePrincipal.Id -RoleDefinitionName 'Storage Account Key Operator Service Role' -Scope $storage.Id
$userPrincipalId = $(Get-AzADUser -SearchString 'Bob Johnson').Id
Set-AzKeyVaultAccessPolicy -VaultName 'AzureBlobVault' -ObjectId $userPrincipalId -PermissionsToStorage get, list, delete, set, update, regeneratekey, getsas, listsas, deletesas, setsas, recover, backup, restore, purge
$regenerationPeriod = [System.Timespan]::FromDays(1)
Add-AzKeyVaultManagedStorageAccount -VaultName 'AzureBlobVault' -StorageAccountName 'john' -AccountResourceId '/subscriptions/XXXXXXX-XXXX-XXXXXXXXXXXXXXXX/resourceGroups/myResourceGroup/providers/Microsoft.Storage/storageAccounts/John' -ActiveKeyName 'key1' -RegenerationPeriod $regenerationPeriod'


The Result:

Id                  : https://azurekeyvaultblob.vault.azure.net:443/storage/john
Vault Name          : AzureBlobVault
AccountName         : john
Account Resource Id : /subscriptions/XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX/resourceGroups/myResourceGroup/providers/Microsoft.Storage/storageAccounts/john
Active Key Name     : key1
Auto Regenerate Key : True
Regeneration Period : 1.00:00:00
Enabled             : True

【问题讨论】:

据我了解,您是希望 Azure Key Vault 管理连接字符串吗? @Jim Xu。我在管道中的 Key Vault 中使用 Blob 存储连接字符串,并且我还希望 Key Vault 中的连接字符串在它重新生成新密钥时发生更改。 您对我的回答还有其他顾虑吗? 【参考方案1】:

根据我的研究,目前我们只能要求 Key Vault 生成共享访问签名令牌。如果你想这样做,你可以使用下面的脚本

$sctx = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey Key1
$start = [System.DateTime]::Now.AddDays(-1)
$end = [System.DateTime]::Now.AddDays(1)
$at = New-AzStorageAccountSasToken -Service blob,file,Table,Queue -ResourceType Service,Container,Object -Permission "racwdlup" -Protocol HttpsOnly -StartTime $start -ExpiryTime $end -Context $sctx
Set-AzKeyVaultManagedStorageSasDefinition -AccountName $storageAccount.StorageAccountName  -VaultName $keyVaultName -Name accountsas -TemplateUri $at -SasType 'account' -ValidityPeriod ([System.Timespan]::FromDays(1))

更多详情请参考document和article

另外,如果您只想使用连接字符串,我认为您需要编写代码或脚本来管理它。比如我使用powershell脚本:

$name = "your account"
$password = "your passowrd"
$secpasswd = ConvertTo-SecureString $password -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential ($name, $secpasswd)
Connect-AzAccount -Credential $mycreds

$accountName ="your storage account name"
$keyvaultNmae="your key vault name"
$secretNmae="your secret name"
$accoutGroupName="your storage account group name"

$key=(Get-AzStorageAccountKey -ResourceGroupName $accoutGroupName -Name $accountName)[0].Value 
$string= 'DefaultEndpointsProtocol=https;AccountName=' + $accountName + ';AccountKey=' + $Key + ';EndpointSuffix=core.windows.net' 

$secretVaule= $Secret = ConvertTo-SecureString -String $string -AsPlainText -Force
Set-AzKeyVaultSecret -VaultName $keyvaultNmae -Name $secretNmae -SecretValue  $secretVaule

$vaule= (Get-AzKeyVaultSecret -VaultName $keyvaultNmae -Name $secretNmae).SecretValueText

Write-Output $vaule

然后我将 PowerShell 脚本托管在 Azure Automation runbook 上并创建一个 schedule 来运行它

【讨论】:

以上是关于自动重新生成反映在 Azure Key Vault Secret 中的密钥的主要内容,如果未能解决你的问题,请参考以下文章

使用 Azure Key Vault 轮换机密

Azure Key Vault门户未显示秘密

无法在Azure中使用系统分配的托管身份读取Azure Key Vault秘密值

Azure Key Vault 使用Azure Portal创建和查看Azure Key Vault

Azure RM 模板。使用 Key Vault 密码部署副本 VM

Angular - Azure Key Vault 管理 Vault 访问机密