Wdrożenia dzierżawy z szablonami usługi ARM

W trakcie rozwoju organizacji może być konieczne zdefiniowanie i przypisanie zasad lub kontroli dostępu na podstawie ról (RBAC) platformy Azure w dzierżawie usługi Azure AD. Za pomocą szablonów na poziomie dzierżawy można deklaratywnie stosować zasady i przypisywać role na poziomie globalnym.

Obsługiwane zasoby

Nie wszystkie typy zasobów można wdrożyć na poziomie dzierżawy. W tej sekcji wymieniono obsługiwane typy zasobów.

W przypadku kontroli dostępu opartej na rolach (RBAC) na platformie Azure użyj:

W przypadku zagnieżdżonych szablonów wdrażanych w grupach zarządzania, subskrypcjach lub grupach zasobów użyj:

Do tworzenia grup zarządzania użyj:

Aby utworzyć subskrypcje, użyj:

Aby zarządzać kosztami, użyj:

Aby skonfigurować portal, użyj:

Wbudowane definicje zasad to zasoby na poziomie dzierżawy, ale nie można wdrażać niestandardowych definicji zasad w dzierżawie. Aby uzyskać przykład przypisywania wbudowanej definicji zasad do zasobu, zobacz przykład tenantResourceId.

Schemat

Schemat wdrożeń dzierżawcy różni się od schematu wdrożeń grup zasobów.

W przypadku szablonów użyj:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
  ...
}

Schemat pliku parametrów jest taki sam dla wszystkich zakresów wdrożenia. W przypadku plików parametrów użyj:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  ...
}

Wymagany dostęp

