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

Creating SAS token with ARM template: error 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]"
                }
            }

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

我们在定义变量的时候,不需要指定变量的数据类型。详情请参考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]"
                }
            }

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

我把“accountSasProperties”从参数改成了变量,在这个过程中,我忘记去掉“defaultValue”,把值直接放在“accountSasProperties”下面 在我的例子中变量的正确语法:

           "accountSasProperties": {
                 "signedServices": "fb",
                 "signedPermission": "rwdlacup",
                 "signedExpiry": "2021-11-30T00:00:00Z",
                 "signedResourceTypes": "co"
            }

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