Korygowanie niezgodnych zasobów za pomocą Azure Policy

Zasoby, które nie są zgodne z zasadami deployIfNotExists lub modyfikują je, można wprowadzić w stan zgodności za pomocą funkcji Korygowanie. Korygowanie jest realizowane przez poinstruowanie usługi Azure Policy o uruchomieniu efektu deployIfNotExists lub zmodyfikowaniu operacji przypisanych zasad na istniejących zasobach i subskrypcjach, niezależnie od tego, czy to przypisanie jest do grupy zarządzania, subskrypcji, grupy zasobów, czy pojedynczego zasobu. W tym artykule przedstawiono kroki niezbędne do zrozumienia i wykonania korygowania za pomocą Azure Policy.

Jak działa zabezpieczenia korygowania

Gdy Azure Policy szablon w definicji zasad deployIfNotExists, robi to przy użyciu tożsamości zarządzanej. Azure Policy tożsamość zarządzaną dla każdego przypisania, ale musi zawierać szczegółowe informacje o rolach, które mają zostać nadane tożsamości zarządzanej. Jeśli w tożsamości zarządzanej brakuje ról, podczas przypisywania zasad lub inicjatywy jest wyświetlany błąd. W przypadku korzystania z portalu Azure Policy automatycznie udziela tożsamości zarządzanej wymienionych ról po zakończeniu przypisywania. W przypadku korzystania z zestawu SDK role muszą zostać przyznane tożsamości zarządzanej ręcznie. Lokalizacja tożsamości zarządzanej nie ma wpływu na jej działanie z Azure Policy.

Zrzut ekranu przedstawiający zasady deployIfNotExists, które nie mają zdefiniowanego uprawnienia do tożsamości zarządzanej.

Ważne

W następujących scenariuszach tożsamości zarządzanej przypisania należy ręcznie przyznać dostęp lub wdrożenie korygowania zakończy się niepowodzeniem:

  • Jeśli przypisanie jest tworzone za pomocą zestawu SDK
  • Jeśli zasób zmodyfikowany przez deployIfNotExists lub modify znajduje się poza zakresem przypisania zasad
  • Jeśli szablon uzyskuje dostęp do właściwości zasobów spoza zakresu przypisania zasad

Konfigurowanie definicji zasad

Pierwszym krokiem jest zdefiniowanie ról, które wdrażająifNotExists i modyfikują potrzeby w definicji zasad w celu pomyślnego wdrożenia zawartości dołączonego szablonu. W obszarze właściwości details dodaj właściwość roleDefinitionIds. Ta właściwość jest tablicą ciągów, które pasują do ról w twoim środowisku. Pełny przykład można znaleźć w przykładzie deployIfNotExists lub w przykładach modyfikowania.

"details": {
    ...
    "roleDefinitionIds": [
        "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/{roleGUID}",
        "/providers/Microsoft.Authorization/roleDefinitions/{builtinroleGUID}"
    ]
}

Właściwość roleDefinitionIds używa pełnego identyfikatora zasobu i nie używa krótkiej wartości roleName roli. Aby uzyskać identyfikator roli "Współautor" w swoim środowisku, użyj następującego kodu:

az role definition list --name 'Contributor'

Ręczne konfigurowanie tożsamości zarządzanej

Podczas tworzenia przypisania przy użyciu portalu program Azure Policy tożsamość zarządzaną i przyznaje jej role zdefiniowane w elementach roleDefinitionId. W następujących warunkach kroki tworzenia tożsamości zarządzanej i przypisywania do jej uprawnień należy wykonać ręcznie:

  • Podczas korzystania z zestawu SDK (na przykład Azure PowerShell)
  • Gdy zasób spoza zakresu przypisania jest modyfikowany przez szablon
  • Gdy zasób spoza zakresu przypisania jest odczytywany przez szablon

Tworzenie tożsamości zarządzanej przy użyciu programu PowerShell

Aby utworzyć tożsamość zarządzaną podczas przypisywania zasad, należy zdefiniować lokalizację i użyć wartości AssignIdentity. Poniższy przykład pobiera definicję wbudowanych zasad Deploy SQL DB Transparent Data Encryption, ustawia docelową grupę zasobów, a następnie tworzy przypisanie.

# Login first with Connect-AzAccount if not using Cloud Shell

# Get the built-in "Deploy SQL DB transparent data encryption" policy definition
$policyDef = Get-AzPolicyDefinition -Id '/providers/Microsoft.Authorization/policyDefinitions/86a912f6-9a06-4e26-b447-11b16ba8659f'

# Get the reference to the resource group
$resourceGroup = Get-AzResourceGroup -Name 'MyResourceGroup'

