Szybki start: definiowanie i przypisywanie strategii platformy Azure przy użyciu interfejsu API REST

Z tego samouczka dowiesz się, jak używać usługi Azure Blueprints do wykonywania niektórych typowych zadań związanych z tworzeniem, publikowaniem i przypisywaniem strategii w organizacji. Ta umiejętność ułatwia definiowanie typowych wzorców opracowywania konfiguracji wielokrotnego użytku i szybkiego wdrażania na podstawie szablonów, zasad i zabezpieczeń platformy Azure Resource Manager (ARM).

Wymagania wstępne

  • Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
  • Zarejestruj dostawcę Microsoft.Blueprint zasobów. Aby uzyskać wskazówki, zobacz Dostawcy zasobów i typy.

Azure Cloud Shell

Na platforma Azure hostowane jest Azure Cloud Shell, interaktywne środowisko powłoki, z którego można korzystać w przeglądarce. Do pracy z usługami platformy Azure można używać programu Bash lub PowerShell w środowisku Cloud Shell. Aby uruchomić kod w tym artykule, możesz użyć wstępnie zainstalowanych poleceń Cloud Shell bez konieczności instalowania niczego w środowisku lokalnym.

Aby uruchomić środowisko Azure Cloud Shell:

Opcja Przykład/link
Wybierz pozycję Wypróbuj w prawym górnym rogu bloku kodu lub polecenia. Wybranie pozycji Wypróbuj nie powoduje automatycznego skopiowania kodu lub polecenia w celu Cloud Shell. Zrzut ekranu przedstawiający przykład try it for Azure Cloud Shell.
Przejdź do witryny https://shell.azure.com lub wybierz przycisk Uruchom Cloud Shell, aby otworzyć środowisko Cloud Shell w przeglądarce. Zrzut ekranu przedstawiający sposób uruchamiania Cloud Shell w nowym oknie.
Wybierz przycisk Cloud Shell na pasku menu w prawym górnym rogu witryny Azure Portal. Zrzut ekranu przedstawiający przycisk Cloud Shell w Azure Portal

Aby użyć usługi Azure Cloud Shell:

  1. Uruchom usługę Cloud Shell.

  2. Wybierz przycisk Kopiuj w bloku kodu (lub bloku poleceń), aby skopiować kod lub polecenie.

  3. Wklej kod lub polecenie do sesji Cloud Shell, wybierając klawisze Ctrl+ShiftV w systemach Windows i Linux lub wybierając pozycję Cmd+Shift++V w systemie macOS.

  4. Wybierz klawisz Enter, aby uruchomić kod lub polecenie.

Wprowadzenie do interfejsu API REST

Jeśli nie znasz interfejsu API REST, zacznij od przejrzenia dokumentacji interfejsu API REST platformy Azure, w szczególności sekcji dotyczących identyfikatora URI żądania i treści żądania. W tym przewodniku Szybki start użyto tych pojęć w celu zapewnienia wskazówek dotyczących pracy z usługą Azure Blueprints i przyjęto założenie, że jest to działająca wiedza na ich temat. Narzędzia takie jak ARMClient mogą automatycznie obsługiwać autoryzację i są zalecane dla początkujących.

Aby zapoznać się ze specyfikacjami usługi Azure Blueprints, zobacz Interfejs API REST usługi Azure Blueprints.

Interfejs API REST i program PowerShell

Jeśli jeszcze nie masz narzędzia do wykonywania wywołań interfejsu API REST, rozważ wykonywanie tych instrukcji w programie PowerShell. Poniżej znajduje się przykładowy nagłówek uwierzytelniania za pomocą platformy Azure. Wygeneruj nagłówek uwierzytelniania, czasami nazywany tokenem elementu nośnego i podaj identyfikator URI interfejsu API REST, aby nawiązać połączenie z dowolnymi parametrami lub :Request Body

# Log in first with Connect-AzAccount if not using Cloud Shell

$azContext = Get-AzContext
$azProfile = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile
$profileClient = New-Object -TypeName Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient -ArgumentList ($azProfile)
$token = $profileClient.AcquireAccessToken($azContext.Subscription.TenantId)
$authHeader = @{
    'Content-Type'='application/json'
    'Authorization'='Bearer ' + $token.AccessToken
}

