Пользовательская роль для чтения всего, что находится под подпиской azure, например, в группах ресурсов - PullRequest
0 голосов
/ 06 августа 2020

У меня есть тестовый код, который может перечислять группы ресурсов по подписке, а внутри подписки даже перечислять ресурсы, такие как виртуальная сеть и т. Д. c. Я экспериментирую с настраиваемыми шаблонами, и там я попытался создать настраиваемую роль для чтения того же материала. Мои действия в настраиваемой роли могут быть неправильными, потому что я могу указать группу ресурсов, но не сети под ней. Может кто подскажет, что не так. Сначала я попробовал использовать звездочку, но потом добавил еще одну строчку, и это тоже не помогло.

Вот шаблон. Роль довольно проста, но я не понимаю, почему я не вижу сеть внутри RG с разрешениями ниже

  "$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "actions": {
      "type": "array",
      "defaultValue": [
         "Microsoft.Resources/subscriptions/*/read",
         "Microsoft.Resources/subscriptions/resourceGroups/read"
      ],
      "metadata": {
        "description": "Array of actions for the roleDefinition"
      }
    },
    "notActions": {
      "type": "array",
      "defaultValue": [ ],
      "metadata": {
        "description": "Array of notActions for the roleDefinition"
      }
    },
    "roleName": {
      "type": "string",
      "defaultValue": "allcustomreadscheck1234",
      "metadata": {
        "description": "Role created via azure cli..."
      }
    },
    "roleDescription": {
      "type": "string",
      "defaultValue": "Subscription Level Deployment of a Role Definition",
      "metadata": {
        "description": "Detailed description of the role definition"
      }
    }
  },
  "variables":{
    "roleDefName": "[guid(subscription().id, string(parameters('actions')), string(parameters('notActions')))]"
  },
  "resources": [
    {
      "type": "Microsoft.Authorization/roleDefinitions",
      "apiVersion": "2018-07-01",
      "name": "[variables('roleDefName')]",
      "properties": {
        "roleName": "[parameters('roleName')]",
        "description": "[parameters('roleDescription')]",
        "type": "customRole",
        "isCustom": true,
        "permissions": [
          {
            "actions": "[parameters('actions')]",
            "notActions": "[parameters('notActions')]"
          }
        ],
        "assignableScopes": [
          "[subscription().id]"
        ]
      }
    }
  ]
}

1 Ответ

0 голосов
/ 06 августа 2020

Я думаю, причина того, что вы не можете читать виртуальные сети, заключается в том, что Microsoft.Network/virtualNetworks/read не разрешен для этой роли. Вы можете увидеть, как определены встроенные роли на этой странице: https://docs.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#reader.

Вы можете увидеть, например, как определяется роль Читателя:

{
  "assignableScopes": [
    "/"
  ],
  "description": "Lets you view everything, but not make any changes.",
  "id": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7",
  "name": "acdd72a7-3385-48ef-bd42-f606fba81ae7",
  "permissions": [
    {
      "actions": [
        "*/read"
      ],
      "notActions": [],
      "dataActions": [],
      "notDataActions": []
    }
  ],
  "roleName": "Reader",
  "roleType": "BuiltInRole",
  "type": "Microsoft.Authorization/roleDefinitions"
}

Как видите, он определяет */read как свои действия, позволяя ему выполнять действие, о котором я упоминал в начале. Таким образом, вы можете использовать это, чтобы разрешить чтение чего угодно, иначе вам может потребоваться либо явно указать, какие ресурсы они могут читать с помощью Microsoft.Network/*/read / Microsoft.Network/virtualNetworks/read, либо вы можете исключить те, которые они не могут прочитать через notActions.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...