Azure Policy를 사용하여 비준수 리소스 수정

deployIfNotExists 또는 수정 정책을 준수하지 않는 리소스는 수정 을 통해 준수 상태로 설정할 수 있습니다. 업데이트는 관리 그룹, 구독, 리소스 그룹 또는 개별 리소스에 대 한 할당 인지 여부에 관계 없이 기존 리소스 및 구독에 대 한 할당 된 정책의 수정 작업 또는 Deployifnotexists 효과를 실행 하도록 Azure Policy 지시 하 여 수행 됩니다. 이 문서에서는 Azure Policy를 통한 수정을 이해하고 수행하는 데 필요한 단계를 보여 줍니다.

수정 보안의 작동 방식

Azure Policy는 deployIfNotExists 정책 정의의 템플릿을 실행할 때 관리 ID를 사용합니다. Azure Policy는 각 할당용 관리 ID를 만듭니다. 단, 관리 ID를 부여할 역할 관련 세부 정보가 있어야 합니다. 관리 id에 역할이 없는 경우 정책이 나 이니셔티브를 할당 하는 동안 오류가 표시 됩니다. 포털 사용 시 Azure Policy는 할당이 시작되면 나열된 역할을 관리 ID에 자동으로 부여합니다. SDK를 사용 하는 경우 관리 id에 수동으로 역할을 부여 해야 합니다. 관리 id의 위치 는 Azure Policy 작업에 영향을 주지 않습니다.

관리 id에 대해 정의 된 사용 권한이 없는 deployIfNotExists 정책의 스크린샷

중요

다음 시나리오에서는 할당의 관리 되는 id를 수동으로 부여 해야 하며, 그렇지 않으면 재구성 배포가 실패 합니다.

  • SDK를 통해 할당을 만든 경우
  • Deployifnotexists 또는 modify 로 수정 된 리소스가 정책 할당 범위를 벗어난 경우
  • 템플릿이 정책 할당 범위를 벗어난 리소스의 속성에 액세스 하는 경우

정책 정의 구성

첫 단계에서는 deployIfNotExists 또는 수정 이 포함된 템플릿의 콘텐츠를 정상적으로 배포하기 위해 정책 정의에 포함되어 있어야 하는 역할을 정의합니다. 이렇게 하려면 details 속성 아래에 roleDefinitionIds 속성을 추가합니다. 이 속성은 환경의 역할과 일치하는 문자열 배열입니다. 전체 예제를 보려면 deployIfNotExists 예제 또는 수정 예제를 참조하세요.

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

roleDefinitionIds 속성은 역할의 짧은 roleName 을 가져오지 않으며 전체 리소스 식별자를 사용합니다. 환경의 ‘Contributor’ 역할 ID를 가져오려면 다음 코드를 사용합니다.

az role definition list --name 'Contributor'

관리 ID 수동 구성

포털을 사용하여 할당을 만들 때 Azure Policy는 관리 ID를 생성하고 roleDefinitionIds 에 정의된 역할을 부여합니다. 다음과 같은 상황에서는 관리 ID를 만들고 권한을 할당하는 단계를 수동으로 수행해야 합니다.

  • Azure PowerShell 등의 SDK를 사용하는 경우
  • 할당 범위 외부의 리소스를 템플릿이 수정하는 경우
  • 할당 범위 외부의 리소스를 템플릿이 읽는 경우

PowerShell을 사용하여 관리 ID 만들기

정책 할당 중에 관리 ID를 만들려면 Location 을 정의하고 AssignIdentity 를 사용해야 합니다. 다음 예제에서는 기본 제공 정책 SQL DB 투명 데이터 암호화 배포 의 정의를 가져오고 대상 리소스 그룹을 설정한 다음 할당을 만듭니다.

# 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

이제 $assignment 변수에는 관리 ID의 보안 주체 ID와 정책 할당 생성 시에 반환된 표준 값이 포함되어 있습니다. $assignment.Identity.PrincipalId를 통해 이 변수에 액세스할 수 있습니다.

PowerShell을 사용하여 정의된 역할 부여

Azure Active Directory를 통해 새 관리 ID 복제를 완료해야 필요한 역할을 해당 ID에 부여할 수 있습니다. 다음 예제에서는 복제가 완료된 후 roleDefinitionIds 에 대해 $policyDef에서 정책 정의를 반복하며, New-AzRoleAssignment를 사용하여 새 관리 ID에 역할을 부여합니다.

# 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
    }
}

포털을 통해 정의된 역할 부여

액세스 제어 (IAM) 를 사용 하거나 정책 또는 이니셔티브 할당을 편집 하 고 저장 을 선택 하 여 할당 된 역할에 정의 된 역할을 부여 하는 두 가지 방법이 있습니다.