# Invoke the REST API
$restUri = 'https://management.azure.com/subscriptions/{subscriptionId}?api-version=2020-01-01'
$response = Invoke-RestMethod -Uri $restUri -Method Get -Headers $authHeader

Zastąp {subscriptionId} wartość w poprzedniej $restUri zmiennej, aby uzyskać informacje o subskrypcji. Zmienna $response zawiera wynik Invoke-RestMethod polecenia cmdlet, które można przeanalizować za pomocą poleceń cmdlet, takich jak ConvertFrom-Json. Jeśli punkt końcowy usługi interfejsu API REST oczekuje Request Bodywartości , podaj zmienną sformatowaną w formacie JSON do -Body parametru .Invoke-RestMethod

Tworzenie strategii

Pierwszym krokiem podczas definiowania standardowego wzorca zgodności jest utworzenie strategii z dostępnych zasobów. Utwórzmy strategię o nazwie MyBlueprint , aby skonfigurować przypisania ról i zasad dla subskrypcji. Następnie dodasz grupę zasobów, szablon usługi ARM i przypisanie roli w grupie zasobów.

Uwaga

Podczas korzystania z interfejsu API REST obiekt strategii jest tworzony najpierw. Dla każdego artefaktu , który ma zostać dodany, który ma parametry, należy zdefiniować parametry z wyprzedzeniem w początkowej strategii.

W każdym identyfikatorze URI interfejsu API REST zastąp następujące zmienne własnymi wartościami:

  • {YourMG} — Zastąp ciąg identyfikatorem grupy zarządzania.
  • {subscriptionId} — Zastąp ciąg identyfikatorem subskrypcji.

Uwaga

