【问题标题】:Deploy SAS token to Azure Key Vault Through Azure DevOps通过 Azure DevOps 将 SAS 令牌部署到 Azure Key Vault
【发布时间】:2020-01-06 07:50:54
【问题描述】:

上下文:我有一个发布管道,它执行以下操作: - 从自动化帐户中删除我的运行手册-reason - 将我的运行手册从我的存储库复制到我的 Blob 存储中 - 运行我的 ARM 模板,我在其中获取 blob 存储运行手册并将其部署到我的自动化帐户。

对于第三步,我需要我的 ARM 模板来检索 blob 存储。在 Azure devops 中,这很容易通过使用复制步骤的输出变量来完成,然后在我的部署步骤中使用它并覆盖参数。但是我使用的 ARM 模板是一个链接模板(主模板),部署 runbook 的 ARM 没有参数,而是一个参数文件,所以我不能只覆盖那里的参数。

解决方案是将 SAS 令牌放入 Keyvault 机密中,以便需要 SAS 令牌的 ARM 模板从 KeyVault 中获取此令牌。

为此,我将我的 Runbook 复制到了我的 blob 存储帐户,并在 Azure devops 中导出了 sas 令牌。在下一步中,我想将 keyvault 密码设置为此变量。这样每次运行都会有一个新的 SAS 令牌供 ARM 模板检索。我现在面临的问题是这样的。

我使用以下代码行

$Secret = ConvertTo-SecureString -String $(StorageToken) -AsPlainText -Force

Set-AzureKeyVaultSecret -VaultName 'keyvault' -Name 'supersecret-sas-token' -SecretValue $(StorageToken)

但 sas 令牌的值类似于 ?sv=2015-05-14&551qf54q5f4&qz5f4qz5f4&qz5f 就像您可以看到字符串中有一些与号(&)一样。 Powershell 让我为此感到难过。

我收到以下错误消息

the ampersand (&) character is not allowed. The & operator is reserved for future use; wrap an ampersand in double quotation marks ("&") to pass it as part of a string.

我尝试将字符串中的 amersand 值替换为带引号的值“&”。 ---->没用

我尝试在字符串前后添加“''”---->不起作用

有谁知道将 sas 令牌部署到 KeyVault 的解决方法。

【问题讨论】:

  • 您是否考虑过尝试使用 DevOps 服务连接来授权 Blob 存储?我认为它有效。那么这些都不是必需的。恕我直言,KeyVault 是缺乏服务主体支持的一种解决方法,它在 Azure 中才刚刚成熟。
  • 我有,但我认为我的问题解释得不够好。因为我使用带有参数文件的链接模板,所以我不能只覆盖模板中的 sas 令牌。

标签: azure powershell azure-blob-storage azure-keyvault


【解决方案1】:

一定要把字符串放在引号$Secret = ConvertTo-SecureString -String "$(StorageToken)" -AsPlainText -Force

如果仍然不起作用,请尝试转义 & 符号 ?sv=2015-05-14`&551qf54q5f4`&qz5f4qz5f4`&qz5f

【讨论】:

    【解决方案2】:

    根据我的测试,您可以使用以下脚本将 SAS 令牌存储到 Azure Key Vault

    Connect-AzAccount
    $context = New-AzStorageContext -StorageAccountName $StorageAccountName -StorageAccountKey $StorageAccountKey
    $sas = New-AzStorageAccountSASToken -Service Blob,File,Table,Queue -ResourceType Service,Container,Object -Permission "racwdlup" -Context $context
    $vaule =ConvertTo-SecureString -String $sas -AsPlainText -Force
    
    $secret =Set-AzKeyVaultSecret -VaultName testkey08 -Name test02 -SecretValue $vaule
    
    $secret.SecretValueText
    

    【讨论】:

      猜你喜欢
      • 2021-11-06
      • 2020-05-16
      • 1970-01-01
      • 2021-07-23
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 2020-01-29
      • 2021-10-09
      相关资源
      最近更新 更多