代码之家  ›  专栏  ›  技术社区  ›  Thomas

Azure密钥保管库-拒绝访问

  •  0
  • Thomas  · 技术社区  · 7 年前

    我正在创建Azure Key Vault。我正在使用下面的ARM JSON模板。我在Azure AD中创建了一个应用程序,我正在尝试授予该应用程序所有权限,以便我可以使用此应用程序凭据从密钥库客户端连接到密钥库。

    {
        "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
      "parameters": {
        "vaults_qnvaultdev_name": {      
          "type": "string"
        },
        "vaults_location": {     
          "type": "string"
        },
        "vaults_skufamily": {      
          "type": "string"
        },
        "vaults_skuname": {
          "type": "string"
        },
        "vaults_tenantid": {
          "type": "string"
        },
        "vaults_objectid": {
          "type": "string"
        }
      },
        "variables": {},
        "resources": [
          {
            "comments": "Generalized from resource: '/subscriptions/subscription().subscriptionId/resourceGroups/resourceGroup().name/providers/Microsoft.KeyVault/vaults/[parameters('vaults_qnvaultdev_name')]'.",
            "type": "Microsoft.KeyVault/vaults",
            "name": "[parameters('vaults_qnvaultdev_name')]",
            "apiVersion": "2015-06-01",
            "location": "[parameters('vaults_location')]",
            "tags": {},
            "scale": null,
            "properties": {
              "sku": {
                "family": "[parameters('vaults_skufamily')]",
                "name": "[parameters('vaults_skuname')]"
              },
              "tenantId": "[parameters('vaults_tenantid')]",
              "accessPolicies": [
                {
                  "tenantId": "[parameters('vaults_tenantid')]",
                  "objectId": "[parameters('vaults_objectid')]",
                  "permissions": {
                    "keys": [
                      "All",
                      "Get",
                      "List",
                      "Update",
                      "Create",
                      "Import",
                      "Delete",
                      "Recover",
                      "Backup",
                      "Restore"
                    ],
                    "secrets": [
                      "All",
                      "Get",
                      "List",
                      "Set",
                      "Delete",
                      "Recover",
                      "Backup",
                      "Restore"
                    ]
                  }
                }
              ],
              "enabledForDeployment": true
            },
            "dependsOn": []
          }
        ]
    }
    

    模板执行良好,并且正在创建密钥库。我还可以在vault的访问策略中看到,主体被添加了所有权限。但是,在创建vault后,当我使用主体的客户端id和机密从客户端应用程序进行连接时,会出现“拒绝访问”错误。

    我注意到,如果我通过门户并通过密钥库的访问策略手动添加应用程序,则Vault客户端能够成功进行身份验证。我错过什么了吗?

    我手动将应用程序权限授予vault的访问策略,并检查了资源门户。然后,我看到在资源门户中生成的该应用程序的“对象Id”与我在Azure AD中看到的不同-在该应用程序的门户中。有什么不同的想法吗?

    2 回复  |  直到 7 年前
        1
  •  2
  •   Shui shengbao    7 年前

    请参考此 link

    objectId string是用户、服务主体或 vault的Azure Active Directory租户中的安全组。这个

    您可以在上找到对象id Enterprise applications - All applications App registrations

    enter image description here

    Get-AzureADServicePrincipal
    

    根本原因是,当您在Azure门户中注册Azure AD应用程序时,会在Azure AD租户中创建两个对象:应用程序对象和服务主体对象。

    应用程序对象

    Azure AD应用程序由其唯一的应用程序定义 对象,该对象位于应用程序所在的Azure AD租户中 已注册,称为应用程序的“家庭”租户。Azure广告 对象的属性。

    服务主体对象

    服务主体对象定义 在运行时表示应用程序的安全主体。Azure 主体对象的属性。

    link .

        2
  •  0
  •   DreadedFrost    4 年前

    请参阅上的答案 how to add Access Policies to MSI via ARM

    这一过程比应用程序注册简单一些,因为应用程序本身将具有注册的身份。你可以在上阅读更多 Managed Service Identities