Możesz również tworzyć strategie na poziomie subskrypcji. Aby uzyskać więcej informacji, zobacz tworzenie strategii w przykładzie subskrypcji.

  1. Utwórz obiekt strategii początkowej. Zawiera Request Body właściwości strategii, wszystkie grupy zasobów do utworzenia i wszystkie parametry na poziomie strategii. Parametry są ustawiane podczas przypisywania i są one używane przez artefakty dodane w kolejnych krokach.

    • Identyfikator URI interfejsu API REST

      PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint?api-version=2018-11-01-preview
      
    • Treść żądania

      {
          "properties": {
              "description": "This blueprint sets tag policy and role assignment on the subscription, creates a ResourceGroup, and deploys a resource template and role assignment to that ResourceGroup.",
              "targetScope": "subscription",
              "parameters": {
                  "storageAccountType": {
                      "type": "string",
                      "metadata": {
                          "displayName": "storage account type.",
                          "description": null
                      }
                  },
                  "tagName": {
                      "type": "string",
                      "metadata": {
                          "displayName": "The name of the tag to provide the policy assignment.",
                          "description": null
                      }
                  },
                  "tagValue": {
                      "type": "string",
                      "metadata": {
                          "displayName": "The value of the tag to provide the policy assignment.",
                          "description": null
                      }
                  },
                  "contributors": {
                      "type": "array",
                      "metadata": {
                          "description": "List of AAD object IDs that is assigned Contributor role at the subscription"
                      }
                  },
                  "owners": {
                      "type": "array",
                      "metadata": {
                          "description": "List of AAD object IDs that is assigned Owner role at the resource group"
                      }
                  }
              },
              "resourceGroups": {
                  "storageRG": {
                      "description": "Contains the resource template deployment and a role assignment."
                  }
              }
          }
      }
      
  2. Dodaj przypisanie roli w subskrypcji. Definiuje Request Body rodzaj artefaktu, właściwości są wyrównane do identyfikatora definicji roli, a tożsamości główne są przekazywane jako tablica wartości. W poniższym przykładzie tożsamości główne przyznane określonej roli są skonfigurowane do parametru ustawionego podczas przypisywania strategii. W tym przykładzie użyto wbudowanej Contributor roli z identyfikatorem GUID .b24988ac-6180-42a0-ab88-20f7382dd24c

    • Identyfikator URI interfejsu API REST

      PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint/artifacts/roleContributor?api-version=2018-11-01-preview
      
    • Treść żądania

      {
          "kind": "roleAssignment",
          "properties": {
              "roleDefinitionId": "/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c",
              "principalIds": "[parameters('contributors')]"
          }
      }
      
  3. Dodaj przypisanie zasad w subskrypcji. Definiuje Request Body rodzaj artefaktu, właściwości są wyrównane do definicji zasad lub inicjatywy, a przypisanie zasad jest skonfigurowane do używania zdefiniowanych parametrów strategii podczas przypisywania strategii. W tym przykładzie Apply tag and its default value to resource groups użyto wbudowanych zasad z identyfikatorem GUID .49c88fc8-6fd1-46fd-a676-f12d1d3a4c71

    • Identyfikator URI interfejsu API REST

      PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint/artifacts/policyTags?api-version=2018-11-01-preview
      
    • Treść żądania

      {
          "kind": "policyAssignment",
          "properties": {
              "description": "Apply tag and its default value to resource groups",
              "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/49c88fc8-6fd1-46fd-a676-f12d1d3a4c71",
              "parameters": {
                  "tagName": {
                      "value": "[parameters('tagName')]"
                  },
                  "tagValue": {
                      "value": "[parameters('tagValue')]"
                  }
              }
          }
      }
      
  4. Dodaj kolejne przypisanie zasad dla tagu magazynu (przez ponowne użycie storageAccountType_ parameter) w subskrypcji. Ten dodatkowy artefakt przypisania zasad pokazuje, że parametr zdefiniowany w strategii może być używany przez więcej niż jeden artefakt. W tym przykładzie użyjesz elementu storageAccountType , aby ustawić tag w grupie zasobów. Ta wartość zawiera informacje o koncie magazynu utworzonym w następnym kroku. W tym przykładzie Apply tag and its default value to resource groups użyto wbudowanych zasad z identyfikatorem GUID .49c88fc8-6fd1-46fd-a676-f12d1d3a4c71

    • Identyfikator URI interfejsu API REST

      PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint/artifacts/policyStorageTags?api-version=2018-11-01-preview
      
    • Treść żądania

      {
          "kind": "policyAssignment",
          "properties": {
              "description": "Apply storage tag and the parameter also used by the template to resource groups",
              "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/49c88fc8-6fd1-46fd-a676-f12d1d3a4c71",
              "parameters": {
                  "tagName": {
                      "value": "StorageType"
                  },
                  "tagValue": {
                      "value": "[parameters('storageAccountType')]"
                  }
              }
          }
      }
      
  5. Dodaj szablon w grupie zasobów. Szablon Request Body usługi ARM zawiera normalny składnik JSON szablonu i definiuje docelową grupę zasobów za pomocą polecenia properties.resourceGroup. Szablon używa storageAccountTyperównież parametrów strategii , tagNamei tagValue , przekazując je do szablonu. Parametry strategii są dostępne dla szablonu, definiując properties.parameterselement , a wewnątrz pliku JSON szablonu, że para klucz-wartość jest używana do wstrzykiwania wartości. Nazwy parametrów strategii i szablonu mogą być takie same, ale różnią się tutaj, aby zilustrować sposób, w jaki każdy przechodzi z strategii do artefaktu szablonu.

    • Identyfikator URI interfejsu API REST

      PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint/artifacts/templateStorage?api-version=2018-11-01-preview
      
    • Treść żądania

      {
          "kind": "template",
          "properties": {
              "template": {
                  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
                  "contentVersion": "1.0.0.0",
                  "parameters": {
                      "storageAccountTypeFromBP": {
                          "type": "string",
                          "defaultValue": "Standard_LRS",
                          "allowedValues": [
                              "Standard_LRS",
                              "Standard_GRS",
                              "Standard_ZRS",
                              "Premium_LRS"
                          ],
                          "metadata": {
                              "description": "Storage Account type"
                          }
                      },
                      "tagNameFromBP": {
                          "type": "string",
                          "defaultValue": "NotSet",
                          "metadata": {
                              "description": "Tag name from blueprint"
                          }
                      },
                      "tagValueFromBP": {
                          "type": "string",
                          "defaultValue": "NotSet",
                          "metadata": {
                              "description": "Tag value from blueprint"
                          }
                      }
                  },
                  "variables": {
                      "storageAccountName": "[concat(uniquestring(resourceGroup().id), 'standardsa')]"
                  },
                  "resources": [{
                      "type": "Microsoft.Storage/storageAccounts",
                      "name": "[variables('storageAccountName')]",
                      "apiVersion": "2016-01-01",
                      "tags": {
                         "[parameters('tagNameFromBP')]": "[parameters('tagValueFromBP')]"
                      },
                      "location": "[resourceGroups('storageRG').location]",
                      "sku": {
                          "name": "[parameters('storageAccountTypeFromBP')]"
                      },
                      "kind": "Storage",
                      "properties": {}
                  }],
                  "outputs": {
                      "storageAccountSku": {
                          "type": "string",
                          "value": "[variables('storageAccountName')]"
                      }
                  }
              },
              "resourceGroup": "storageRG",
              "parameters": {
                  "storageAccountTypeFromBP": {
                      "value": "[parameters('storageAccountType')]"
                  },
                  "tagNameFromBP": {
                      "value": "[parameters('tagName')]"
                  },
                  "tagValueFromBP": {
                      "value": "[parameters('tagValue')]"
                  }
              }
          }
      }
      
  6. Dodaj przypisanie roli w grupie zasobów. Podobnie jak poprzedni wpis przypisania roli, w poniższym przykładzie użyto identyfikatora definicji roli Owner i podano inny parametr z strategii. W tym przykładzie użyto wbudowanej Owner roli z identyfikatorem GUID .8e3af657-a8ff-443c-a75c-2fe8c4bcb635

    • Identyfikator URI interfejsu API REST

      PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint/artifacts/roleOwner?api-version=2018-11-01-preview
      
    • Treść żądania

      {
          "kind": "roleAssignment",
          "properties": {
              "resourceGroup": "storageRG",
              "roleDefinitionId": "/providers/Microsoft.Authorization/roleDefinitions/8e3af657-a8ff-443c-a75c-2fe8c4bcb635",
              "principalIds": "[parameters('owners')]"
          }
      }
      

