使用 ARM 模板创建 SAS 令牌:错误 InvalidValuesForRequestParameters

问题描述

我正在尝试从 ARM 模板生成 SAS 令牌,以允许我的模板随后访问 blob 存储(包括链接模板)中的资源。 SAS 令牌应该存储在我也在此模板中创建的保险库中。存储帐户独立存在(在另一个 RG 中)

但是,我收到以下错误

    {
          "code": "InvalidValuesForRequestParameters","message": "Values for request parameters are invalid: signedPermission,signedExpiry,signedResourceTypes,signedServices."
     }

我的模板有这个变量和行来生成 SAS 令牌:

        "variables": {
            "vaultName": "[concat('hpc',uniqueString(resourceGroup().id,parameters('keyvaultName')))]","accountSasProperties": {
                "type": "object","defaultValue": {
                    "signedServices": "fb","signedPermission": "rwdlacup","signedExpiry": "2021-11-30T00:00:00Z","signedResourceTypes": "co"
                }
            }
        },(...)
          {
                "apiVersion": "2018-02-14","type": "Microsoft.keyvault/vaults/secrets","dependsOn": [
                    "[concat('Microsoft.keyvault/vaults/',variables('vaultName'))]"
                ],"name": "[concat(variables('vaultName'),'/','StorageSaSToken')]","properties": {
                    "value": "[listAccountSas(resourceId(parameters('StorageAccountRg'),'Microsoft.Storage/storageAccounts',parameters('storageAccountName')),'2018-07-01',variables('accountSasProperties')).accountSasToken]"
                }
            }

我尝试了几种参数的变化,但找不到问题所在,而且错误并没有真正的帮助 我尝试过(除其他外):

  • 删除参数前面的“已签名”(服务而不是已签名的服务)
  • 服务、资源类型和权限的各种组合
  • 不同的时间(更短、更长...)

解决方法

当我们定义变量时,我们不需要为变量指定数据类型。详情请参阅hereenter image description here

因此请将您的模板更新为以下模板

"variables": {
            "vaultName": "[concat('hpc',uniqueString(resourceGroup().id,parameters('keyVaultName')))]","accountSasProperties": {
                    "signedServices": "fb","signedPermission": "rwdlacup","signedExpiry": "2021-11-30T00:00:00Z","signedResourceTypes": "co"
            }
        },(...)
          {
                "apiVersion": "2018-02-14","type": "Microsoft.KeyVault/vaults/secrets","dependsOn": [
                    "[concat('Microsoft.KeyVault/vaults/',variables('vaultName'))]"
                ],"name": "[concat(variables('vaultName'),'/','sas')]","properties": {
                    "value": "[listAccountSas(resourceId(parameters('StorageAccountRg'),'Microsoft.Storage/storageAccounts',parameters('storageAccountName')),'2018-07-01',variables('accountSasProperties')).accountSasToken]"
                }
            }

enter image description here

,

在@jim-xu 回答的帮助下发现了问题,这是最糟糕的解决方案:愚蠢的错误

我把“accountSasProperties”从参数改成了变量,过程中忘记去掉“defaultValue”,直接把值放到“accountSasProperties”下面 就我而言,变量的正确语法:

           "accountSasProperties": {
                 "signedServices": "fb","signedResourceTypes": "co"
            }

我顺便也删除了对象类型,正如@jim-xu 在他的回答中所指出的