# Create the assignment using the -Location and -AssignIdentity properties
$assignment = New-AzPolicyAssignment -Name 'sqlDbTDE' -DisplayName 'Deploy SQL DB transparent data encryption' -Scope $resourceGroup.ResourceId -PolicyDefinition $policyDef -Location 'westus' -AssignIdentity

Zmienna zawiera teraz identyfikator podmiotu zabezpieczeń tożsamości zarządzanej oraz standardowe wartości zwracane $assignment podczas tworzenia przypisania zasad. Dostęp do niego można uzyskać za pośrednictwem $assignment.Identity.PrincipalId .

Udzielanie zdefiniowanych ról za pomocą programu PowerShell

Nowa tożsamość zarządzana musi ukończyć replikację za pośrednictwem Azure Active Directory, zanim będzie można jej przyznać wymagane role. Po zakończeniu replikacji poniższy przykład iteruje definicję zasad w dla wartości $policyDef roleDefinitionIds i używa new-AzRoleAssignment, aby udzielić nowej tożsamości zarządzanej ról.

# Use the $policyDef to get to the roleDefinitionIds array
$roleDefinitionIds = $policyDef.Properties.policyRule.then.details.roleDefinitionIds

if ($roleDefinitionIds.Count -gt 0)
{
    $roleDefinitionIds | ForEach-Object {
        $roleDefId = $_.Split("/") | Select-Object -Last 1
        New-AzRoleAssignment -Scope $resourceGroup.ResourceId -ObjectId $assignment.Identity.PrincipalId -RoleDefinitionId $roleDefId
    }
}

Udzielanie zdefiniowanych ról za pośrednictwem portalu

Istnieją dwa sposoby na przyznanie tożsamości zarządzanej przypisania zdefiniowanych ról przy użyciu portalu, za pomocą kontroli dostępu (IAM) lub przez edycję przypisania zasad lub inicjatywy i wybranie przycisku Zapisz.

Aby dodać rolę do tożsamości zarządzanej przypisania, wykonaj następujące kroki:

  1. Uruchom usługę Azure Policy w chmurze, Azure Portal pozycję Wszystkie usługi, a następnie wyszukując i wybierając pozycję Zasady.

  2. Wybierz pozycję Przypisania w lewej części strony usługi Azure Policy.

  3. Znajdź przypisanie, które ma tożsamość zarządzaną, i wybierz nazwę.

  4. Znajdź właściwość Identyfikator przypisania na stronie edycji. Identyfikator przypisania będzie podobny do tego:

    /subscriptions/{subscriptionId}/resourceGroups/PolicyTarget/providers/Microsoft.Authorization/policyAssignments/2802056bfc094dfb95d4d7a5
    

    Nazwa tożsamości zarządzanej to ostatnia część identyfikatora zasobu przypisania, która znajduje się 2802056bfc094dfb95d4d7a5 w tym przykładzie. Skopiuj tę część identyfikatora zasobu przypisania.

  5. Przejdź do zasobu lub kontenera nadrzędnego zasobów (grupa zasobów, subskrypcja, grupa zarządzania), który wymaga ręcznego dodania definicji roli.

  6. Wybierz link Kontrola dostępu (IAM) na stronie zasobów, a następnie wybierz pozycję + Dodaj przypisanie roli w górnej części strony kontroli dostępu.

  7. Wybierz odpowiednią rolę, która pasuje do wartości roleDefinitionIds z definicji zasad. Pozostaw ustawienie Przypisz dostęp, aby ustawić wartość domyślną "Użytkownik, grupa lub aplikacja usługi Azure AD". W polu Wybierz wklej lub wpisz część identyfikatora zasobu przypisania znajdującego się wcześniej. Po zakończeniu wyszukiwania wybierz obiekt o tej samej nazwie, aby wybrać identyfikator, a następnie wybierz pozycję Zapisz.

Tworzenie zadania korygowania

Tworzenie zadania korygowania za pośrednictwem portalu

Podczas oceny przypisanie zasad z efektami deployIfNotExists lub modify określa, czy istnieją niezgodne zasoby lub subskrypcje. W przypadku wyszukiwania niezgodnych zasobów lub subskrypcji szczegóły są podane na stronie Korygowanie. Oprócz listy zasad, które mają niezgodne zasoby lub subskrypcje, można wyzwolić zadanie korygowania. Ta opcja tworzy wdrożenie na podstawie szablonu deployIfNotExists lub operacji modyfikowania.