Podmiot zabezpieczeń wdrażający szablon musi mieć uprawnienia do tworzenia zasobów w zakresie dzierżawy. Podmiot zabezpieczeń musi mieć uprawnienia do wykonywania akcji wdrażania ( ) i do Microsoft.Resources/deployments/* tworzenia zasobów zdefiniowanych w szablonie. Aby na przykład utworzyć grupę zarządzania, podmiot zabezpieczeń musi mieć uprawnienie Współautor w zakresie dzierżawy. Aby utworzyć przypisania ról, podmiot zabezpieczeń musi mieć uprawnienia właściciela.

Administrator globalny aplikacji Azure Active Directory automatycznie nie ma uprawnień do przypisywania ról. Aby włączyć wdrożenia szablonów w zakresie dzierżawy, administrator globalny musi wykonać następujące czynności:

  1. Podnieś uprawnienia dostępu do konta, aby administrator globalny mógł przypisywać role. Aby uzyskać więcej informacji, zobacz Podnoszenie poziomu dostępu w celu zarządzania wszystkimi subskrypcjami platformy Azure i grupami zarządzania.

  2. Przypisz właściciela lub współautora do podmiotu zabezpieczeń, który musi wdrożyć szablony.

    New-AzRoleAssignment -SignInName "[userId]" -Scope "/" -RoleDefinitionName "Owner"
    
    az role assignment create --assignee "[userId]" --scope "/" --role "Owner"
    

Podmiot zabezpieczeń ma teraz uprawnienia wymagane do wdrożenia szablonu.

Polecenia wdrażania

Polecenia dla wdrożeń dzierżawy różnią się od poleceń dla wdrożeń grup zasobów.

W przypadku interfejsu wiersza polecenia platformy Azure użyj polecenia az deployment tenant create:

az deployment tenant create \
  --name demoTenantDeployment \
  --location WestUS \
  --template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/tenant-deployments/new-mg/azuredeploy.json"

Aby uzyskać bardziej szczegółowe informacje na temat poleceń wdrażania i opcji wdrażania szablonów usługi ARM, zobacz:

Lokalizacja i nazwa wdrożenia

W przypadku wdrożeń na poziomie dzierżawy należy podać lokalizację wdrożenia. Lokalizacja wdrożenia jest oddzielona od lokalizacji wdrażanych zasobów. Lokalizacja wdrożenia określa miejsce przechowywania danych wdrożenia. Wdrożenia subskrypcji i grup zarządzania również wymagają lokalizacji. W przypadku wdrożeń grupy zasobów lokalizacja grupy zasobów jest używana do przechowywania danych wdrożenia.

Możesz podać nazwę wdrożenia lub użyć domyślnej nazwy wdrożenia. Domyślna nazwa to nazwa pliku szablonu. Na przykład wdrożenie szablonu o nazwie azuredeploy.json powoduje utworzenie domyślnej nazwy wdrożenia azuredeploy.

Dla każdej nazwy wdrożenia lokalizacja jest niezmienna. Nie można utworzyć wdrożenia w jednej lokalizacji, jeśli istnieje wdrożenie o tej samej nazwie w innej lokalizacji. Jeśli na przykład utworzysz wdrożenie dzierżawy o nazwie deployment1 w lokalizacji centralus, nie będzie można później utworzyć kolejnego wdrożenia o nazwie deployment1, ale w lokalizacji westus. Jeśli zostanie wyświetlany kod błędu , użyj innej nazwy lub tej samej lokalizacji co poprzednie InvalidDeploymentLocation wdrożenie dla tej nazwy.

Zakresy wdrożenia

Podczas wdrażania w dzierżawie można wdrożyć zasoby w:

  • dzierżawy
  • grupy zarządzania w ramach dzierżawy
  • Subskrypcji
  • grupy zasobów

Zakres zasobu rozszerzenia może być ograniczony do obiektu docelowego, który różni się od docelowego wdrożenia.

Użytkownik wdrażający szablon musi mieć dostęp do określonego zakresu.

W tej sekcji przedstawiono sposób określania różnych zakresów. Te różne zakresy można połączyć w jednym szablonie.

Zakres do dzierżawy

Zasoby zdefiniowane w sekcji resources szablonu są stosowane do dzierżawy.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    tenant-resources
  ],
  "outputs": {}
}

Zakres do grupy zarządzania

Aby określić docelową grupę zarządzania w ramach dzierżawy, dodaj wdrożenie zagnieżdżone i określ scope właściwość .

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "mgName": {
      "type": "string"
    }
  },
  "variables": {
    "mgId": "[concat('Microsoft.Management/managementGroups/', parameters('mgName'))]"
  },
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2021-04-01",
      "name": "nestedMG",
      "scope": "[variables('mgId')]",
      "location": "eastus",
      "properties": {
        "mode": "Incremental",
        "template": {
          management-group-resources
        }
      }
    }
  ],
  "outputs": {}
}

Zakres do subskrypcji

Można również kierować subskrypcje w ramach dzierżawy. Użytkownik wdrażający szablon musi mieć dostęp do określonego zakresu.

Aby ukierunkować subskrypcję w ramach dzierżawy, użyj zagnieżdżonych wdrożeń i subscriptionId właściwości .

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2021-04-01",
      "name": "nestedSub",
      "location": "westus2",
      "subscriptionId": "00000000-0000-0000-0000-000000000000",
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "resources": [
            {
              subscription-resources
            }
          ]
        }
      }
    }
  ]
}

Zakres do grupy zasobów

Można również kierować grupy zasobów w ramach dzierżawy. Użytkownik wdrażający szablon musi mieć dostęp do określonego zakresu.

Aby ukierunkować grupę zasobów w ramach dzierżawy, użyj wdrożenia zagnieżdżone. Ustaw właściwości subscriptionId resourceGroup i . Nie ustawiaj lokalizacji dla zagnieżdżonych wdrożeń, ponieważ jest ono wdrażane w lokalizacji grupy zasobów.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2021-04-01",
      "name": "nestedRGDeploy",
      "subscriptionId": "00000000-0000-0000-0000-000000000000",
      "resourceGroup": "demoResourceGroup",
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "resources": [
            {
              resource-group-resources
            }
          ]
        }
      }
    }
  ]
}

Tworzenie grupy zarządzania

Poniższy szablon tworzy grupę zarządzania.

{
    "$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
      "mgName": {
        "type": "string",
        "defaultValue": "[concat('mg-', uniqueString(newGuid()))]"
      }
    },
    "resources": [
      {
        "type": "Microsoft.Management/managementGroups",
        "apiVersion": "2020-02-01",
        "name": "[parameters('mgName')]",
        "properties": {
        }
      }
    ]
  }

Jeśli Twoje konto nie ma uprawnień do wdrażania w dzierżawie, nadal możesz tworzyć grupy zarządzania, wdrażając je w innym zakresie. Aby uzyskać więcej informacji, zobacz Grupa zarządzania.

Przypisywanie roli

Poniższy szablon przypisuje rolę w zakresie dzierżawy.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "principalId": {
      "type": "string",
      "metadata": {
        "description": "principalId if the user that will be given contributor access to the resourceGroup"
      }
    },
    "roleDefinitionId": {
      "type": "string",
      "defaultValue": "8e3af657-a8ff-443c-a75c-2fe8c4bcb635",
      "metadata": {
        "description": "roleDefinition for the assignment - default is owner"
      }
    }
  },
  "variables": {
    "roleAssignmentName": "[guid('/', parameters('principalId'), parameters('roleDefinitionId'))]"
  },
  "resources": [
    {
      "name": "[variables('roleAssignmentName')]",
      "type": "Microsoft.Authorization/roleAssignments",
      "apiVersion": "2020-03-01-preview",
      "properties": {
        "roleDefinitionId": "[tenantResourceId('Microsoft.Authorization/roleDefinitions', parameters('roleDefinitionId'))]",
        "principalId": "[parameters('principalId')]",
        "scope": "/"
      }
    }
  ]
}

Następne kroki