할당의 관리 ID에 역할을 추가하려면 다음 단계를 수행합니다.

  1. 모든 서비스 를 선택한 후 정책 을 검색하고 선택하여 Azure Portal에서 Azure Policy 서비스를 시작합니다.

  2. Azure Policy 페이지의 왼쪽에서 할당 을 선택합니다.

  3. 관리 id가 있는 할당을 찾아 이름을 선택 합니다.

  4. 편집 페이지에서 할당 ID 속성을 찾습니다. 할당 ID는 다음과 같이 표시됩니다.

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

    관리 ID의 이름은 할당 리소스 ID의 끝부분(이 예제에서는 2802056bfc094dfb95d4d7a5)입니다. 할당 리소스 ID의 이 부분을 복사합니다.

  5. 역할 정의를 수동으로 추가해야 하는 리소스 또는 리소스 상위 컨테이너(리소스 그룹, 구독, 관리 그룹)로 이동합니다.

  6. 리소스 페이지에서 access control (IAM) 링크를 선택한 다음, 액세스 제어 페이지의 맨 위에 있는 + 역할 할당 추가 를 선택 합니다.

  7. 정책 정의에서 roleDefinitionIds 와 일치하는 적절한 역할을 선택합니다. 다음에 대한 액세스 할당: 은 기본값인 ‘Azure AD 사용자, 그룹 또는 애플리케이션’으로 설정해 둡니다. 선택 상자에 앞에서 찾은 할당 리소스 ID 부분을 붙여넣거나 입력합니다. 검색이 완료 되 면 같은 이름의 개체를 선택 하 여 ID를 선택 하 고 저장 을 선택 합니다.

수정 작업 만들기

포털을 통해 수정 작업 만들기

평가 하는 동안 Deployifnotexists 또는 modify effects를 사용 하는 정책 할당은 비준수 리소스 또는 구독이 있는지 여부를 확인 합니다. 비준수 리소스 또는 구독을 찾을 때 세부 정보는 재구성 페이지에 제공 됩니다. 호환 되지 않는 리소스 또는 구독이 있는 정책 목록과 함께 수정 작업 을 트리거하는 옵션이 있습니다. 이 옵션을 선택하면 deployIfNotExists 템플릿 또는 수정 작업에서 배포가 작성됩니다.

수정 작업 을 만들려면 다음 작업을 수행합니다.

  1. 모든 서비스 를 선택한 후 정책 을 검색하고 선택하여 Azure Portal에서 Azure Policy 서비스를 시작합니다.

    모든 서비스에서 정책을 검색하는 스크린샷

  2. Azure Policy 페이지의 왼쪽에서 수정 을 선택합니다.

    정책 페이지의 재구성 노드 스크린샷

  3. 비준수 리소스가 있는 모든 deployIfNotExists수정 정책 할당이 수정할 정책 탭과 데이터 테이블에 포함됩니다. 비규격 리소스가 있는 정책에서을 선택 합니다. 새 수정 작업 페이지가 열립니다.

    참고

    업데이트 관리 작업 페이지를 여는 다른 방법은 준수 페이지에서 정책을 찾아 선택한 다음 재구성 작업 만들기 단추를 선택 하는 것입니다.

  4. 새 수정 작업 페이지에서 범위 줄임표를 사용해 수정할 리소스를 필터링하여 정책이 할당된 하위 리소스를 선택합니다. 개별 리소스 개체까지 포함하여 선택해야 합니다. 또한 위치 드롭다운을 사용하여 리소스를 추가로 필터링합니다. 테이블에 나열된 리소스만 수정됩니다.

    재구성 노드 및 수정할 리소스의 그리드 스크린샷

  5. 재구성 을 선택 하 여 리소스를 필터링 한 후에 수정 작업을 시작 합니다. 정책 준수 페이지에서 수정 작업 탭이 열리고 작업 진행 상태가 표시됩니다. 수정 작업으로 만든 배포가 바로 시작됩니다.

    수정 작업 탭의 스크린샷 및 기존 수정 작업의 진행률입니다.

  6. 정책 준수 페이지에서 수정 작업 을 선택 하 여 진행률에 대 한 세부 정보를 가져옵니다. 작업에 사용된 필터링과 수정 중인 리소스 목록이 표시됩니다.

  7. 수정 작업 페이지에서 리소스를 마우스 오른쪽 단추로 클릭 하 여 수정 작업의 배포 또는 리소스를 볼 수 있습니다. 행의 끝에서 관련 이벤트 를 선택 하 여 오류 메시지와 같은 세부 정보를 확인 합니다.

    작업 재구성 탭에서 리소스에 대 한 상황에 맞는 메뉴의 스크린샷

수정 작업 을 통해 배포한 리소스는 정책 준수 페이지의 배포된 리소스 탭에 추가됩니다.

Azure CLI를 통해 수정 작업 만들기

Azure CLI를 사용하여 수정 작업 을 만들려면 az policy remediation 명령을 사용합니다. {subscriptionId}를 구독 ID로 바꾸고 {myAssignmentId}deployIfNotExists 또는 수정 정책 할당 ID로 바꿉니다.

# 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}'

다른 수정 명령과 예제는 az policy remediation 명령을 참조하세요.

Azure PowerShell을 통해 수정 작업 만들기

Azure PowerShell을 사용하여 수정 작업 을 만들려면 Start-AzPolicyRemediation 명령을 사용합니다. {subscriptionId}를 구독 ID로 바꾸고 {myAssignmentId}deployIfNotExists 또는 수정 정책 할당 ID로 바꿉니다.

# 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}'

다른 수정 cmdlet 및 예제는 Az.PolicyInsights 모듈을 참조하세요.

Azure Portal에서 정책 할당 중에 수정 작업 만들기

수정 작업을 만드는 간소화된 방법은 정책 할당 중에 Azure Portal에서 수행하는 것입니다. 할당할 정책 정의가 Deployifnotexists 또는 수정 효과 인 경우 수정 탭의 마법사는 수정 작업 만들기 옵션을 제공 합니다. 이 옵션을 선택 하면 정책 할당과 동시에 수정 작업이 생성 됩니다.

다음 단계