Publikowanie strategii

Teraz, po dodaniu artefaktów do strategii, nadszedł czas, aby go opublikować. Publikowanie udostępnia strategię do przypisania do subskrypcji.

  • Identyfikator URI interfejsu API REST

    PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint/versions/{BlueprintVersion}?api-version=2018-11-01-preview
    

Wartość parametru {BlueprintVersion} to ciąg liter, cyfr i łączników (bez spacji ani innych znaków specjalnych). Maksymalna długość to 20 znaków. Użyj czegoś unikatowego i informacyjnego, takiego jak v20180622-135541.

Przypisywanie strategii

Po opublikowaniu strategii przy użyciu interfejsu API REST można ją przypisać do subskrypcji. Przypisz strategię utworzoną do jednej z subskrypcji w hierarchii grup zarządzania. Jeśli strategia została zapisana w subskrypcji, można ją przypisać tylko do tej subskrypcji. Określa Request Body strategię do przypisania i udostępnia nazwę i lokalizację do wszystkich grup zasobów w definicji strategii. Request Body Zawiera również wszystkie parametry zdefiniowane w strategii i używane przez co najmniej jeden dołączony artefakt.

W każdym identyfikatorze URI interfejsu API REST zastąp następujące zmienne własnymi wartościami:

  • {tenantId} — Zastąp element identyfikatorem dzierżawy.
  • {YourMG} — Zastąp element identyfikatorem grupy zarządzania.
  • {subscriptionId} — Zastąp element identyfikatorem subskrypcji.
  1. Podaj jednostkę usługi Azure Blueprints jako Owner rolę w subskrypcji docelowej. Wartość jest statyczna AppId (f71766dc-90d9-4b7d-bd9d-4499c4331c3f), ale identyfikator jednostki usługi różni się w zależności od dzierżawy. Użyj następującego interfejsu API REST, aby zażądać szczegółów dzierżawy. Używa interfejs Graph API usługi Azure Active Directory, która ma inną autoryzację.

    • Identyfikator URI interfejsu API REST

      GET https://graph.windows.net/{tenantId}/servicePrincipals?api-version=1.6&$filter=appId eq 'f71766dc-90d9-4b7d-bd9d-4499c4331c3f'
      
  2. Uruchom wdrażanie strategii, przypisując ją do subskrypcji. contributors Ponieważ parametry i owners wymagają tablicy objectIds podmiotów zabezpieczeń, które mają zostać przydzielone do przypisania roli, użyj interfejs Graph API usługi Azure Active Directory do zbierania parametrów objectIds do użycia we Request Body własnych użytkownikach, grupach lub jednostkach usługi.

    • Identyfikator URI interfejsu API REST

      PUT https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Blueprint/blueprintAssignments/assignMyBlueprint?api-version=2018-11-01-preview
      
    • Treść żądania

      {
          "properties": {
              "blueprintId": "/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint",
              "resourceGroups": {
                  "storageRG": {
                      "name": "StorageAccount",
                      "location": "eastus2"
                  }
              },
              "parameters": {
                  "storageAccountType": {
                      "value": "Standard_GRS"
                  },
                  "tagName": {
                      "value": "CostCenter"
                  },
                  "tagValue": {
                      "value": "ContosoIT"
                  },
                  "contributors": {
                      "value": [
                          "7be2f100-3af5-4c15-bcb7-27ee43784a1f",
                          "38833b56-194d-420b-90ce-cff578296714"
                      ]
                  },
                  "owners": {
                      "value": [
                          "44254d2b-a0c7-405f-959c-f829ee31c2e7",
                          "316deb5f-7187-4512-9dd4-21e7798b0ef9"
                      ]
                  }
              }
          },
          "identity": {
              "type": "systemAssigned"
          },
          "location": "westus"
      }
      
    • Tożsamość zarządzana przypisana przez użytkownika

      W przypisaniu strategii można również użyć tożsamości zarządzanej przypisanej przez użytkownika. W takim przypadku identity część treści żądania zmienia się w następujący sposób. Zastąp elementy {yourRG} i {userIdentity} odpowiednio nazwą grupy zasobów i nazwą tożsamości zarządzanej przypisanej przez użytkownika.

      "identity": {
          "type": "userAssigned",
          "tenantId": "{tenantId}",
          "userAssignedIdentities": {
              "/subscriptions/{subscriptionId}/resourceGroups/{yourRG}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{userIdentity}": {}
          }
      },
      

      Tożsamość zarządzana przypisana przez użytkownika może znajdować się w dowolnej subskrypcji i grupie zasobów, do której użytkownik przypisujący strategię ma uprawnienia.

      Ważne

      Usługa Azure Blueprints nie zarządza tożsamością zarządzaną przypisaną przez użytkownika. Użytkownicy są odpowiedzialni za przypisywanie wystarczających ról i uprawnień lub przypisanie strategii zakończy się niepowodzeniem.

Czyszczenie zasobów

Cofanie przypisania strategii

Strategię można usunąć z subskrypcji. Usunięcie często przeprowadza się, gdy zasoby artefaktu przestają być potrzebne. Po usunięciu strategii artefakty przypisane w jej ramach są pozostawiane. Aby usunąć przypisanie strategii, wykonaj następującą operację interfejsu API REST:

  • Identyfikator URI interfejsu API REST

    DELETE https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Blueprint/blueprintAssignments/assignMyBlueprint?api-version=2018-11-01-preview
    

Usuwanie strategii

Aby usunąć samą strategię, wykonaj następującą operację interfejsu API REST:

  • Identyfikator URI interfejsu API REST

    DELETE https://management.azure.com/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint?api-version=2018-11-01-preview
    

Następne kroki

W tym przewodniku Szybki start utworzono, przypisano i usunięto strategię z interfejsem API REST. Aby dowiedzieć się więcej na temat usługi Azure Blueprints, przejdź do artykułu dotyczącego cyklu życia strategii.