Bicep 및 Azure Policy: 사용자 지정 Azure 정책 생성 및 관리
10182 단어 governanceazurebiceppowershell
Azure는 광범위한 상황 및 거버넌스 전략을 다루는 여러 정책 정의를 제공합니다.
그러나 때로는 특정 요구 사항과 요구 사항을 충족하는 정책이 필요합니다. 고유한 사용자 지정 Azure Policy를 작성해야 합니다.
Azure Policy는 여러 속성이 있는 JSON 파일입니다.
Bicep에서 이러한 정책 요소와 정책 이름(배포 범위가 있는 정책 ID를 형성함)을 검색할 수 있습니다.
resource symbolicname 'Microsoft.Authorization/policyDefinitions@2021-06-01' = {
name: 'string'
properties: {
description: 'string'
displayName: 'string'
metadata: any()
mode: 'string'
parameters: {}
policyRule: any()
policyType: 'string'
}
}
정책 이니셔티브와 마찬가지로 정책 정의는 지정된 범위, 관리 그룹 또는 구독에 배포됩니다.
이제 작업이 여러 정책 정의를 배포하고 일부 기존 정책을 업데이트하는 것이라고 상상해 보십시오. PowerShell 및 Bicep을 사용하여 이 작업을 어떻게 자동화할 수 있습니까?
하나의 정책만 관리하는 것이 아니라 여러 정책을 관리해야 할 수도 있습니다.
정책 정의는 JSON 파일이며 PowerShell 스크립트로 쉽게 읽을 수 있습니다. 모든 정책 정의 JSON 파일을 단일 폴더에 넣으면 PowerShell이 파일을 구문 분석하고 정책 정의를 배포하는 데 필요한 모든 정보를 추출할 수 있습니다.
정책 정의를 배포하려면 bicep 파일이 필요합니다.
targetScope = 'managementGroup'
@maxLength(64)
@description('PolicySet name')
param defintionName string
@maxLength(128)
@description('PolicySet display Name')
param definitionDisplayName string
@description('PolicySet description')
param definitionDescription string
@allowed([
'All'
'Indexed'
])
@description('Policy Definition Mode')
param policyMode string
@description('JSON string')
param policyParameters string
@description('JSON string')
param policyMetadata string
@description('JSON string')
param policyRule string
resource policyInitiative 'Microsoft.Authorization/policyDefinitions@2021-06-01' = {
name: defintionName
properties: {
displayName: definitionDisplayName
description: definitionDescription
policyType: 'Custom'
mode: policyMode
metadata: json(policyMetadata)
parameters: json(policyParameters)
policyRule: json(policyRule)
}
}
정책 이니셔티브와 마찬가지로 대상 범위는 관리 그룹이지만 구독으로 변경될 수 있습니다.
definitionName 및 defintionDisplayName 매개변수는 길이가 제한되어 있으므로 배포 오류를 방지하려면 제어가 필요합니다.
정책 모드는 인덱싱된 값(태그를 지원하는 리소스의 경우) 또는 모두(모든 리소스 유형)의 두 값만 가질 수 있습니다. policyMode 매개변수는 이 두 값의 선택을 제한합니다.
메타데이터, 매개 변수 및 policyRule의 경우 bicep는 JSON 개체만 허용하지만 PowerShell은 JSON 개체의 문자열 표현만 제공할 수 있습니다. bicep 함수 json()은 문자열을 해당 JSON 개체로 변환하기 위해 여기에 있습니다.
PowerShell 스크립트는 지정된 폴더의 모든 JSON 파일을 구문 분석하고 displayName, Description 및 모드를 문자열로, 매개 변수, 메타데이터 및 policyRule을 JSON 개체로 추출해야 합니다. 그런 다음 bicep 배포를 실행할 수 있습니다.
정책 정의의 이름은 JSON 파일의 이름에서 추출됩니다.
[CmdletBinding()]
param (
[Parameter(Mandatory = $true)]
[string]
$managementGroupID,
[string]
$location = "westeurope"
)
$jsonFilesList = Get-ChildItem -Path ./definition/* -include *.json
foreach ($jsonFile in $jsonFilesList) {
$jsonData = Get-Content -Path $jsonFile.FullName | ConvertFrom-Json
$displayName = $jsonData.properties.DisplayName
$name = $jsonFile.name.replace(".json","")
$parameters = $jsonData.properties.parameters | convertTo-Json -Depth 5
$policyRules = $jsonData.properties.policyRule | convertTo-Json -Depth 5
$policyMetadata = $jsonData.properties.metadata | convertTo-Json -Depth 5
$mode = $jsonData.properties.mode
$description = $jsonData.properties.description
$randomNumber = Get-Random
$deployName = "$($name)-$($randomNumber)"
New-AzManagementGroupDeployment -Name $deployName -ManagementGroupId $managementGroupID -Location $location -TemplateFile ./deployDefinition.bicep -defintionName $name -definitionDisplayName $displayName -definitionDescription $description -policyMode $mode -policyParameters $parameters -policyMetadata $policyMetadata -policyRule $policyRules
}
다음 포스팅에서는 과제에 대해 알아보겠습니다.
Reference
이 문제에 관하여(Bicep 및 Azure Policy: 사용자 지정 Azure 정책 생성 및 관리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/omiossec/bicep-and-azure-policy-create-and-manage-custom-azure-policies-4hmn텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)