自动重新生成反映在 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中使用系统分配的托管身份读取Azure Key Vault秘密值
Azure Key Vault 使用Azure Portal创建和查看Azure Key Vault