Azure Automation, ARM 템플릿 및 배포 스크립트의 작동 방식 계정

27579 단어 devopspowershellazure
Azure에서 ARM 템플릿을 사용하면 할 수 있는 일이 거의 없습니다.그중에 자동 운행 계정이 있다.ARM 템플릿You can Check this on Microsoft Docs은 실행 방법 계정 생성을 지원하지 않습니다.포털을 통해 또는 PowerShell 또는 Azure CLI를 사용하여 실행 계정을 생성할 수 있는 방법은 두 가지뿐입니다.이것은 한두 걸음의 과정을 의미한다.
하지만 ARM 템플릿을 직접 배치해서 Run-As 계정을 만들 수 있다면?"Microsoft.Automation/automationAccounts"를 사용하여 자동화 계정을 구축할 수 있으며, deploymentScripts 자원을 사용하여 실행 방식 계정을 새로 만든 자동화 계정에 추가할 수 있습니다.
스크립트를 배치하는 방법을 알고 싶으시면 제
하지만 그 전에 Run As Account에 대해 자세히 알아야 합니다.
실행 방법 계정은 Azure 자원을 관리하기 위한 인증 메커니즘을 제공하는 데 사용됩니다.Azure Active directory에서 가입과 관련된 서비스 주체입니다.이 서비스 주체는 인증서를 사용하여 신분 검증을 하고 이를 자동화 자원 중의 연결 자산으로 사용한다.서비스 주체 인증서도 인증서 자산에 추가하여 신분 검증을 사용합니다.
Customer Account 프로세스는 다음과 같습니다.
  • 자체 서명 인증서 작성
  • 신규 Azure Ad 애플리케이션 및 Azure Ad 애플리케이션 자격 증명 생성
  • Azure 응용 프로그램 ID
  • 를 사용하여 서비스 주체 만들기
  • 구독(또는 선택한 자원 그룹에서만 서비스 주체에 권한 추가
  • Azure Automated Attached 자산에 연결을 추가합니다.
  • 자체 발급된 인증서의 경우 Azure KeyVault가 필요합니다.Azure KeyVault에서는 Az PowerShell 모듈을 사용하여 자체 발급된 인증서를 만들 수 있습니다.
    KeyVault에서 인증서를 만들려면 사용자 이름, 키 유형, 사용법, 유효성을 포함하는 정책을 만들고 인증서를 만드는 두 가지 작업을 수행해야 합니다.
    $AzureKeyVaultCertificatePolicy = New-AzKeyVaultCertificatePolicy -SubjectName $CertificatSubjectName -IssuerName "Self" -KeyType "RSA" -KeyUsage "DigitalSignature" -ValidityInMonths 12 -RenewAtNumberOfDaysBeforeExpiry 20 -KeyNotExportable:$False -ReuseKeyOnRenewal:$False
    
    $AzureKeyVaultCertificate = Add-AzKeyVaultCertificate -VaultName $keyvaultName -Name $RunAsAccountName -CertificatePolicy $AzureKeyVaultCertificatePolicy
    
    Azure Key Vault에서 인증서를 생성하는 데 몇 초 정도 걸릴 수 있습니다.그것의 상태가 완성되기 전에는 사용할 수 없다.
    do {
        start-sleep -Seconds 20
    } until ((Get-AzKeyVaultCertificateOperation -Name $RunAsAccountName -vaultName $keyvaultName).Status -eq "completed")
    
    Azure Automated Certification 자산은 PFX 형식만 적용됩니다.인증서를 서버로 내보내야 합니다.키 라이브러리의 pfx 파일입니다.
    먼저 PFX 파일의 암호와 PFX 파일을 저장할 경로가 필요합니다.
    임의 암호를 작성하려면
    $PfxPassword = -join ((48..57) + (65..90) + (97..122) | Get-Random -Count 48| foreach-object {[char]$_})  
    
    pfx 파일의 경로입니다.
    $PfxFilePath = join-path -Path (get-location).path -ChildPath "cert.pfx"
    
    이제 인증서를 내보낼 수 있습니다.
    인증서 대상과 기밀을 가지고 있어야 합니다.
    $AzKeyVaultCertificatObject = Get-AzKeyVaultCertificate -VaultName $keyvaultName -Name $RunAsAccountName
    $AzKeyVaultCertificatSecret = Get-AzKeyVaultSecret -VaultName $keyvaultName -Name $AzKeyVaultCertificatObject.Name
    
    그리고 데이터를 얻어서 PFX 파일을 쓸 수 있습니다.
    $AzKeyVaultCertificatSecretBytes = [System.Convert]::FromBase64String($AzKeyVaultCertificatSecret.SecretValueText)
    $certCollection = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2Collection
    $certCollection.Import($AzKeyVaultCertificatSecretBytes,$null,[System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable)
    $protectedCertificateBytes = $certCollection.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Pkcs12, $PfxPassword)
    [System.IO.File]::WriteAllBytes($PfxFilePath, $protectedCertificateBytes)
    
    현재 실행 방식 계정을 만들 수 있습니다.Azure Active Directory에서 응용 프로그램 객체를 만들고 인증서 표시(PFX 파일 대신)를 사용하여 자격 증명을 정의해야 합니다.
    프로그램을 등록하려면 홈 페이지와 이전 단계에서 만든 인증서의 문자열 표시 형식이 필요합니다.
    우선 응용 프로그램 등록을 만듭니다
    $AzADApplicationRegistration = New-AzADApplication -DisplayName $RunAsAccountName -HomePage "http://$($RunAsAccountName)" -IdentifierUris $AzAdAppURI
    
    새 프로그램에 인증서 증명서를 추가하려면 인증서의 바이너리 날짜를base64String으로 변환해야 합니다.
    $AzKeyVaultCertificatStringValue = [System.Convert]::ToBase64String($certCollection.GetRawCertData())
    
    값을 자격 증명으로 추가
    New-AzADAppCredential -ApplicationId $AzADApplicationRegistration.ApplicationId -CertValue $AzKeyVaultCertificatStringValue -StartDate $certCollection.NotBefore -EndDate $certCollection.NotAfter
    
    두 번째 단계는 응용 프로그램 ID를 사용하여 서비스 주체를 만드는 것이다
    $AzADServicePrincipal = New-AzADServicePrincipal -ApplicationId $AzADApplicationRegistration.ApplicationId -SkipAssignment
    
    -skipassignment를 주의하십시오.기본적으로 새 AzADServicePrincipal은 현재 구독에 역할 참여자를 적용합니다.수동 조작은 문제가 되지 않는다.그러나 자동화 과정에 있어서 이것은 위험할 수도 있고, 스크립트에 너무 많은 특권을 부여할 수도 있다. 만약 누군가가 잘못 설정한 상황에서 이 스크립트를 수정할 수 있다면.
    그러나 역할 할당이 없으면 실행 방식 계정이 완전하지 않다는 것을 기억하십시오.
    이제 서비스 담당자와 PFX 파일이 있으면 자동화 계정에서 실행 방식 계정을 만들 수 있습니다.
    먼저 이전에 작성한 문자열 암호를 SecureString 객체로 변환해야 합니다.
    PfxPassword = ConvertTo-SecureString $PfxPassword -AsPlainText -Force
    
    자동화 계정에 인증서 자산을 생성합니다.
    New-AzAutomationCertificate -ResourceGroupName $ResourceGroupName -AutomationAccountName $AutomationAccount -Path $PfxFilePath -Name "AzureRunAsCertificate" -Password $PfxPassword -Exportable:$Exportable 
    
    연결 자원을 만듭니다.이를 위해서는 다음과 같은 해시 테이블이 필요합니다.
  • 세입자
  • 구독 ID
  • 애플리케이션 ID
  • 인증서 지문
  • $ConnectionFieldData = @{
            "ApplicationId" = $AzADApplicationRegistration.ApplicationId
            "TenantId" = (Get-AzContext).Tenant.ID
            "CertificateThumbprint" = $certCollection.Thumbprint
            "SubscriptionId" = (Get-AzContext).Subscription.ID
        }
    
    New-AzAutomationConnection -ResourceGroupName $ResourceGroupName -AutomationAccountName $AutomationAccount -Name "AzureRunAsConnection" -ConnectionTypeName "AzureServicePrincipal" -ConnectionFieldValues $ConnectionFieldData
    
    인증서 및 연결 자산의 이름 AzureRunAscertificate 및 AzureRunAsConnection에 유의하십시오.이러한 이름이 없으면 실행 방식 계정이 만들어지지 않으며, 자동화 계정은 두 개의 쓸모없는 대상으로 끝납니다.
    이제 ARM 템플릿에서 프로세스를 어떻게 자동화합니까?
    새 Resource DeploymentScripts가 지원을 제공합니다.이 자원은 PowerShell 또는 Azure CLI 스크립트를 실행하기 위해 관리형 ID가 있는 Linux 컨테이너 인스턴스를 생성합니다.
    우선 스크립트를 배치한 위탁 관리 표지를 참여자 역할로 목표 자원 그룹에 부여하는 것이 중요하다.
    스크립트는 Azure KeyVault를 사용하여 자체 서명된 인증서를 작성해야 하므로 인증서 및 기밀 액세스 정책이 필요합니다.
    마지막으로, 응용 프로그램 관리자 역할을 위탁 관리 표식에 분배해야 합니다.이것은 용기에 응용 프로그램을 등록하고 서비스 주체를 만들 수 있도록 허용할 것이다.
    자원에 스크립트를 삽입하는 방법은 두 가지가 있습니다.ARM 템플릿에 스크립트가 있거나 전역적으로 사용할 수 있는 URI에서 스크립트를 호스팅하는 위치 링크를 사용하여 인라인 양식을 사용할 수 있습니다.스크립트에 액세스하는 방법을 제어하려는 경우 SAS 토큰이 있는 Azure blob 컨테이너를 사용할 수 있습니다.
    팔 틀은 아주 간단해요.Automated Account Name, 스크립트 위치 및 SAS 토큰의 3가지 매개 변수가 포함되어 있습니다.
    자동 계정을 만들고 스크립트를 실행할 DeploymentScripts 리소스를 배치합니다.
    {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
            "automationAccountName": {
                "type": "string",
                "metadata": {
                    "description": "Automation Account Name"
                },
                "defaultValue": "mytestautomationomc0001"
            },
            "artifactLocation": {
                "type": "string",
                "metadata": {
                    "description": "Azure Blob URI"
                }
            },
            "artifactSASToken": {
                "type": "string",
                "metadata": {
                    "description": "SAS Token to retreive files"
                }
            }
        },
        "functions": [],
        "variables": {
            "scriptUri": "[concat(parameters('artifactLocation'),parameters('artifactSASToken'))]"
        },
        "resources": [
            {
                "name": "[parameters('automationAccountName')]",
                "type": "Microsoft.Automation/automationAccounts",
                "apiVersion": "2015-10-31",
                "location": "[resourceGroup().location]",
                "tags": {},
                "properties": {
                    "sku": {
                        "name": "Basic"
                    }
                }
            },
            {
                "type": "Microsoft.Resources/deploymentScripts",
                "apiVersion": "2019-10-01-preview",
                "name": "CreateAzureAutomationRunAs",
                "location": "[resourceGroup().location]",
                "dependsOn": [
                    "[resourceId('Microsoft.Automation/automationAccounts', parameters('automationAccountName'))]"
                ],
                "kind": "AzurePowerShell",
                "identity": {
                    "type": "UserAssigned",
                    "userAssignedIdentities": {
                        "/subscriptions/xxxxx-xxxx-xxxxx/resourceGroups/01-test-arm/providers/Microsoft.ManagedIdentity/userAssignedIdentities/testidentiry": {}
                    }
                },
                "properties": {
                    "azPowerShellVersion": "3.0",
                    "primaryScriptUri": "[variables('scriptUri')]",
                    "arguments": "[concat('-AutomationAccount ', parameters('automationAccountName'), ' -ResourceGroupName ', resourceGroup().name, ' -KeyVaultName testomc-automation001')]",
                    "timeout": "PT15M",
                    "cleanupPreference": "OnExpiration",
                    "retentionInterval": "P4D"
                }
            }
        ],
        "outputs": {}
    }
    
    primary ScriptUri는 SAS 태그가 있는 스크립트의 URI를 포함합니다.arguments 매개 변수는 연결 함수로 스크립트에 매개 변수 목록을 생성합니다.
    스크립트 오류 시 오류를 트리거할 수 있도록 15분 제한 시간(PT15M)을 추가했습니다.디버깅을 마친 후, DeploymentScripts 자원 (저장 계정과 용기 실례) 을 4일 동안 보존합니다.
    DeploymentScript 리소스를 사용할 수 있는 예입니다.전체 스크립트를 찾을 수 있음here
    DeploymentScripts는 아직 미리 보기 중입니다. 문서를 볼 수 있습니다. here

    좋은 웹페이지 즐겨찾기