Aby utworzyć zadanie korygowania, wykonaj następujące kroki:

  1. Uruchom usługę Azure Policy w chmurze, Azure Portal pozycję Wszystkie usługi, a następnie wyszukując i wybierając pozycję Zasady.

    Zrzut ekranu przedstawiający wyszukiwanie zasad we wszystkich usługach.

  2. Wybierz pozycję Korygowanie po lewej stronie Azure Policy strony.

    Zrzut ekranu przedstawiający węzeł Korygowanie na stronie Zasady.

  3. Wszystkie właściwości deployIfNotExists i modyfikowanie przypisań zasad z niezgodnymi zasobami znajdują się na karcie Zasady w celu skorygowania i tabeli danych. Wybierz zasady z niezgodnymi zasobami. Zostanie otwarta strona Nowe zadanie korygowania.

    Uwaga

    Alternatywnym sposobem otwarcia strony zadania korygowania jest znalezienie i wybranie zasad na stronie Zgodność, a następnie wybranie przycisku Utwórz zadanie korygowania.

  4. Na stronie Nowe zadanie korygowania przefiltruj zasoby do skorygowania przy użyciu wielokropka zakresu, aby wybrać zasoby podrzędne, z których przypisano zasady (w tym do poszczególnych obiektów zasobów). Ponadto użyj listy rozwijanej Lokalizacje, aby dokładniej filtrować zasoby. Korygowane będą tylko zasoby wymienione w tabeli.

    Zrzut ekranu przedstawiający węzeł Koryguje i siatkę zasobów do skorygowania.

  5. Rozpocznij zadanie korygowania, gdy zasoby zostaną przefiltrowane, wybierając pozycję Koryguj. Na stronie Zgodności z zasadami zostanie otwarta karta Zadania korygowania, na którym jest pokazywany stan postępu zadań. Wdrożenia utworzone przez zadanie korygowania rozpoczynają się od razu.

    Zrzut ekranu przedstawiający kartę Zadania korygowania i postęp istniejących zadań korygowania.

  6. Wybierz zadanie korygowania na stronie zgodności zasad, aby uzyskać szczegółowe informacje o postępie. Filtrowanie używane dla zadania jest wyświetlane wraz z listą zasobów, które są korygowane.

  7. Na stronie Zadanie korygowania wybierz i przytrzymaj (lub kliknij prawym przyciskiem myszy) zasób, aby wyświetlić wdrożenie zadania korygowania lub zasób. Na końcu wiersza wybierz pozycję Powiązane zdarzenia, aby wyświetlić szczegóły, takie jak komunikat o błędzie.

    Zrzut ekranu przedstawiający menu kontekstowe zasobu na karcie Koryguj zadanie.

Zasoby wdrożone za pomocą zadania korygowania są dodawane do karty Wdrożone zasoby na stronie zgodności zasad.

Tworzenie zadania korygowania za pomocą interfejsu wiersza polecenia platformy Azure

Aby utworzyć zadanie korygowania za pomocą interfejsu wiersza polecenia platformy Azure, użyj az policy remediation poleceń . Zastąp {subscriptionId} wartości identyfikatorem subskrypcji, {myAssignmentId} a wartością deployIfNotExists lub zmodyfikuj identyfikator przypisania zasad.

# Login first with az login if not using Cloud Shell

# Create a remediation for a specific assignment
az policy remediation create --name myRemediation --policy-assignment '/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyAssignments/{myAssignmentId}'

Aby uzyskać inne polecenia i przykłady korygowania, zobacz polecenia az policy remediation.

Tworzenie zadania korygowania za pomocą Azure PowerShell

Aby utworzyć zadanie korygowania z Azure PowerShell, użyj Start-AzPolicyRemediation poleceń . Zastąp {subscriptionId} wartości identyfikatorem subskrypcji, {myAssignmentId} a wartością deployIfNotExists lub zmodyfikuj identyfikator przypisania zasad.

# Login first with Connect-AzAccount if not using Cloud Shell

# Create a remediation for a specific assignment
Start-AzPolicyRemediation -Name 'myRemedation' -PolicyAssignmentId '/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyAssignments/{myAssignmentId}'

Inne polecenia cmdlet i przykłady korygowania można znaleźć w module Az.PolicyInsights.

Tworzenie zadania korygowania podczas przypisywania zasad w Azure Portal

Usprawnionym sposobem tworzenia zadania korygowania jest to, aby zrobić to z Azure Portal podczas przypisywania zasad. Jeśli definicja zasad do przypisania to efekt deployIfNotExists lub Modify, kreator na karcie Korygowanie oferuje opcję Utwórz zadanie korygowania. Jeśli ta opcja jest zaznaczona, zadanie korygowania jest tworzone w tym samym czasie co przypisanie zasad.

Następne kroki