当前位置: 首页 > 知识库问答 >
问题:

Azure Blueprint-从Key Vault secret创建Web证书提供拒绝访问错误

慕烨烁
2023-03-14

我们得到了一个很大的azure blueprint模板,它为我们创建了很多工件。其中一个工件是Azure密钥库。密钥库被创建,所需的秘密就在里面。

他试图创建的其他工件之一是Microsoft.Web/Certificates。我们尝试用下面的json创建它

 {
    "name": "create-certificate",
    "kind": "template",
    "properties": {
        "template": {
            "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
            "contentVersion": "1.0.0.0",
            "parameters": {
                "name": {
                    "type": "string"
                },
                "location": {
                    "type": "string"
                },
                "vaultName": {
                    "type": "string"
                },
                "serverFarmId": {
                    "type": "string"
                }
            },
            "resources": [
                {
                    "type": "Microsoft.Web/certificates",
                    "name": "[parameters('name')]",
                    "apiVersion": "2016-03-01",
                    "location": "[parameters('location')]",
                    "properties": {
                        "keyVaultId": "[resourceId('Microsoft.KeyVault/vaults', parameters('vaultName'))]",
                        "keyVaultSecretName": "Origin-Certificate",
                        "serverFarmId": "[parameters('serverFarmId')]"
                    }
                }
            ]
        },
        "resourceGroup": "TD-RG",
        "parameters": {
            "name": {
                "value": "[concat(parameters('environmentSuffix'), '-Orgin')]"
            },
            "location": {
                "value": "[parameters('location')]"
            },
            "vaultName": {
                "value":"[concat(parameters('environmentSuffix'), '-Vault')]"
            },
            "ServerFarmId": {
                "value": "[artifacts('create-service-plan').outputs.ServerFarmId]"
            }
        },
        "dependsOn": ["create-service-plan", "create-key-vault"]
    }   
}

因此,它很好地等待我们首先创建一个服务计划和密钥库,然后尝试从密钥库秘密中读取orgin证书。我们得到的错误是:

服务无权访问“{密钥存储库路径}”密钥存储库。请确保已授予服务执行请求操作所需的权限。

Set-AzureRmKeyVaultAccessPolicy -VaultName KEYVAULTNAME -PermissionsToSecrets get `
   -ServicePrincipalName abfa0a7c-a6b6-4736-8310-5855508787cd

脚本的来源:ARM模板中的KeyVault引用问题

但这样做的问题是,权限被创建密钥库的工件定义覆盖,因此无法通过Power Shell设置。但我不能在蓝图中完成这一点。对于其他用户,在我们创建密钥库时,我已经设置了权限,这是有效的。但是像下面这样加上这个是行不通的。

{
   "objectId": "abfa0a7c-a6b6-4736-8310-5855508787cd",
   "tenantId": "[parameters('tenantId')]",
   "permissions": {
     "secrets": [
       "get"
     ]
   }
 }

因此,现在仍然是一个谜语,如何创建一个密钥库,并在下一个工件中使用一个秘密。

共有1个答案

阙沛
2023-03-14

我注意到您在powershellSet-AzurermKeyVaultAccessPolicy和ARM模板中使用了相同的guidABFA0A7C-A6B6-4736-8310-5855508787CD,这就是原因。

Set-AzurermKeyVaultAccessPolicy中,我们需要传递-ServicePrincipalName应用程序ID(即客户机ID),此处说明。但是在ARM模板中,我们需要传递服务主体的对象ID(而不是应用程序注册),它不同于应用程序ID

要获取服务主体的对象ID,您可以使用powershellget-AzurermadServicePrincipal,在我的屏幕截图中,我使用新的az命令,在您的示例中,直接使用get-AzurermadServicePrincipalID就是您需要的对象ID

注意:确保您登录到powershell的帐户有权获取AAD租户中的服务主体。

Get-AzureRmADServicePrincipal -ApplicationId abfa0a7c-a6b6-4736-8310-5855508787cd

然后,在ARM模板中,使用对象ID而不是应用程序ID,它会很好地工作。

{
   "objectId": "<Object ID>",
   "tenantId": "[parameters('tenantId')]",
   "permissions": {
     "secrets": [
       "get"
     ]
   }
 }
 类似资料:
  • 我试图通过实现在应用程序中使用Spring security实现自定义身份验证。身份验证是成功的,并且用户也具有指定的角色,但我仍然总是得到访问被拒绝的页面。下面是我的代码。我是Spring保安的新手。请帮帮忙。提前致谢 原木

  • 我正在尝试通过HTTPS连接一个Java Web API;但是,会引发异常: 我遵循了从keytool和SSL证书在线教程中学到的以下步骤: > 我将HTTPS URL复制到浏览器中,下载SSL证书并使用Internet Explorer将其安装到浏览器中。 将证书导出到我的计算机上的路径,证书被另存为 使用了KeyTool的导入选项。下面的命令执行时没有任何错误。 在命令提示符下提示输入密码,然

  • 将证书导出到我的计算机上的路径,证书保存为 使用了keytool的导入选项。下面的命令执行没有任何错误。 在命令提示符处提示我输入密码,然后我输入密码进行身份验证。 然而,在该消息之后,显示了另一个异常: 最后,当我检查密钥库时,没有添加SSL证书,我的应用程序给出了与我之前尝试连接时相同的异常:

  • 问题内容: 我正在尝试通过HTTPS连接Java Web API。但是,将引发异常: 我遵循了从在线keytool和SSL证书教程中学到的这些步骤: 我将HTTPS URL复制到浏览器中,下载了SSL证书,并使用Internet Explorer将其安装在浏览器中。 将证书导出到计算机上的路径,证书另存为 使用了keytool的导入选项。以下命令执行无任何错误。 在命令提示符下提示我输入密码,然后

  • 问题内容: 在某种程度上,当我尝试通过命令行访问MySQL时,已经设法解决了该错误: 我尝试使用此HowTo重置密码,但没有任何运气。 我已经卸载了mysql completley并重新安装了,但是仍然需要输入密码。我不知道为什么会这样! 有人可以帮我获得默认安装的MySQL吗? 环境 Fedora Core 10,完全根访问权限,安装了Apache和PHP 感谢您的任何帮助!! 编辑 对于所有想

  • 我是AWS Lambda的新手。我正在尝试从https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html.当用户将jpg上传到名为greetingsproject的S3 bucket时,会触发lambda函数。 错误:9a62ff86-3e24-491d-852e-DED2C2CF5D94 信息:获取对象时出错=拒绝访问:拒绝访